Skip to content

Commit f5e333e

Browse files
feat: state and addition street customer address
1 parent 47364d1 commit f5e333e

File tree

4 files changed

+293
-0
lines changed

4 files changed

+293
-0
lines changed

src/integration-test/java/com/commercetools/sync/integration/externalsource/customers/CustomerSyncIT.java

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,115 @@ void sync_WithUpdatedAllFieldsOfCustomer_ShouldUpdateCustomerWithAllExpectedActi
344344
.isEqualTo(
345345
"Summary: 1 customers were processed in total (0 created, 1 updated and 0 failed to sync).");
346346
}
347+
348+
@Test
349+
void sync_WithUpdatedAddressStateAndAdditionalStreetInfo_ShouldUpdateCustomer() {
350+
// Create a customer with addresses containing state and additionalStreetInfo
351+
final CustomerDraft customerDraftWithAddressFields =
352+
CustomerDraftBuilder.of()
353+
354+
.password("12345")
355+
.key("customer-key-address-test")
356+
.addresses(
357+
asList(
358+
AddressBuilder.of()
359+
.country(CountryCode.US.name())
360+
.city("San Francisco")
361+
.key("address1")
362+
.state("California")
363+
.additionalStreetInfo("Suite 100")
364+
.build(),
365+
AddressBuilder.of()
366+
.country(CountryCode.DE.name())
367+
.city("Munich")
368+
.key("address2")
369+
.state("Bavaria")
370+
.additionalStreetInfo("Building A")
371+
.build()))
372+
.build();
373+
374+
// Create the customer
375+
final CustomerSyncStatistics createStatistics =
376+
customerSync
377+
.sync(singletonList(customerDraftWithAddressFields))
378+
.toCompletableFuture()
379+
.join();
380+
381+
assertThat(createStatistics.getCreated()).isEqualTo(1);
382+
assertThat(errorMessages).isEmpty();
383+
assertThat(warningMessages).isEmpty();
384+
385+
// Verify the created customer has the correct fields
386+
final Customer createdCustomer =
387+
TestClientUtils.CTP_TARGET_CLIENT
388+
.customers()
389+
.withKey("customer-key-address-test")
390+
.get()
391+
.executeBlocking()
392+
.getBody();
393+
394+
assertThat(createdCustomer.getAddresses()).hasSize(2);
395+
assertThat(createdCustomer.getAddresses().get(0).getState()).isEqualTo("California");
396+
assertThat(createdCustomer.getAddresses().get(0).getAdditionalStreetInfo())
397+
.isEqualTo("Suite 100");
398+
assertThat(createdCustomer.getAddresses().get(1).getState()).isEqualTo("Bavaria");
399+
assertThat(createdCustomer.getAddresses().get(1).getAdditionalStreetInfo())
400+
.isEqualTo("Building A");
401+
402+
// Update the customer with different state and additionalStreetInfo
403+
final CustomerDraft updatedCustomerDraft =
404+
CustomerDraftBuilder.of()
405+
406+
.password("12345")
407+
.key("customer-key-address-test")
408+
.addresses(
409+
asList(
410+
AddressBuilder.of()
411+
.country(CountryCode.US.name())
412+
.city("San Francisco")
413+
.key("address1")
414+
.state("Texas") // Changed from California
415+
.additionalStreetInfo("Suite 200") // Changed from Suite 100
416+
.build(),
417+
AddressBuilder.of()
418+
.country(CountryCode.DE.name())
419+
.city("Munich")
420+
.key("address2")
421+
.state("Berlin") // Changed from Bavaria
422+
.additionalStreetInfo("Building B") // Changed from Building A
423+
.build()))
424+
.build();
425+
426+
// Clear previous update actions
427+
updateActionList.clear();
428+
429+
// Sync the updated customer
430+
final CustomerSyncStatistics updateStatistics =
431+
customerSync.sync(singletonList(updatedCustomerDraft)).toCompletableFuture().join();
432+
433+
assertThat(updateStatistics.getUpdated()).isEqualTo(1);
434+
assertThat(errorMessages).isEmpty();
435+
assertThat(warningMessages).isEmpty();
436+
437+
// Verify update actions were generated for the changed fields
438+
assertThat(updateActionList).isNotEmpty();
439+
assertThat(updateActionList.toString()).contains("changeAddress");
440+
441+
// Verify the updated customer has the new values
442+
final Customer updatedCustomer =
443+
TestClientUtils.CTP_TARGET_CLIENT
444+
.customers()
445+
.withKey("customer-key-address-test")
446+
.get()
447+
.executeBlocking()
448+
.getBody();
449+
450+
assertThat(updatedCustomer.getAddresses()).hasSize(2);
451+
assertThat(updatedCustomer.getAddresses().get(0).getState()).isEqualTo("Texas");
452+
assertThat(updatedCustomer.getAddresses().get(0).getAdditionalStreetInfo())
453+
.isEqualTo("Suite 200");
454+
assertThat(updatedCustomer.getAddresses().get(1).getState()).isEqualTo("Berlin");
455+
assertThat(updatedCustomer.getAddresses().get(1).getAdditionalStreetInfo())
456+
.isEqualTo("Building B");
457+
}
347458
}

