Skip to content

Commit b61de4b

Browse files
Merge pull request #200 from commercetools/product-sync-note
Validate draft SKUs and cache ids per batch
2 parents b6a9f79 + 660c5de commit b61de4b

18 files changed

Lines changed: 1035 additions & 226 deletions

File tree

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[![Build Status](https://travis-ci.org/commercetools/commercetools-sync-java.svg?branch=master)](https://travis-ci.org/commercetools/commercetools-sync-java)
44
[![codecov](https://codecov.io/gh/commercetools/commercetools-sync-java/branch/master/graph/badge.svg)](https://codecov.io/gh/commercetools/commercetools-sync-java)
55
[![Download](https://api.bintray.com/packages/commercetools/maven/commercetools-sync-java/images/download.svg) ](https://bintray.com/commercetools/maven/commercetools-sync-java/_latestVersion)
6-
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M8/)
6+
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M9/)
77
[![Known Vulnerabilities](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646/badge.svg)](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646)
88

99
Java API which exposes utilities for building update actions and automatic syncing of CTP data from external sources
@@ -21,7 +21,7 @@ Java API which exposes utilities for building update actions and automatic synci
2121
- [Ivy](#ivy)
2222
- [Roadmap](#roadmap)
2323
- [Release Notes](/docs/RELEASE_NOTES.md)
24-
- [Javadoc](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M8/)
24+
- [Javadoc](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M9/)
2525

2626
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2727
## Usage
@@ -56,20 +56,20 @@ most popular ones:
5656
<dependency>
5757
<groupId>com.commercetools</groupId>
5858
<artifactId>commercetools-sync-java</artifactId>
59-
<version>v1.0.0-M8</version>
59+
<version>v1.0.0-M9</version>
6060
</dependency>
6161
````
6262
#### Gradle
6363
````groovy
64-
implementation 'com.commercetools:commercetools-sync-java:v1.0.0-M8'
64+
implementation 'com.commercetools:commercetools-sync-java:v1.0.0-M9'
6565
````
6666
#### SBT
6767
````
68-
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "v1.0.0-M8"
68+
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "v1.0.0-M9"
6969
````
7070
#### Ivy
7171
````xml
72-
<dependency org="com.commercetools" name="commercetools-sync-java" rev="v1.0.0-M8"/>
72+
<dependency org="com.commercetools" name="commercetools-sync-java" rev="v1.0.0-M9"/>
7373
````
7474

7575

docs/RELEASE_NOTES.md

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
3434

3535

36+
- [v1.0.0-M9 - Jan 22, 2018](#v100-m9----jan-22-2018)
3637
- [v1.0.0-M8 - Dec 29, 2017](#v100-m8----dec-29-2017)
3738
- [v1.0.0-M7 - Dec 15, 2017](#v100-m7----dec-15-2017)
3839
- [v1.0.0-M6 - Dec 5, 2017](#v100-m6----dec-5-2017)
@@ -46,19 +47,31 @@
4647
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
4748

4849
<!--
49-
### v1.0.0-M9 - Jan 15, 2018
50+
### v1.0.0-M10 - Feb 07, 2018
51+
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/v1.0.0-M9...v1.0.0-M10) |
52+
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M10/) |
53+
[Jar](https://bintray.com/commercetools/maven/commercetools-sync-java/v1.0.0-M10)
54+
-->
55+
56+
### v1.0.0-M9 - Jan 22, 2018
5057
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/v1.0.0-M8...v1.0.0-M9) |
5158
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M9/) |
5259
[Jar](https://bintray.com/commercetools/maven/commercetools-sync-java/v1.0.0-M9)
5360

61+
**New Features** (1)
62+
- **Commons** - Added `getSyncOptions` to the `ProductSync`, `CategorySync` and `InventorySync`. [#230](https://github.com/commercetools/commercetools-sync-java/issues/230)
63+
64+
**Changes** (1)
65+
- **Product Sync** - Added validation for product drafts' SKUs as a required field on the input product drafts since SKUs will be used for product matching in the future. [#230](https://github.com/commercetools/commercetools-sync-java/issues/230)
66+
67+
**Enhancements** (1)
68+
- **Product Sync** - Changed the product sync to cache product ids per batch as opposed to caching the entire products ids before syncing products. [#230](https://github.com/commercetools/commercetools-sync-java/issues/230)
5469

5570
**Bug Fixes** (1)
5671
- **Commons** - Fixed library version in User-Agent headers of JVM SDK clients using the library. Now it is not fetched
5772
from the JAR manifest but injected by gradle-scripts/set-release-version.gradle. [#227](https://github.com/commercetools/commercetools-sync-java/issues/227)
5873

5974

60-
-->
61-
6275
### v1.0.0-M8 - Dec 29, 2017
6376
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/v1.0.0-M7...v1.0.0-M8) |
6477
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/v1.0.0-M8/) |

docs/usage/PRODUCT_SYNC.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ Utility which provides API for building CTP product update actions and product s
2424
1. The sync expects a list of non-null `ProductDraft` objects that have their `key` fields set to match the
2525
products from the source to the target. Also the target project is expected to have the `key` fields set,
2626
otherwise they won't be matched.
27+
28+
**NOTE: PLEASE MAKE SURE THE `SKU` FIELDS OF ALL PRODUCTS ARE SET AS THE SYNC LIBRARY WILL BE MIGRATED TO MATCH PRODUCTS BY `SKU` INSTEAD OF `KEY` IN THE FUTURE.**
29+
2730
2. Every product may have several references including `product type`, `categories`, `taxCategory`, etc.. Variants
2831
of the product also have prices, where each prices also has some references including a reference to the `Type` of its
2932
custom fields and a reference to a `channel`. All these referenced resources are matched by their `key` Therefore, in

src/integration-test/java/com/commercetools/sync/integration/ctpprojectsource/products/ProductSyncIT.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public void sync_withProductTypeReference_ShouldUpdateProducts() {
315315
sourceProductType.toReference())
316316
.slug(LocalizedString.ofEnglish("newSlug3"))
317317
.key("productKey3")
318-
.masterVariant(ProductVariantDraftBuilder.of().key("v3").build())
318+
.masterVariant(ProductVariantDraftBuilder.of().key("v3").sku("s3").build())
319319
.taxCategory(null)
320320
.state(null)
321321
.categories(Collections.emptySet())
@@ -336,6 +336,7 @@ public void sync_withProductTypeReference_ShouldUpdateProducts() {
336336

337337
final ProductVariantDraft masterVariant = ProductVariantDraftBuilder.of()
338338
.key("v1")
339+
.sku("s1")
339340
.attributes(attributeDrafts).build();
340341

341342
// Create existing product with productKey1 in source project that has references to products with keys

src/integration-test/java/com/commercetools/sync/integration/externalsource/products/ProductSyncIT.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public void sync_withMultipleBatchSyncing_ShouldSync() {
345345
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
346346
.key("productKey4")
347347
.slug(LocalizedString.of(Locale.ENGLISH, "slug4"))
348-
.masterVariant(ProductVariantDraftBuilder.of().key("v4").build())
348+
.masterVariant(ProductVariantDraftBuilder.of().key("v4").sku("sku4").build())
349349
.build();
350350

351351
final List<ProductDraft> batch2 = new ArrayList<>();
@@ -359,7 +359,7 @@ public void sync_withMultipleBatchSyncing_ShouldSync() {
359359
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
360360
.key("productKey3")
361361
.slug(LocalizedString.of(Locale.ENGLISH, "newSlug"))
362-
.masterVariant(ProductVariantDraftBuilder.of().key("v3").build())
362+
.masterVariant(ProductVariantDraftBuilder.of().key("v3").sku("sku3").build())
363363
.build();
364364

365365
final List<ProductDraft> batch3 = new ArrayList<>();
@@ -393,7 +393,7 @@ public void sync_withSingleBatchSyncing_ShouldSync() {
393393
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
394394
.key("productKey3")
395395
.slug(LocalizedString.of(Locale.ENGLISH, "slug3"))
396-
.masterVariant(ProductVariantDraftBuilder.of().build())
396+
.masterVariant(ProductVariantDraftBuilder.of().key("mv3").sku("sku3").build())
397397
.build();
398398

399399
final ProductDraft key4Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -404,7 +404,7 @@ public void sync_withSingleBatchSyncing_ShouldSync() {
404404
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
405405
.key("productKey4")
406406
.slug(LocalizedString.of(Locale.ENGLISH, "slug4"))
407-
.masterVariant(ProductVariantDraftBuilder.of().build())
407+
.masterVariant(ProductVariantDraftBuilder.of().key("mv4").sku("sku4").build())
408408
.build();
409409

410410
final ProductDraft key5Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -415,7 +415,7 @@ public void sync_withSingleBatchSyncing_ShouldSync() {
415415
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
416416
.key("productKey5")
417417
.slug(LocalizedString.of(Locale.ENGLISH, "slug5"))
418-
.masterVariant(ProductVariantDraftBuilder.of().build())
418+
.masterVariant(ProductVariantDraftBuilder.of().key("mv5").sku("sku5").build())
419419
.build();
420420

421421
final ProductDraft key6Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -426,7 +426,7 @@ public void sync_withSingleBatchSyncing_ShouldSync() {
426426
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
427427
.key("productKey6")
428428
.slug(LocalizedString.of(Locale.ENGLISH, "slug6"))
429-
.masterVariant(ProductVariantDraftBuilder.of().build())
429+
.masterVariant(ProductVariantDraftBuilder.of().key("mv6").sku("sku6").build())
430430
.build();
431431

432432
final List<ProductDraft> batch = new ArrayList<>();
@@ -460,7 +460,7 @@ public void sync_withSameSlugInSingleBatch_ShouldNotSyncIt() {
460460
.categories(new ArrayList<>())
461461
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
462462
.key("productKey3")
463-
.masterVariant(ProductVariantDraftBuilder.of().build())
463+
.masterVariant(ProductVariantDraftBuilder.of().key("k3").sku("s3").build())
464464
.build();
465465

466466
final ProductDraft key4Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -470,7 +470,7 @@ public void sync_withSameSlugInSingleBatch_ShouldNotSyncIt() {
470470
.categories(new ArrayList<>())
471471
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
472472
.key("productKey4")
473-
.masterVariant(ProductVariantDraftBuilder.of().build())
473+
.masterVariant(ProductVariantDraftBuilder.of().key("k4").sku("s4").build())
474474
.build();
475475

476476
final ProductDraft key5Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -480,7 +480,7 @@ public void sync_withSameSlugInSingleBatch_ShouldNotSyncIt() {
480480
.categories(new ArrayList<>())
481481
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
482482
.key("productKey5")
483-
.masterVariant(ProductVariantDraftBuilder.of().build())
483+
.masterVariant(ProductVariantDraftBuilder.of().key("k5").sku("s5").build())
484484
.build();
485485

486486
final ProductDraft key6Draft = createProductDraftBuilder(PRODUCT_KEY_2_RESOURCE_PATH,
@@ -490,7 +490,7 @@ public void sync_withSameSlugInSingleBatch_ShouldNotSyncIt() {
490490
.categories(new ArrayList<>())
491491
.categoryOrderHints(CategoryOrderHints.of(new HashMap<>()))
492492
.key("productKey6")
493-
.masterVariant(ProductVariantDraftBuilder.of().build())
493+
.masterVariant(ProductVariantDraftBuilder.of().key("k6").sku("s6").build())
494494
.build();
495495

496496
final List<ProductDraft> batch = new ArrayList<>();
@@ -558,9 +558,9 @@ public void sync_withADraftsWithBlankKeysInBatch_ShouldNotSyncItAndTriggerErrorC
558558
assertThat(errorCallBackExceptions).hasSize(2);
559559
assertThat(errorCallBackMessages).hasSize(2);
560560
assertThat(errorCallBackMessages.get(0))
561-
.isEqualToIgnoringCase(format("ProductDraft with name: %s doesn't have a key.", key3Draft.getName()));
561+
.containsIgnoringCase(format("ProductDraft with name: %s doesn't have a key.", key3Draft.getName()));
562562
assertThat(errorCallBackMessages.get(1))
563-
.isEqualToIgnoringCase(format("ProductDraft with name: %s doesn't have a key.", key4Draft.getName()));
563+
.containsIgnoringCase(format("ProductDraft with name: %s doesn't have a key.", key4Draft.getName()));
564564
assertThat(warningCallBackMessages).isEmpty();
565565
}
566566

0 commit comments

Comments
 (0)