From 85f79e2f51b2ce7f43ce6a23114b99a1f5f5129f Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Wed, 11 Feb 2026 13:49:08 +0100 Subject: [PATCH 1/3] fix NPE in category tree factory Closes #1033 --- .../models/category/CategoryTreeFactory.java | 2 +- .../com/commercetools/CategoriesTest.java | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/category/CategoryTreeFactory.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/category/CategoryTreeFactory.java index d108a53c5f..87e82807c2 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/category/CategoryTreeFactory.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/models/category/CategoryTreeFactory.java @@ -64,7 +64,7 @@ private Map getLocalizedStringEntryCategoryMap( .values() .keySet() .stream() - .map(Locale::new) + .map(Locale::forLanguageTag) .collect(Collectors.toSet()); localesForTheCategory.forEach(locale -> { final LocalizedStringEntry stringsEntry = LocalizedStringEntry.of(locale, diff --git a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java index 94ba8a978a..d61399fd96 100644 --- a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java +++ b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java @@ -66,4 +66,64 @@ public void testCategoryTree() { var result = tree.findBySlug(Locale.ENGLISH, "women"); Assertions.assertThat(result).isNotEmpty(); } + + @Test + public void testGetLocalizedStringEntryCategoryMap() + { + List allCategoriesAsFlatList = List.of( + Category.builder() + .name(LocalizedString.of(Locale.forLanguageTag("en-US"), "Women")) + .slug(LocalizedString.of(Locale.forLanguageTag("en-US"), "women")) + .id("1") + .version(1L) + .createdAt(ZonedDateTime.now()) + .lastModifiedAt(ZonedDateTime.now()) + .ancestors() + .orderHint("c2") + .build(), + Category.builder() + .name(LocalizedString.of(Locale.forLanguageTag("en"), "Men")) + .slug(LocalizedString.of(Locale.forLanguageTag("en"), "men")) + .id("2") + .version(1L) + .createdAt(ZonedDateTime.now()) + .lastModifiedAt(ZonedDateTime.now()) + .ancestors() + .orderHint("c2") + .build(), + Category.builder() + .name(LocalizedString.of(Locale.forLanguageTag("en-us"), "Kids")) + .slug(LocalizedString.of(Locale.forLanguageTag("en-us"), "kids")) + .id("3") + .version(1L) + .createdAt(ZonedDateTime.now()) + .lastModifiedAt(ZonedDateTime.now()) + .ancestors() + .orderHint("c2") + .build()); + CategoryTreeFactory factory = CategoryTreeFactory.of(); + + var tree = factory.create(allCategoriesAsFlatList); + var result = tree.findBySlug(Locale.forLanguageTag("en-US"), "women"); + Assertions.assertThat(result).isNotEmpty(); + var enUsResult = tree.findBySlug(Locale.forLanguageTag("en-us"), "women"); + Assertions.assertThat(enUsResult).isNotEmpty(); + + var enResult = tree.findBySlug(Locale.forLanguageTag("en"), "women"); + Assertions.assertThat(enResult).isEmpty(); + + var menResult = tree.findBySlug(Locale.forLanguageTag("en-US"), "men"); + Assertions.assertThat(menResult).isEmpty(); + var menEnUsResult = tree.findBySlug(Locale.forLanguageTag("en-us"), "men"); + Assertions.assertThat(menEnUsResult).isEmpty(); + var menEnResult = tree.findBySlug(Locale.forLanguageTag("en"), "men"); + Assertions.assertThat(menEnResult).isNotEmpty(); + + var kidsResult = tree.findBySlug(Locale.forLanguageTag("en-US"), "kids"); + Assertions.assertThat(kidsResult).isNotEmpty(); + var kidsEnUsResult = tree.findBySlug(Locale.forLanguageTag("en-us"), "kids"); + Assertions.assertThat(kidsEnUsResult).isNotEmpty(); + var kidsEnResult = tree.findBySlug(Locale.forLanguageTag("en"), "kids"); + Assertions.assertThat(kidsEnResult).isEmpty(); + } } From 899ed51a7b6607161fcda5c1000115a076cc4fe7 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 12:51:55 +0000 Subject: [PATCH 2/3] spotless: Fix code style --- .../com/commercetools/CategoriesTest.java | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java index d61399fd96..bf22e62fcc 100644 --- a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java +++ b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CategoriesTest.java @@ -68,10 +68,9 @@ public void testCategoryTree() { } @Test - public void testGetLocalizedStringEntryCategoryMap() - { + public void testGetLocalizedStringEntryCategoryMap() { List allCategoriesAsFlatList = List.of( - Category.builder() + Category.builder() .name(LocalizedString.of(Locale.forLanguageTag("en-US"), "Women")) .slug(LocalizedString.of(Locale.forLanguageTag("en-US"), "women")) .id("1") @@ -80,27 +79,27 @@ public void testGetLocalizedStringEntryCategoryMap() .lastModifiedAt(ZonedDateTime.now()) .ancestors() .orderHint("c2") - .build(), - Category.builder() - .name(LocalizedString.of(Locale.forLanguageTag("en"), "Men")) - .slug(LocalizedString.of(Locale.forLanguageTag("en"), "men")) - .id("2") - .version(1L) - .createdAt(ZonedDateTime.now()) - .lastModifiedAt(ZonedDateTime.now()) - .ancestors() - .orderHint("c2") - .build(), - Category.builder() - .name(LocalizedString.of(Locale.forLanguageTag("en-us"), "Kids")) - .slug(LocalizedString.of(Locale.forLanguageTag("en-us"), "kids")) - .id("3") - .version(1L) - .createdAt(ZonedDateTime.now()) - .lastModifiedAt(ZonedDateTime.now()) - .ancestors() - .orderHint("c2") - .build()); + .build(), + Category.builder() + .name(LocalizedString.of(Locale.forLanguageTag("en"), "Men")) + .slug(LocalizedString.of(Locale.forLanguageTag("en"), "men")) + .id("2") + .version(1L) + .createdAt(ZonedDateTime.now()) + .lastModifiedAt(ZonedDateTime.now()) + .ancestors() + .orderHint("c2") + .build(), + Category.builder() + .name(LocalizedString.of(Locale.forLanguageTag("en-us"), "Kids")) + .slug(LocalizedString.of(Locale.forLanguageTag("en-us"), "kids")) + .id("3") + .version(1L) + .createdAt(ZonedDateTime.now()) + .lastModifiedAt(ZonedDateTime.now()) + .ancestors() + .orderHint("c2") + .build()); CategoryTreeFactory factory = CategoryTreeFactory.of(); var tree = factory.create(allCategoriesAsFlatList); From 5c2ff5ea391bf0a443fd6a6b186f8289bf0864f9 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 12:51:55 +0000 Subject: [PATCH 3/3] spotless: add commit to blame ignore revs file --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 3596d580c9..bd2fc31cb5 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -24,3 +24,4 @@ c4e2bf407aa0b7a3d34605134791013ba8a2d376 062fb57831db2e3e25afc1bd63cf8b09d46ffa67 13fa17ad575aadf0ef823d63d86fbbdd4a37cd9b f00f4fe6ed5e22cdd2e3f68370c2da96e6bbc8e7 +899ed51a7b6607161fcda5c1000115a076cc4fe7