Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -344,4 +344,115 @@ void sync_WithUpdatedAllFieldsOfCustomer_ShouldUpdateCustomerWithAllExpectedActi
.isEqualTo(
"Summary: 1 customers were processed in total (0 created, 1 updated and 0 failed to sync).");
}

@Test
void sync_WithUpdatedAddressStateAndAdditionalStreetInfo_ShouldUpdateCustomer() {
// Create a customer with addresses containing state and additionalStreetInfo
final CustomerDraft customerDraftWithAddressFields =
CustomerDraftBuilder.of()
.email("[email protected]")
.password("12345")
.key("customer-key-address-test")
.addresses(
asList(
AddressBuilder.of()
.country(CountryCode.US.name())
.city("San Francisco")
.key("address1")
.state("California")
.additionalStreetInfo("Suite 100")
.build(),
AddressBuilder.of()
.country(CountryCode.DE.name())
.city("Munich")
.key("address2")
.state("Bavaria")
.additionalStreetInfo("Building A")
.build()))
.build();

// Create the customer
final CustomerSyncStatistics createStatistics =
customerSync
.sync(singletonList(customerDraftWithAddressFields))
.toCompletableFuture()
.join();

assertThat(createStatistics.getCreated().get()).isEqualTo(1);
assertThat(errorMessages).isEmpty();
assertThat(warningMessages).isEmpty();

// Verify the created customer has the correct fields
final Customer createdCustomer =
TestClientUtils.CTP_TARGET_CLIENT
.customers()
.withKey("customer-key-address-test")
.get()
.executeBlocking()
.getBody();

assertThat(createdCustomer.getAddresses()).hasSize(2);
assertThat(createdCustomer.getAddresses().get(0).getState()).isEqualTo("California");
assertThat(createdCustomer.getAddresses().get(0).getAdditionalStreetInfo())
.isEqualTo("Suite 100");
assertThat(createdCustomer.getAddresses().get(1).getState()).isEqualTo("Bavaria");
assertThat(createdCustomer.getAddresses().get(1).getAdditionalStreetInfo())
.isEqualTo("Building A");

// Update the customer with different state and additionalStreetInfo
final CustomerDraft updatedCustomerDraft =
CustomerDraftBuilder.of()
.email("[email protected]")
.password("12345")
.key("customer-key-address-test")
.addresses(
asList(
AddressBuilder.of()
.country(CountryCode.US.name())
.city("San Francisco")
.key("address1")
.state("Texas") // Changed from California
.additionalStreetInfo("Suite 200") // Changed from Suite 100
.build(),
AddressBuilder.of()
.country(CountryCode.DE.name())
.city("Munich")
.key("address2")
.state("Berlin") // Changed from Bavaria
.additionalStreetInfo("Building B") // Changed from Building A
.build()))
.build();

// Clear previous update actions
updateActionList.clear();

// Sync the updated customer
final CustomerSyncStatistics updateStatistics =
customerSync.sync(singletonList(updatedCustomerDraft)).toCompletableFuture().join();

assertThat(updateStatistics.getUpdated().get()).isEqualTo(1);
assertThat(errorMessages).isEmpty();
assertThat(warningMessages).isEmpty();

// Verify update actions were generated for the changed fields
assertThat(updateActionList).isNotEmpty();
assertThat(updateActionList.toString()).contains("changeAddress");

// Verify the updated customer has the new values
final Customer updatedCustomer =
TestClientUtils.CTP_TARGET_CLIENT
.customers()
.withKey("customer-key-address-test")
.get()
.executeBlocking()
.getBody();

assertThat(updatedCustomer.getAddresses()).hasSize(2);
assertThat(updatedCustomer.getAddresses().get(0).getState()).isEqualTo("Texas");
assertThat(updatedCustomer.getAddresses().get(0).getAdditionalStreetInfo())
.isEqualTo("Suite 200");
assertThat(updatedCustomer.getAddresses().get(1).getState()).isEqualTo("Berlin");
assertThat(updatedCustomer.getAddresses().get(1).getAdditionalStreetInfo())
.isEqualTo("Building B");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,12 @@ private static List<BaseAddress> mapToAddressesDraft(
.lastName(address.getLastName())
.streetName(address.getStreetName())
.streetNumber(address.getStreetNumber())
.additionalStreetInfo(address.getAdditionalStreetInfo())
.additionalAddressInfo(address.getAdditionalAddressInfo())
.postalCode(address.getPostalCode())
.city(address.getCity())
.region(address.getRegion())
.state(address.getState())
.country(address.getCountry())
.company(address.getCompany())
.department(address.getDepartment())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,121 @@ void buildChangeAddressUpdateActions_WithNullAddresses_ShouldNotReturnChangeAddr
assertThat(updateActions).isEmpty();
}

@Test
void buildChangeAddressUpdateActions_WithDifferentState_ShouldReturnChangeAddressAction() {

when(oldCustomer.getAddresses())
.thenReturn(
singletonList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.id("address-id-1")
.state("California")
.build()));

final AddressDraft address1 =
AddressDraftBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.state("Texas")
.id("address-id-new-1")
.build();

final CustomerDraft newCustomer =
CustomerDraftBuilder.of()
.email("email")
.password("pass")
.addresses(singletonList(address1))
.build();

final List<CustomerUpdateAction> updateActions =
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);

