use of com.commercetools.sync.services.impl.StateServiceImpl in project commercetools-sync-java by commercetools.
the class StateServiceImplIT method createState_WithDuplicateKey_ShouldHaveEmptyOptionalAsAResult.
@Test
void createState_WithDuplicateKey_ShouldHaveEmptyOptionalAsAResult() {
// preparation
final StateDraft newStateDraft = StateDraftBuilder.of(OLD_STATE_KEY, STATE_TYPE).name(STATE_NAME_1).description(STATE_DESCRIPTION_1).build();
final StateSyncOptions options = StateSyncOptionsBuilder.of(CTP_TARGET_CLIENT).errorCallback((exception, oldResource, newResource, updateActions) -> {
errorCallBackMessages.add(exception.getMessage());
errorCallBackExceptions.add(exception.getCause());
}).build();
final StateService stateService = new StateServiceImpl(options);
// test
final Optional<State> result = stateService.createState(newStateDraft).toCompletableFuture().join();
// assertion
assertThat(result).isEmpty();
assertThat(errorCallBackMessages).hasSize(1).singleElement(as(STRING)).contains("A duplicate value");
assertThat(errorCallBackExceptions).hasSize(1).singleElement().matches(exception -> {
assertThat(exception).isExactlyInstanceOf(ErrorResponseException.class);
final ErrorResponseException errorResponseException = (ErrorResponseException) exception;
final List<DuplicateFieldError> fieldErrors = errorResponseException.getErrors().stream().map(sphereError -> {
assertThat(sphereError.getCode()).isEqualTo(DuplicateFieldError.CODE);
return sphereError.as(DuplicateFieldError.class);
}).collect(toList());
return fieldErrors.size() == 1;
});
}
use of com.commercetools.sync.services.impl.StateServiceImpl in project commercetools-sync-java by commercetools.
the class StateSyncTest method sync_WithErrorCachingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter.
@Test
void sync_WithErrorCachingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter() {
// preparation
final StateDraft stateDraft = StateDraftBuilder.of("state-1", StateType.LINE_ITEM_STATE).build();
final List<String> errorMessages = new ArrayList<>();
final List<Throwable> exceptions = new ArrayList<>();
final StateSyncOptions syncOptions = StateSyncOptionsBuilder.of(mock(SphereClient.class)).errorCallback((exception, oldResource, newResource, updateActions) -> {
errorMessages.add(exception.getMessage());
exceptions.add(exception.getCause());
}).build();
final StateService stateService = spy(new StateServiceImpl(syncOptions));
when(stateService.cacheKeysToIds(anySet())).thenReturn(supplyAsync(() -> {
throw new SphereException();
}));
final StateSync stateSync = new StateSync(syncOptions, stateService);
// test
final StateSyncStatistics stateSyncStatistics = stateSync.sync(singletonList(stateDraft)).toCompletableFuture().join();
// assertions
assertThat(errorMessages).hasSize(1).singleElement(as(STRING)).contains("Failed to build a cache of keys to ids.");
assertThat(exceptions).hasSize(1).singleElement(as(THROWABLE)).isExactlyInstanceOf(CompletionException.class).hasCauseExactlyInstanceOf(SphereException.class);
assertThat(stateSyncStatistics).hasValues(1, 0, 0, 1);
}
use of com.commercetools.sync.services.impl.StateServiceImpl in project commercetools-sync-java by commercetools.
the class StateSyncTest method sync_WithErrorFetchingExistingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter.
@Test
void sync_WithErrorFetchingExistingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter() {
// preparation
final StateDraft stateDraft = StateDraftBuilder.of("state-1", StateType.LINE_ITEM_STATE).build();
final List<String> errorMessages = new ArrayList<>();
final List<Throwable> exceptions = new ArrayList<>();
final SphereClient mockClient = mock(SphereClient.class);
when(mockClient.execute(any(StateQuery.class))).thenReturn(supplyAsync(() -> {
throw new SphereException();
}));
final StateSyncOptions syncOptions = StateSyncOptionsBuilder.of(mockClient).errorCallback((exception, oldResource, newResource, updateActions) -> {
errorMessages.add(exception.getMessage());
exceptions.add(exception.getCause());
}).build();
final StateService stateService = spy(new StateServiceImpl(syncOptions));
final Map<String, String> keyToIds = new HashMap<>();
keyToIds.put(stateDraft.getKey(), UUID.randomUUID().toString());
when(stateService.cacheKeysToIds(anySet())).thenReturn(completedFuture(keyToIds));
final StateSync stateSync = new StateSync(syncOptions, stateService);
// test
final StateSyncStatistics stateSyncStatistics = stateSync.sync(singletonList(stateDraft)).toCompletableFuture().join();
// assertions
assertThat(errorMessages).hasSize(1).singleElement(as(STRING)).contains("Failed to fetch existing states");
assertThat(exceptions).hasSize(1).singleElement(as(THROWABLE)).isExactlyInstanceOf(CompletionException.class).hasCauseExactlyInstanceOf(SphereException.class);
assertThat(stateSyncStatistics).hasValues(1, 0, 0, 1);
}
use of com.commercetools.sync.services.impl.StateServiceImpl in project commercetools-sync-java by commercetools.
the class StateServiceImplIT method setup.
/**
* Deletes states from the target CTP projects, then it populates the project with test data.
*/
@BeforeEach
void setup() {
errorCallBackMessages = new ArrayList<>();
errorCallBackExceptions = new ArrayList<>();
deleteStates(CTP_TARGET_CLIENT, Optional.of(STATE_TYPE));
deleteStates(CTP_TARGET_CLIENT, Optional.of(TRANSITION_STATE_TYPE));
warnings = new ArrayList<>();
oldState = createState(CTP_TARGET_CLIENT, STATE_TYPE);
final StateSyncOptions StateSyncOptions = StateSyncOptionsBuilder.of(CTP_TARGET_CLIENT).warningCallback((exception, oldResource, newResource) -> warnings.add(exception.getMessage())).build();
stateService = new StateServiceImpl(StateSyncOptions);
}
use of com.commercetools.sync.services.impl.StateServiceImpl in project commercetools-sync-java by commercetools.
the class StateServiceImplIT method createState_WithInvalidState_ShouldHaveEmptyOptionalAsAResult.
@Test
void createState_WithInvalidState_ShouldHaveEmptyOptionalAsAResult() {
// preparation
final StateDraft newStateDraft = StateDraftBuilder.of("", STATE_TYPE).name(STATE_NAME_1).description(STATE_DESCRIPTION_1).build();
final StateSyncOptions options = StateSyncOptionsBuilder.of(CTP_TARGET_CLIENT).errorCallback((exception, oldResource, newResource, updateActions) -> {
errorCallBackMessages.add(exception.getMessage());
errorCallBackExceptions.add(exception.getCause());
}).build();
final StateService stateService = new StateServiceImpl(options);
// test
final Optional<State> result = stateService.createState(newStateDraft).toCompletableFuture().join();
// assertion
assertThat(result).isEmpty();
assertThat(errorCallBackMessages).containsExactly("Failed to create draft with key: ''. Reason: Draft key is blank!");
}
Aggregations