Skip to content

Commit

Permalink
Fix NullPointerException for products having a category but no order …
Browse files Browse the repository at this point in the history
…hints (#1134)
  • Loading branch information
lojzatran authored Dec 21, 2023
1 parent d4ec809 commit fbfbab7
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 20 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# commercetools sync java
[![CI](https://github.com/commercetools/commercetools-sync-java/workflows/CI/badge.svg)](https://github.com/commercetools/commercetools-sync-java/actions?query=workflow%3ACI)
[![codecov](https://codecov.io/gh/commercetools/commercetools-sync-java/branch/master/graph/badge.svg)](https://codecov.io/gh/commercetools/commercetools-sync-java)
[![Javadoc](https://javadoc.io/badge2/com.commercetools/commercetools-sync-java/javadoc.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/10.0.2/)
[![Javadoc](https://javadoc.io/badge2/com.commercetools/commercetools-sync-java/javadoc.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/10.0.3/)
[![Known Vulnerabilities](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646/badge.svg)](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646)


Expand Down Expand Up @@ -60,26 +60,26 @@ Here are the most popular ones:
<dependency>
<groupId>com.commercetools</groupId>
<artifactId>commercetools-sync-java</artifactId>
<version>10.0.2</version>
<version>10.0.3</version>
</dependency>
````

#### Gradle

````groovy
implementation 'com.commercetools:commercetools-sync-java:10.0.2'
implementation 'com.commercetools:commercetools-sync-java:10.0.3'
````

#### SBT

````
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "10.0.2"
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "10.0.3"
````

#### Ivy

````xml
<dependency org="com.commercetools" name="commercetools-sync-java" rev="10.0.2"/>
<dependency org="com.commercetools" name="commercetools-sync-java" rev="10.0.3"/>
````

**Note**: To avoid `commercetools JVM SDK` libraries version mismatch between projects.
Expand Down
14 changes: 7 additions & 7 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# commercetools sync
[![CI](https://github.com/commercetools/commercetools-sync-java/workflows/CI/badge.svg)](https://github.com/commercetools/commercetools-sync-java/actions?query=workflow%3ACI)
[![codecov](https://codecov.io/gh/commercetools/commercetools-sync-java/branch/master/graph/badge.svg)](https://codecov.io/gh/commercetools/commercetools-sync-java)
[![Benchmarks 10.0.2](https://img.shields.io/badge/Benchmarks-10.0.2-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Download from Maven Central](https://img.shields.io/badge/Maven_Central-10.0.2-blue.svg)](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.2/jar)
[![Javadoc](https://javadoc.io/badge2/com.commercetools/commercetools-sync-java/javadoc.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/10.0.2/)
[![Benchmarks 10.0.3](https://img.shields.io/badge/Benchmarks-10.0.3-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Download from Maven Central](https://img.shields.io/badge/Maven_Central-10.0.3-blue.svg)](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.3/jar)
[![Javadoc](https://javadoc.io/badge2/com.commercetools/commercetools-sync-java/javadoc.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/10.0.3/)
[![Known Vulnerabilities](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646/badge.svg)](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646)


Expand Down Expand Up @@ -40,18 +40,18 @@ Here are the most popular ones:
<dependency>
<groupId>com.commercetools</groupId>
<artifactId>commercetools-sync-java</artifactId>
<version>10.0.2</version>
<version>10.0.3</version>
</dependency>
````
#### Gradle
````groovy
implementation 'com.commercetools:commercetools-sync-java:10.0.2'
implementation 'com.commercetools:commercetools-sync-java:10.0.3'
````
#### SBT
````
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "10.0.2"
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "10.0.3"
````
#### Ivy
````xml
<dependency org="com.commercetools" name="commercetools-sync-java" rev="10.0.2"/>
<dependency org="com.commercetools" name="commercetools-sync-java" rev="10.0.3"/>
````
16 changes: 12 additions & 4 deletions docs/RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,19 @@
7. Add Migration guide section which specifies explicitly if there are breaking changes and how to tackle them.
-->

### 10.0.3 - Dec 21, 2023
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/10.0.2...10.0.3) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/10.0.3/) |
[Jar](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.3/jar)

- 🐞 **Bug Fixes** (1)
- Fix NullPointerException for products having a category but no category order hints (https://github.com/commercetools/commercetools-sync-java/pull/1134)

### 10.0.2 - Dec 05, 2023
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/10.0.1...10.0.2) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/10.0.2/) |
[Jar](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.2/jar)
-

- 🐞 **Bug Fixes** (4)
- **Product Sync** - Sync now supports syncing of products with attributes referencing themselves. [#478](https://github.com/commercetools/commercetools-project-sync/issues/478)
- **State Sync** - Fix NPE thrown by `StateDraftBuilder.build()` when required fields are missing. The `StateTransformUtils.toStateDrafts` utility returns an empty draft when key is null or empty.
Expand All @@ -42,15 +50,15 @@
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/10.0.0...10.0.1) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/10.0.1/) |
[Jar](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.1/jar)
-
- 🚧 **Bug fixes** (1)

- 🐞 **Bug fixes** (1)
- Make commercetools-sdk-java-v2 available as a transitive dependency

### 10.0.0 - Nov 6, 2023
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/9.2.3...10.0.0) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/10.0.0/) |
[Jar](https://search.maven.org/artifact/com.commercetools/commercetools-sync-java/10.0.0/jar)
-

- 🚧 **Breaking Changes** (1)
- commercetools-sync-java is now fully migrated to `commercetools-sdk-java-v2`. See [Migration Guide](./MIGRATION_GUIDE.md) on how to use this library version.

Expand Down
4 changes: 2 additions & 2 deletions docs/usage/QUICK_START.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@
<dependency>
<groupId>com.commercetools</groupId>
<artifactId>commercetools-sync-java</artifactId>
<version>10.0.2</version>
<version>10.0.3</version>
</dependency>
````
- For Gradle users:
````groovy
// Add commercetools-sync-java dependency.
implementation 'com.commercetools:commercetools-sync-java:10.0.2'
implementation 'com.commercetools:commercetools-sync-java:10.0.3'
````

### 2. Setup Syncing Options
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,45 @@ void sync_withNewProductWithExistingCategoryAndProductTypeReferences_ShouldCreat
assertThat(warningCallBackMessages).isEmpty();
}

@Test
void sync_withNewProductWithNoCategoryOrderHints_ShouldCreateProduct() {
// preparation
final ProductDraft productDraft =
createProductDraft(
PRODUCT_KEY_1_RESOURCE_PATH,
productTypeSource.toReference(),
oldTaxCategory.toReference(),
oldProductState.toReference(),
categoryReferencesWithIds,
null);
TestClientUtils.CTP_SOURCE_CLIENT.products().create(productDraft).executeBlocking();

final List<ProductProjection> products =
TestClientUtils.CTP_SOURCE_CLIENT
.productProjections()
.get()
.withStaged(true)
.execute()
.thenApply(ApiHttpResponse::getBody)
.thenApply(ProductProjectionPagedQueryResponse::getResults)
.join();

final List<ProductDraft> productDrafts =
ProductTransformUtils.toProductDrafts(
TestClientUtils.CTP_SOURCE_CLIENT, referenceIdToKeyCache, products)
.join();

// test
final ProductSyncStatistics syncStatistics =
productSync.sync(productDrafts).toCompletableFuture().join();

// assertion
assertThat(syncStatistics).hasValues(1, 1, 0, 0);
assertThat(errorCallBackMessages).isEmpty();
assertThat(errorCallBackExceptions).isEmpty();
assertThat(warningCallBackMessages).isEmpty();
}

@Test
void sync_withNewProductWithNoProductTypeKey_ShouldFailCreatingTheProduct() {
// preparation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ private CompletionStage<ProductDraftBuilder> fetchAndResolveCategoryReferences(
.map(
category -> {
keyToCategory.put(category.getKey(), category);
if (categoryOrderHints != null) {
if (categoryOrderHints != null && categoryOrderHints.values() != null) {
ofNullable(categoryOrderHints.values().get(category.getKey()))
.ifPresent(
orderHintValue ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ static CategoryResourceIdentifierPair mapToCategoryReferencePair(
if (referenceIdToKeyCache.containsKey(categoryId)) {
final String categoryKey = referenceIdToKeyCache.get(categoryId);

if (categoryOrderHints != null) {
if (categoryOrderHints != null && categoryOrderHints.values() != null) {
final String categoryOrderHintValue = categoryOrderHints.values().get(categoryId);
if (categoryOrderHintValue != null) {
categoryOrderHintsMapWithKeys.put(categoryKey, categoryOrderHintValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,33 @@ void mapToCategoryReferencePair_WithNullReferences_ShouldNotReplaceIds() {
assertThat(categoryOrderHintsWithKeys).isNull();
}

@Test
void mapToCategoryReferencePair_WithEmptyReferences_ShouldNotReplaceIds() {
final String categoryId = UUID.randomUUID().toString();
final String categoryKey = "categoryKey1";
referenceIdToKeyCache.add(categoryId, categoryKey);

final CategoryOrderHints emptyCategoryOrderHints = CategoryOrderHints.of();

final List<CategoryReference> categoryReferences =
singletonList(CategoryReferenceBuilder.of().id(categoryId).build());
final ProductProjection product = getProductMock(categoryReferences, emptyCategoryOrderHints);

final CategoryResourceIdentifierPair categoryReferencePair =
ProductReferenceResolutionUtils.mapToCategoryReferencePair(product, referenceIdToKeyCache);

assertThat(categoryReferencePair).isNotNull();

final List<CategoryResourceIdentifier> categoryReferencesWithKeys =
categoryReferencePair.getCategoryResourceIdentifiers();
final CategoryOrderHints categoryOrderHintsWithKeys =
categoryReferencePair.getCategoryOrderHints();
assertThat(categoryReferencesWithKeys)
.extracting(ResourceIdentifier::getKey)
.containsExactlyInAnyOrder(categoryKey);
assertThat(categoryOrderHintsWithKeys).isEqualTo(emptyCategoryOrderHints);
}

@Nonnull
private static ProductProjection getProductMock(
@Nonnull final List<CategoryReference> references,
Expand Down

0 comments on commit fbfbab7

Please sign in to comment.