assertThat(updateActions)
.containsExactly(
CustomerChangeAddressActionBuilder.of()
.addressId("address-id-1")
.address(address1)
.build());
}

@Test
void
buildChangeAddressUpdateActions_WithDifferentAdditionalStreetInfo_ShouldReturnChangeAddressAction() {

when(oldCustomer.getAddresses())
.thenReturn(
singletonList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.id("address-id-1")
.additionalStreetInfo("Suite 100")
.build()));

final AddressDraft address1 =
AddressDraftBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.additionalStreetInfo("Suite 200")
.id("address-id-new-1")
.build();

final CustomerDraft newCustomer =
CustomerDraftBuilder.of()
.email("email")
.password("pass")
.addresses(singletonList(address1))
.build();

final List<CustomerUpdateAction> updateActions =
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);

assertThat(updateActions)
.containsExactly(
CustomerChangeAddressActionBuilder.of()
.addressId("address-id-1")
.address(address1)
.build());
}

@Test
void
buildChangeAddressUpdateActions_WithSameStateAndAdditionalStreetInfo_ShouldNotReturnAction() {

when(oldCustomer.getAddresses())
.thenReturn(
singletonList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.id("address-id-1")
.state("California")
.additionalStreetInfo("Suite 100")
.build()));

final CustomerDraft newCustomer =
CustomerDraftBuilder.of()
.email("email")
.password("pass")
.addresses(
singletonList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.key("address-key-1")
.id("address-id-new-1")
.state("California")
.additionalStreetInfo("Suite 100")
.build()))
.build();

final List<CustomerUpdateAction> updateActions =
CustomerUpdateActionUtils.buildChangeAddressUpdateActions(oldCustomer, newCustomer);

assertThat(updateActions).isEmpty();
}

@Test
void
buildChangeAddressUpdateActions_WithAddressesWithoutKeys_ShouldNotReturnChangeAddressActions() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,4 +212,69 @@ void mapToCustomerDrafts_WithAddresses_ShouldReturnResourceIdentifiersWithCorrec
assertThat(customerDraft.getBillingAddresses()).isEqualTo(asList(0, 2));
assertThat(customerDraft.getShippingAddresses()).isEmpty();
}

@Test
void mapToCustomerDrafts_WithStateAndAdditionalStreetInfo_ShouldMapFieldsCorrectly() {
final Customer mockCustomer = mock(Customer.class);
when(mockCustomer.getEmail()).thenReturn("email");
when(mockCustomer.getPassword()).thenReturn("password");
when(mockCustomer.getAddresses())
.thenReturn(
asList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.id("address-id1")
.key("address-key1")
.state("California")
.additionalStreetInfo("Suite 100")
.build(),
AddressBuilder.of()
.country(CountryCode.DE.toString())
.id("address-id2")
.key("address-key2")
.state("Bavaria")
.additionalStreetInfo("Building A")
.build()));

final List<CustomerDraft> referenceReplacedDrafts =
CustomerReferenceResolutionUtils.mapToCustomerDrafts(
singletonList(mockCustomer), referenceIdToKeyCache);

final CustomerDraft customerDraft = referenceReplacedDrafts.get(0);

assertThat(customerDraft.getAddresses()).hasSize(2);
assertThat(customerDraft.getAddresses().get(0).getState()).isEqualTo("California");
assertThat(customerDraft.getAddresses().get(0).getAdditionalStreetInfo())
.isEqualTo("Suite 100");
assertThat(customerDraft.getAddresses().get(1).getState()).isEqualTo("Bavaria");
assertThat(customerDraft.getAddresses().get(1).getAdditionalStreetInfo())
.isEqualTo("Building A");
}

@Test
void mapToCustomerDrafts_WithNullStateAndAdditionalStreetInfo_ShouldMapFieldsAsNull() {
final Customer mockCustomer = mock(Customer.class);
when(mockCustomer.getEmail()).thenReturn("email");
when(mockCustomer.getPassword()).thenReturn("password");
when(mockCustomer.getAddresses())
.thenReturn(
singletonList(
AddressBuilder.of()
.country(CountryCode.US.toString())
.id("address-id1")
.key("address-key1")
.state(null)
.additionalStreetInfo(null)
.build()));

final List<CustomerDraft> referenceReplacedDrafts =
CustomerReferenceResolutionUtils.mapToCustomerDrafts(
singletonList(mockCustomer), referenceIdToKeyCache);

final CustomerDraft customerDraft = referenceReplacedDrafts.get(0);

assertThat(customerDraft.getAddresses()).hasSize(1);
assertThat(customerDraft.getAddresses().get(0).getState()).isNull();
assertThat(customerDraft.getAddresses().get(0).getAdditionalStreetInfo()).isNull();
}
}