From d0810e62c4513edd122113833dc2e983d3c7713e Mon Sep 17 00:00:00 2001 From: andrea-ale-sbarra Date: Thu, 23 Jan 2025 17:49:43 +0100 Subject: [PATCH 1/5] LPD-46233 new filters for products --- .../odata/entity/v1_0/ProductEntityModel.java | 10 ++++++++++ .../odata/entity/v1_0/ProductEntityModel.java | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/ProductEntityModel.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/ProductEntityModel.java index 7ce608184b254a..a9d5c42f19e3c3 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/ProductEntityModel.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-impl/src/main/java/com/liferay/headless/commerce/admin/catalog/internal/odata/entity/v1_0/ProductEntityModel.java @@ -43,6 +43,16 @@ public ProductEntityModel(List entityFields) { new CollectionEntityField( new StringEntityField( "categoryNames", locale -> "assetCategoryNames")), + new CollectionEntityField( + new StringEntityField("gtins", locale -> CPField.GTINS)), + new CollectionEntityField( + new StringEntityField( + "specificationNames", + locale -> CPField.SPECIFICATION_NAMES)), + new CollectionEntityField( + new StringEntityField( + "specificationValues", + locale -> CPField.SPECIFICATION_VALUES_NAMES)), new CollectionEntityField( new StringEntityField("tags", locale -> "assetTagNames")), new ComplexEntityField("customFields", entityFields), diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/odata/entity/v1_0/ProductEntityModel.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/odata/entity/v1_0/ProductEntityModel.java index b132bc7767ddbe..52e6858d7833b6 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/odata/entity/v1_0/ProductEntityModel.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-catalog-impl/src/main/java/com/liferay/headless/commerce/delivery/catalog/internal/odata/entity/v1_0/ProductEntityModel.java @@ -5,6 +5,7 @@ package com.liferay.headless.commerce.delivery.catalog.internal.odata.entity.v1_0; +import com.liferay.commerce.product.constants.CPField; import com.liferay.portal.kernel.search.Field; import com.liferay.portal.odata.entity.CollectionEntityField; import com.liferay.portal.odata.entity.ComplexEntityField; @@ -30,6 +31,16 @@ public ProductEntityModel(List entityFields) { new CollectionEntityField( new StringEntityField( "categoryNames", locale -> "assetCategoryNames")), + new CollectionEntityField( + new StringEntityField("gtins", locale -> CPField.GTINS)), + new CollectionEntityField( + new StringEntityField( + "specificationNames", + locale -> CPField.SPECIFICATION_NAMES)), + new CollectionEntityField( + new StringEntityField( + "specificationValues", + locale -> CPField.SPECIFICATION_VALUES_NAMES)), new CollectionEntityField( new StringEntityField("tags", locale -> "assetTagNames")), new ComplexEntityField("customFields", entityFields), From 58b99e3c9ead9f43325c7acfd54eebfcdc8d02c6 Mon Sep 17 00:00:00 2001 From: andrea-ale-sbarra Date: Thu, 23 Jan 2025 17:50:45 +0100 Subject: [PATCH 2/5] LPD-46233 decide if specification is facetable # breaking ## What modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java method addCPSpecificationOption now has a new parameter to configure if the specfication is facetable ## Why this change is required to make tests more configurable ---- --- .../com/liferay/commerce/product/test/util/CPTestUtil.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java b/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java index ecce994c824afd..90f18ee89c0479 100644 --- a/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java +++ b/modules/apps/commerce/commerce-product-test-util/src/main/java/com/liferay/commerce/product/test/util/CPTestUtil.java @@ -741,7 +741,8 @@ public static CPOptionValue addCPOptionValue(CPOption cpOption, String key) ServiceContextTestUtil.getServiceContext()); } - public static CPSpecificationOption addCPSpecificationOption(long groupId) + public static CPSpecificationOption addCPSpecificationOption( + long groupId, boolean facetable) throws PortalException { ServiceContext serviceContext = @@ -750,7 +751,7 @@ public static CPSpecificationOption addCPSpecificationOption(long groupId) return CPSpecificationOptionLocalServiceUtil.addCPSpecificationOption( RandomTestUtil.randomString(), serviceContext.getUserId(), 0, null, RandomTestUtil.randomLocaleStringMap(), - RandomTestUtil.randomLocaleStringMap(), false, + RandomTestUtil.randomLocaleStringMap(), facetable, RandomTestUtil.randomString(), RandomTestUtil.randomDouble(), serviceContext); } From 1158389fec34da9641ad61d616bb211d2541b2e6 Mon Sep 17 00:00:00 2001 From: andrea-ale-sbarra Date: Thu, 23 Jan 2025 17:51:55 +0100 Subject: [PATCH 3/5] LPD-46233 adapt usage --- .../product/service/test/CPDefinitionLocalServiceTest.java | 3 ++- .../catalog/resource/v1_0/test/ProductResourceTest.java | 5 +++++ .../resource/v1_0/test/ProductSpecificationResourceTest.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java index 3c8f6dcc471a97..e4671b0b5a19ca 100644 --- a/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java +++ b/modules/apps/commerce/commerce-product-test/src/testIntegration/java/com/liferay/commerce/product/service/test/CPDefinitionLocalServiceTest.java @@ -529,7 +529,8 @@ public void testCopyCPDefinition() throws PortalException { true); CPSpecificationOption cpSpecificationOption = - CPTestUtil.addCPSpecificationOption(_commerceCatalog.getGroupId()); + CPTestUtil.addCPSpecificationOption( + _commerceCatalog.getGroupId(), false); CPDefinitionSpecificationOptionValue cpDefinitionSpecificationOptionValue1 = diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java index 76c5cb6f901212..3c795196790d23 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java @@ -112,6 +112,11 @@ public void setUp() throws Exception { _commerceCatalog.getGroupId(), user.getUserId(), commerceCurrency.getCode(), "promotion", RandomTestUtil.randomString(), serviceContext); + + _cpOptionCategory = CPTestUtil.addCPOptionCategory( + testGroup.getGroupId()); + _cpSpecificationOption = CPTestUtil.addCPSpecificationOption( + testGroup.getGroupId(), true); } @After diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java index 6cd9ef74fce4af..86756a2ebb8c2a 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductSpecificationResourceTest.java @@ -44,7 +44,7 @@ public void setUp() throws Exception { _cpOptionCategory = CPTestUtil.addCPOptionCategory( testGroup.getGroupId()); _cpSpecificationOption = CPTestUtil.addCPSpecificationOption( - testGroup.getGroupId()); + testGroup.getGroupId(), false); } @Override From 2f854fc17f76ef35c0789105e0f9807f8a330b78 Mon Sep 17 00:00:00 2001 From: andrea-ale-sbarra Date: Thu, 23 Jan 2025 17:52:07 +0100 Subject: [PATCH 4/5] LPD-46233 test --- .../v1_0/test/ProductResourceTest.java | 124 +++++++++++++++++- 1 file changed, 120 insertions(+), 4 deletions(-) diff --git a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java index 3c795196790d23..281f6bdcda8994 100644 --- a/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java +++ b/modules/apps/commerce/headless/headless-commerce/headless-commerce-admin-catalog-test/src/testIntegration/java/com/liferay/headless/commerce/admin/catalog/resource/v1_0/test/ProductResourceTest.java @@ -14,19 +14,25 @@ import com.liferay.commerce.price.list.service.CommercePriceListLocalService; import com.liferay.commerce.product.model.CPDefinition; import com.liferay.commerce.product.model.CPInstance; +import com.liferay.commerce.product.model.CPOptionCategory; +import com.liferay.commerce.product.model.CPSpecificationOption; import com.liferay.commerce.product.model.CommerceCatalog; import com.liferay.commerce.product.model.CommerceChannel; import com.liferay.commerce.product.service.CPDefinitionLocalService; import com.liferay.commerce.product.service.CommerceCatalogLocalServiceUtil; +import com.liferay.commerce.product.test.util.CPTestUtil; import com.liferay.commerce.product.type.simple.constants.SimpleCPTypeConstants; import com.liferay.commerce.product.type.virtual.constants.VirtualCPTypeConstants; import com.liferay.commerce.test.util.CommerceTestUtil; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.Product; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.ProductAccountGroup; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.ProductChannel; +import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.ProductSpecification; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.ProductVirtualSettings; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.ProductVirtualSettingsFileEntry; import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.Sku; +import com.liferay.headless.commerce.admin.catalog.client.pagination.Page; +import com.liferay.headless.commerce.admin.catalog.client.pagination.Pagination; import com.liferay.headless.commerce.admin.catalog.client.problem.Problem; import com.liferay.headless.commerce.admin.catalog.client.resource.v1_0.ProductResource; import com.liferay.headless.commerce.core.util.LanguageUtils; @@ -43,6 +49,7 @@ import com.liferay.portal.kernel.util.Base64; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.GetterUtil; +import com.liferay.portal.kernel.util.HashMapBuilder; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.workflow.WorkflowConstants; @@ -171,11 +178,11 @@ public void testGetProductByExternalReferenceCodeByVersion() public void testGetProductByVersion() throws Exception { } - @Ignore @Override @Test public void testGetProductsPage() throws Exception { - super.testGetProductsPage(); + _testGetProductsPage(); + _testGetProductsPageWithFilter(); } @Ignore @@ -436,6 +443,42 @@ protected Product testPostProductClone_addProduct(Product product) return productResource.postProduct(product); } + private Product _randomProductWithProductSpecification() throws Exception { + return new Product() { + { + active = true; + catalogId = _commerceCatalog.getCommerceCatalogId(); + description = LanguageUtils.getLanguageIdMap( + RandomTestUtil.randomLocaleStringMap()); + externalReferenceCode = StringUtil.toLowerCase( + RandomTestUtil.randomString()); + name = LanguageUtils.getLanguageIdMap( + RandomTestUtil.randomLocaleStringMap()); + productType = SimpleCPTypeConstants.NAME; + productSpecifications = new ProductSpecification[] { + new ProductSpecification() { + { + externalReferenceCode = + RandomTestUtil.randomString(); + label = LanguageUtils.getLanguageIdMap( + RandomTestUtil.randomLocaleStringMap()); + optionCategoryExternalReferenceCode = + _cpOptionCategory.getExternalReferenceCode(); + priority = RandomTestUtil.randomDouble(); + specificationKey = _cpSpecificationOption.getKey(); + value = LanguageUtils.getLanguageIdMap( + HashMapBuilder.put( + LocaleUtil.getDefault(), "test" + ).build()); + } + } + }; + shortDescription = LanguageUtils.getLanguageIdMap( + RandomTestUtil.randomLocaleStringMap()); + } + }; + } + private Product _randomProductWithSku() throws Exception { return new Product() { { @@ -462,8 +505,7 @@ private Product _randomProductWithSku() throws Exception { expirationDate = RandomTestUtil.nextDate(); externalReferenceCode = StringUtil.toLowerCase( RandomTestUtil.randomString()); - gtin = StringUtil.toLowerCase( - RandomTestUtil.randomString()); + gtin = "test"; height = RandomTestUtil.randomDouble(); inventoryLevel = RandomTestUtil.randomInt(); manufacturerPartNumber = StringUtil.toLowerCase( @@ -488,6 +530,74 @@ private Product _randomProductWithSku() throws Exception { }; } + private void _testGetProductsPage() throws Exception { + Page page = productResource.getProductsPage( + null, null, Pagination.of(1, 10), null); + + long totalCount = page.getTotalCount(); + + Product product1 = testGetProductsPage_addProduct(randomProduct()); + + Product product2 = testGetProductsPage_addProduct(randomProduct()); + + page = productResource.getProductsPage( + null, null, Pagination.of(1, 10), null); + + Assert.assertEquals(totalCount + 2, page.getTotalCount()); + + assertContains(product1, (List)page.getItems()); + assertContains(product2, (List)page.getItems()); + assertValid(page, testGetProductsPage_getExpectedActions()); + + productResource.deleteProduct(product1.getProductId()); + + productResource.deleteProduct(product2.getProductId()); + } + + private void _testGetProductsPageWithFilter() throws Exception { + Page page = productResource.getProductsPage( + null, null, Pagination.of(1, 10), null); + + long totalCount = page.getTotalCount(); + + Product product1 = testGetProductsPage_addProduct( + _randomProductWithSku()); + + Product product2 = testGetProductsPage_addProduct( + _randomProductWithProductSpecification()); + + page = productResource.getProductsPage( + null, null, Pagination.of(1, 10), null); + + Assert.assertEquals(totalCount + 2, page.getTotalCount()); + + assertContains(product1, (List)page.getItems()); + assertContains(product2, (List)page.getItems()); + assertValid(page, testGetProductsPage_getExpectedActions()); + + page = productResource.getProductsPage( + null, "(gtins/any(x:contains(x, 'test')))", Pagination.of(1, 10), + null); + + Assert.assertEquals(totalCount + 1, page.getTotalCount()); + + assertContains(product1, (List)page.getItems()); + assertValid(page, testGetProductsPage_getExpectedActions()); + + page = productResource.getProductsPage( + null, "(specificationValues/any(x:contains(x, 'test')))", + Pagination.of(1, 10), null); + + Assert.assertEquals(totalCount + 1, page.getTotalCount()); + + assertContains(product2, (List)page.getItems()); + assertValid(page, testGetProductsPage_getExpectedActions()); + + productResource.deleteProduct(product1.getProductId()); + + productResource.deleteProduct(product2.getProductId()); + } + private Product _testPatchProduct_addProduct() throws Exception { return productResource.postProduct(randomProduct()); } @@ -725,6 +835,12 @@ private void _testPostProductWithWorkflowSingleApprover() throws Exception { @Inject private CPDefinitionLocalService _cpDefinitionLocalService; + @DeleteAfterTestRun + private CPOptionCategory _cpOptionCategory; + + @DeleteAfterTestRun + private CPSpecificationOption _cpSpecificationOption; + @Inject private UserLocalService _userLocalService; From 794353a9ec79b379a30dc1c2f03e0818897dd17c Mon Sep 17 00:00:00 2001 From: andrea-ale-sbarra Date: Thu, 23 Jan 2025 17:56:19 +0100 Subject: [PATCH 5/5] LPD-46233 semantic versioning (gw baseLine) --- modules/apps/commerce/commerce-product-test-util/bnd.bnd | 2 +- .../com/liferay/commerce/product/test/util/packageinfo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/commerce/commerce-product-test-util/bnd.bnd b/modules/apps/commerce/commerce-product-test-util/bnd.bnd index 3973d67bbc71d4..6938a778ccb55b 100644 --- a/modules/apps/commerce/commerce-product-test-util/bnd.bnd +++ b/modules/apps/commerce/commerce-product-test-util/bnd.bnd @@ -1,4 +1,4 @@ Bundle-Name: Liferay Commerce Product Test Utilities Bundle-SymbolicName: com.liferay.commerce.product.test.util -Bundle-Version: 9.5.3 +Bundle-Version: 10.0.0 Export-Package: com.liferay.commerce.product.test.util \ No newline at end of file diff --git a/modules/apps/commerce/commerce-product-test-util/src/main/resources/com/liferay/commerce/product/test/util/packageinfo b/modules/apps/commerce/commerce-product-test-util/src/main/resources/com/liferay/commerce/product/test/util/packageinfo index 3597dc2c0d947f..e470f7cd31c815 100644 --- a/modules/apps/commerce/commerce-product-test-util/src/main/resources/com/liferay/commerce/product/test/util/packageinfo +++ b/modules/apps/commerce/commerce-product-test-util/src/main/resources/com/liferay/commerce/product/test/util/packageinfo @@ -1 +1 @@ -version 6.5.0 \ No newline at end of file +version 7.0.0 \ No newline at end of file