src/main/java/com/commercetools/sync/customers/utils/CustomerReferenceResolutionUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,12 @@ private static List<BaseAddress> mapToAddressesDraft(
164164
.lastName(address.getLastName())
165165
.streetName(address.getStreetName())
166166
.streetNumber(address.getStreetNumber())
167+
.additionalStreetInfo(address.getAdditionalStreetInfo())
167168
.additionalAddressInfo(address.getAdditionalAddressInfo())
168169
.postalCode(address.getPostalCode())
169170
.city(address.getCity())
170171
.region(address.getRegion())
172+
.state(address.getState())
171173
.country(address.getCountry())
172174
.company(address.getCompany())
173175
.department(address.getDepartment())

src/test/java/com/commercetools/sync/customers/utils/AddressUpdateActionUtilsTest.java

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,121 @@ void buildChangeAddressUpdateActions_WithNullAddresses_ShouldNotReturnChangeAddr
529529
assertThat(updateActions).isEmpty();
530530
}
531531

532+
@Test
533+
void buildChangeAddressUpdateActions_WithDifferentState_ShouldReturnChangeAddressAction() {
534+
535+
when(oldCustomer.getAddresses())
536+
.thenReturn(
537+
singletonList(
538+
AddressBuilder.of()
539+
.country(CountryCode.US.toString())
540+
.key("address-key-1")
541+
.id("address-id-1")
542+
.state("California")
543+
.build()));
544+
545+
final AddressDraft address1 =
546+
AddressDraftBuilder.of()
547+
.country(CountryCode.US.toString())
548+
.key("address-key-1")
549+
.state("Texas")
550+
.id("address-id-new-1")
551+
.build();
552+
553+
final CustomerDraft newCustomer =
554+
CustomerDraftBuilder.of()
555+
.email("email")
556+
.password("pass")
557+
.addresses(singletonList(address1))
558+
.build();
559+
560+
final List<CustomerUpdateAction> updateActions =
561+
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);
562+
563+
assertThat(updateActions)
564+
.containsExactly(
565+
CustomerChangeAddressActionBuilder.of()
566+
.addressId("address-id-1")
567+
.address(address1)
568+
.build());
569+
}
570+
571+
@Test
572+
void
573+
buildChangeAddressUpdateActions_WithDifferentAdditionalStreetInfo_ShouldReturnChangeAddressAction() {
574+
575+
when(oldCustomer.getAddresses())
576+
.thenReturn(
577+
singletonList(
578+
AddressBuilder.of()
579+
.country(CountryCode.US.toString())
580+
.key("address-key-1")
581+
.id("address-id-1")
582+
.additionalStreetInfo("Suite 100")
583+
.build()));
584+
585+
final AddressDraft address1 =
586+
AddressDraftBuilder.of()
587+
.country(CountryCode.US.toString())
588+
.key("address-key-1")
589+
.additionalStreetInfo("Suite 200")
590+
.id("address-id-new-1")
591+
.build();
592+
593+
final CustomerDraft newCustomer =
594+
CustomerDraftBuilder.of()
595+
.email("email")
596+
.password("pass")
597+
.addresses(singletonList(address1))
598+
.build();
599+
600+
final List<CustomerUpdateAction> updateActions =
601+
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);
602+
603+
assertThat(updateActions)
604+
.containsExactly(
605+
CustomerChangeAddressActionBuilder.of()
606+
.addressId("address-id-1")
607+
.address(address1)
608+
.build());
609+
}
610+
611+
@Test
612+
void
613+
buildChangeAddressUpdateActions_WithSameStateAndAdditionalStreetInfo_ShouldNotReturnAction() {
614+
615+
when(oldCustomer.getAddresses())
616+
.thenReturn(
617+
singletonList(
618+
AddressBuilder.of()
619+
.country(CountryCode.US.toString())
620+
.key("address-key-1")
621+
.id("address-id-1")
622+
.state("California")
623+
.additionalStreetInfo("Suite 100")
624+
.build()));
625+
626+
final CustomerDraft newCustomer =
627+
CustomerDraftBuilder.of()
628+
.email("email")
629+
.password("pass")
630+
.addresses(
631+
singletonList(
632+
AddressBuilder.of()
633+
.country(CountryCode.US.toString())
634+
.key("address-key-1")
635+
.id("address-id-new-1")
636+
.state("California")
637+
.additionalStreetInfo("Suite 100")
638+
.build()))
639+
.build();
640+
641+
final List<CustomerUpdateAction> updateActions =
642+
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);
643+
644+
assertThat(updateActions).isEmpty();
645+
}
646+
532647
@Test
533648
void
534649
buildChangeAddressUpdateActions_WithAddressesWithoutKeys_ShouldNotReturnChangeAddressActions() {

src/test/java/com/commercetools/sync/customers/utils/CustomerReferenceResolutionUtilsTest.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,69 @@ void mapToCustomerDrafts_WithAddresses_ShouldReturnResourceIdentifiersWithCorrec
212212
assertThat(customerDraft.getBillingAddresses()).isEqualTo(asList(0, 2));
213213
assertThat(customerDraft.getShippingAddresses()).isEmpty();
214214
}
215+
216+
@Test
217+
void mapToCustomerDrafts_WithStateAndAdditionalStreetInfo_ShouldMapFieldsCorrectly() {
218+
final Customer mockCustomer = mock(Customer.class);
219+
when(mockCustomer.getEmail()).thenReturn("email");
220+
when(mockCustomer.getPassword()).thenReturn("password");
221+
when(mockCustomer.getAddresses())
222+
.thenReturn(
223+
asList(
224+
AddressBuilder.of()
225+
.country(CountryCode.US.toString())
226+
.id("address-id1")
227+
.key("address-key1")
228+
.state("California")
229+
.additionalStreetInfo("Suite 100")
230+
.build(),
231+
AddressBuilder.of()
232+
.country(CountryCode.DE.toString())
233+
.id("address-id2")
234+
.key("address-key2")
235+
.state("Bavaria")
236+
.additionalStreetInfo("Building A")
237+
.build()));
238+
239+
final List<CustomerDraft> referenceReplacedDrafts =
240+
CustomerReferenceResolutionUtils.mapToCustomerDrafts(
241+
singletonList(mockCustomer), referenceIdToKeyCache);
242+
243+
final CustomerDraft customerDraft = referenceReplacedDrafts.get(0);
244+
245+
assertThat(customerDraft.getAddresses()).hasSize(2);
246+
assertThat(customerDraft.getAddresses().get(0).getState()).isEqualTo("California");
247+
assertThat(customerDraft.getAddresses().get(0).getAdditionalStreetInfo())
248+
.isEqualTo("Suite 100");
249+
assertThat(customerDraft.getAddresses().get(1).getState()).isEqualTo("Bavaria");
250+
assertThat(customerDraft.getAddresses().get(1).getAdditionalStreetInfo())
251+
.isEqualTo("Building A");
252+
}
253+
254+
@Test
255+
void mapToCustomerDrafts_WithNullStateAndAdditionalStreetInfo_ShouldMapFieldsAsNull() {
256+
final Customer mockCustomer = mock(Customer.class);
257+
when(mockCustomer.getEmail()).thenReturn("email");
258+
when(mockCustomer.getPassword()).thenReturn("password");
259+
when(mockCustomer.getAddresses())
260+
.thenReturn(
261+
singletonList(
262+
AddressBuilder.of()
263+
.country(CountryCode.US.toString())
264+
.id("address-id1")
265+
.key("address-key1")
266+
.state(null)
267+
.additionalStreetInfo(null)
268+
.build()));
269+
270+
final List<CustomerDraft> referenceReplacedDrafts =
271+
CustomerReferenceResolutionUtils.mapToCustomerDrafts(
272+
singletonList(mockCustomer), referenceIdToKeyCache);
273+
274+
final CustomerDraft customerDraft = referenceReplacedDrafts.get(0);
275+
276+
assertThat(customerDraft.getAddresses()).hasSize(1);
277+
assertThat(customerDraft.getAddresses().get(0).getState()).isNull();
278+
assertThat(customerDraft.getAddresses().get(0).getAdditionalStreetInfo()).isNull();
279+
}
215280
}

0 commit comments

Comments
 (0)