Search in sources :

Example 16 with ProductTypeService

use of com.commercetools.sync.services.ProductTypeService in project commercetools-sync-java by commercetools.

the class ProductTypeServiceImplTest method fetchProductType_WithBadGateWayException_ShouldCompleteExceptionally.

@Test
void fetchProductType_WithBadGateWayException_ShouldCompleteExceptionally() {
    // preparation
    final SphereClient sphereClient = mock(SphereClient.class);
    when(sphereClient.execute(any(ProductTypeQuery.class))).thenReturn(CompletableFutureUtils.exceptionallyCompletedFuture(new BadGatewayException()));
    final ProductTypeSyncOptions syncOptions = ProductTypeSyncOptionsBuilder.of(sphereClient).build();
    final ProductTypeService productTypeService = new ProductTypeServiceImpl(syncOptions);
    // test
    final CompletionStage<Optional<ProductType>> result = productTypeService.fetchProductType("foo");
    // assertions
    assertThat(result).failsWithin(1, TimeUnit.SECONDS).withThrowableOfType(ExecutionException.class).withCauseExactlyInstanceOf(BadGatewayException.class);
}
Also used : ProductTypeService(com.commercetools.sync.services.ProductTypeService) ProductTypeQuery(io.sphere.sdk.producttypes.queries.ProductTypeQuery) ProductTypeSyncOptions(com.commercetools.sync.producttypes.ProductTypeSyncOptions) Optional(java.util.Optional) SphereClient(io.sphere.sdk.client.SphereClient) BadGatewayException(io.sphere.sdk.client.BadGatewayException) ExecutionException(java.util.concurrent.ExecutionException) Test(org.junit.jupiter.api.Test)

Example 17 with ProductTypeService

use of com.commercetools.sync.services.ProductTypeService in project commercetools-sync-java by commercetools.

the class ProductSyncMockUtils method getMockProductTypeService.

/**
 * Creates a mock {@link ProductTypeService} that returns a completed {@link CompletableFuture}
 * containing an {@link Optional} containing the id of the supplied value whenever the following
 * method is called on the service:
 *
 * <ul>
 *   <li>{@link ProductTypeService#fetchCachedProductTypeId(String)}
 * </ul>
 *
 * @return the created mock of the {@link ProductTypeService}.
 */
public static ProductTypeService getMockProductTypeService(@Nonnull final String id) {
    final ProductTypeService productTypeService = mock(ProductTypeService.class);
    when(productTypeService.fetchCachedProductTypeId(anyString())).thenReturn(CompletableFuture.completedFuture(Optional.of(id)));
    return productTypeService;
}
Also used : ProductTypeService(com.commercetools.sync.services.ProductTypeService)

Example 18 with ProductTypeService

use of com.commercetools.sync.services.ProductTypeService in project commercetools-sync-java by commercetools.

the class ProductTypeSyncTest method sync_WithErrorCachingKeysButNoKeysToCache_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter.

@Test
void sync_WithErrorCachingKeysButNoKeysToCache_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter() {
    // preparation
    final ProductTypeDraft newProductTypeDraft = ProductTypeDraft.ofAttributeDefinitionDrafts("foo", "name", "desc", emptyList());
    final List<String> errorMessages = new ArrayList<>();
    final List<Throwable> exceptions = new ArrayList<>();
    final SphereClient sphereClient = mock(SphereClient.class);
    final ProductTypeSyncOptions syncOptions = ProductTypeSyncOptionsBuilder.of(sphereClient).errorCallback((exception, oldResource, newResource, actions) -> {
        errorMessages.add(exception.getMessage());
        exceptions.add(exception);
    }).build();
    final ProductTypeService mockProductTypeService = new ProductTypeServiceImpl(syncOptions);
    when(sphereClient.execute(any(ProductTypeQuery.class))).thenReturn(supplyAsync(() -> {
        throw new SphereException();
    }));
    final ProductTypeSync productTypeSync = new ProductTypeSync(syncOptions, mockProductTypeService);
    // test
    final ProductTypeSyncStatistics productTypeSyncStatistics = productTypeSync.sync(singletonList(newProductTypeDraft)).toCompletableFuture().join();
    // assertions
    assertThat(errorMessages).hasSize(1).singleElement(as(STRING)).isEqualTo("Failed to fetch existing product types with keys: '[foo]'.");
    assertThat(exceptions).hasSize(1).singleElement(as(THROWABLE)).isExactlyInstanceOf(SyncException.class).hasCauseExactlyInstanceOf(CompletionException.class).hasRootCauseExactlyInstanceOf(SphereException.class);
    assertThat(productTypeSyncStatistics).hasValues(1, 0, 0, 1, 0);
}
Also used : Reference(io.sphere.sdk.models.Reference) SyncException(com.commercetools.sync.commons.exceptions.SyncException) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UpdateAction(io.sphere.sdk.commands.UpdateAction) ProductTypeCreateCommand(io.sphere.sdk.producttypes.commands.ProductTypeCreateCommand) Collections.singletonList(java.util.Collections.singletonList) Collections.singleton(java.util.Collections.singleton) ProductTypeService(com.commercetools.sync.services.ProductTypeService) THROWABLE(org.assertj.core.api.InstanceOfAssertFactories.THROWABLE) SphereClient(io.sphere.sdk.client.SphereClient) ProductTypeQuery(io.sphere.sdk.producttypes.queries.ProductTypeQuery) ProductTypeUpdateCommand(io.sphere.sdk.producttypes.commands.ProductTypeUpdateCommand) ProductTypeDraftBuilder(io.sphere.sdk.producttypes.ProductTypeDraftBuilder) ResourceKeyIdGraphQlRequest(com.commercetools.sync.commons.helpers.ResourceKeyIdGraphQlRequest) Collections.emptyList(java.util.Collections.emptyList) CompletionException(java.util.concurrent.CompletionException) UUID(java.util.UUID) Test(org.junit.jupiter.api.Test) List(java.util.List) LocalizedString.ofEnglish(io.sphere.sdk.models.LocalizedString.ofEnglish) ProductTypeServiceImpl(com.commercetools.sync.services.impl.ProductTypeServiceImpl) Sets.newLinkedHashSet(org.assertj.core.util.Sets.newLinkedHashSet) Optional(java.util.Optional) AttributeDefinitionDraft(io.sphere.sdk.products.attributes.AttributeDefinitionDraft) Mockito.mock(org.mockito.Mockito.mock) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArgumentMatchers.anySet(org.mockito.ArgumentMatchers.anySet) ProductType(io.sphere.sdk.producttypes.ProductType) AssertionsForStatistics.assertThat(com.commercetools.sync.commons.asserts.statistics.AssertionsForStatistics.assertThat) CompletableFuture(java.util.concurrent.CompletableFuture) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Assertions.as(org.assertj.core.api.Assertions.as) CompletableFuture.supplyAsync(java.util.concurrent.CompletableFuture.supplyAsync) SphereException(io.sphere.sdk.models.SphereException) ChangeDescription(io.sphere.sdk.producttypes.commands.updateactions.ChangeDescription) Collections.emptyMap(java.util.Collections.emptyMap) AttributeDefinitionDraftBuilder(io.sphere.sdk.products.attributes.AttributeDefinitionDraftBuilder) Collections.emptySet(java.util.Collections.emptySet) ProductType.referenceOfId(io.sphere.sdk.producttypes.ProductType.referenceOfId) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) Lists.list(org.assertj.core.util.Lists.list) Mockito.when(org.mockito.Mockito.when) ChangeName(io.sphere.sdk.producttypes.commands.updateactions.ChangeName) Mockito.verify(org.mockito.Mockito.verify) Mockito.never(org.mockito.Mockito.never) NestedAttributeType(io.sphere.sdk.products.attributes.NestedAttributeType) PagedQueryResult(io.sphere.sdk.queries.PagedQueryResult) STRING(org.assertj.core.api.InstanceOfAssertFactories.STRING) Collections(java.util.Collections) ArrayList(java.util.ArrayList) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) ProductTypeServiceImpl(com.commercetools.sync.services.impl.ProductTypeServiceImpl) SphereException(io.sphere.sdk.models.SphereException) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) ProductTypeService(com.commercetools.sync.services.ProductTypeService) ProductTypeQuery(io.sphere.sdk.producttypes.queries.ProductTypeQuery) SphereClient(io.sphere.sdk.client.SphereClient) CompletionException(java.util.concurrent.CompletionException) Test(org.junit.jupiter.api.Test)

Example 19 with ProductTypeService

use of com.commercetools.sync.services.ProductTypeService in project commercetools-sync-java by commercetools.

the class ProductTypeSyncTest method sync_WithInvalidAttributeDefinitions_ShouldThrowError.

@Test
@SuppressWarnings("unchecked")
void sync_WithInvalidAttributeDefinitions_ShouldThrowError() {
    // preparation
    String nestedAttributeTypeId = "attributeId";
    NestedAttributeType nestedAttributeType = spy(NestedAttributeType.of(referenceOfId(nestedAttributeTypeId)));
    Reference reference = spy(Reference.class);
    when(reference.getId()).thenReturn(nestedAttributeTypeId).thenReturn(null);
    when(nestedAttributeType.getTypeReference()).thenReturn(reference);
    final AttributeDefinitionDraft nestedTypeAttrDefDraft = AttributeDefinitionDraftBuilder.of(nestedAttributeType, "validNested", ofEnglish("koko"), true).build();
    // preparation
    final ProductTypeDraft newProductTypeDraft = ProductTypeDraft.ofAttributeDefinitionDrafts("foo", "name", "desc", singletonList(nestedTypeAttrDefDraft));
    final List<String> errorMessages = new ArrayList<>();
    final List<Throwable> exceptions = new ArrayList<>();
    final ProductTypeSyncOptions syncOptions = ProductTypeSyncOptionsBuilder.of(mock(SphereClient.class)).errorCallback((exception, oldResource, newResource, actions) -> {
        errorMessages.add(exception.getMessage());
        exceptions.add(exception);
    }).build();
    final ProductTypeService mockProductTypeService = mock(ProductTypeServiceImpl.class);
    final ProductType existingProductType = mock(ProductType.class);
    when(existingProductType.getKey()).thenReturn(newProductTypeDraft.getKey());
    when(mockProductTypeService.fetchMatchingProductTypesByKeys(singleton(newProductTypeDraft.getKey()))).thenReturn(CompletableFuture.completedFuture(singleton(existingProductType)));
    when(mockProductTypeService.fetchMatchingProductTypesByKeys(emptySet())).thenReturn(CompletableFuture.completedFuture(Collections.emptySet()));
    when(mockProductTypeService.updateProductType(any(), any())).thenReturn(CompletableFuture.completedFuture(existingProductType));
    when(mockProductTypeService.cacheKeysToIds(anySet())).thenReturn(CompletableFuture.completedFuture(emptyMap()));
    final ProductTypeSync productTypeSync = new ProductTypeSync(syncOptions, mockProductTypeService);
    // test
    final ProductTypeSyncStatistics productTypeSyncStatistics = productTypeSync.sync(singletonList(newProductTypeDraft)).toCompletableFuture().join();
    // assertions
    assertThat(errorMessages.get(0)).contains("This exception is unexpectedly thrown since the draft batch has been" + "already validated for blank keys");
    assertThat(errorMessages.get(1)).contains("Failed to process the productTypeDraft with key:'foo'");
    assertThat(exceptions.size()).isEqualTo(2);
    assertThat(productTypeSyncStatistics).hasValues(1, 0, 0, 2, 0);
}
Also used : Reference(io.sphere.sdk.models.Reference) SyncException(com.commercetools.sync.commons.exceptions.SyncException) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UpdateAction(io.sphere.sdk.commands.UpdateAction) ProductTypeCreateCommand(io.sphere.sdk.producttypes.commands.ProductTypeCreateCommand) Collections.singletonList(java.util.Collections.singletonList) Collections.singleton(java.util.Collections.singleton) ProductTypeService(com.commercetools.sync.services.ProductTypeService) THROWABLE(org.assertj.core.api.InstanceOfAssertFactories.THROWABLE) SphereClient(io.sphere.sdk.client.SphereClient) ProductTypeQuery(io.sphere.sdk.producttypes.queries.ProductTypeQuery) ProductTypeUpdateCommand(io.sphere.sdk.producttypes.commands.ProductTypeUpdateCommand) ProductTypeDraftBuilder(io.sphere.sdk.producttypes.ProductTypeDraftBuilder) ResourceKeyIdGraphQlRequest(com.commercetools.sync.commons.helpers.ResourceKeyIdGraphQlRequest) Collections.emptyList(java.util.Collections.emptyList) CompletionException(java.util.concurrent.CompletionException) UUID(java.util.UUID) Test(org.junit.jupiter.api.Test) List(java.util.List) LocalizedString.ofEnglish(io.sphere.sdk.models.LocalizedString.ofEnglish) ProductTypeServiceImpl(com.commercetools.sync.services.impl.ProductTypeServiceImpl) Sets.newLinkedHashSet(org.assertj.core.util.Sets.newLinkedHashSet) Optional(java.util.Optional) AttributeDefinitionDraft(io.sphere.sdk.products.attributes.AttributeDefinitionDraft) Mockito.mock(org.mockito.Mockito.mock) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArgumentMatchers.anySet(org.mockito.ArgumentMatchers.anySet) ProductType(io.sphere.sdk.producttypes.ProductType) AssertionsForStatistics.assertThat(com.commercetools.sync.commons.asserts.statistics.AssertionsForStatistics.assertThat) CompletableFuture(java.util.concurrent.CompletableFuture) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Assertions.as(org.assertj.core.api.Assertions.as) CompletableFuture.supplyAsync(java.util.concurrent.CompletableFuture.supplyAsync) SphereException(io.sphere.sdk.models.SphereException) ChangeDescription(io.sphere.sdk.producttypes.commands.updateactions.ChangeDescription) Collections.emptyMap(java.util.Collections.emptyMap) AttributeDefinitionDraftBuilder(io.sphere.sdk.products.attributes.AttributeDefinitionDraftBuilder) Collections.emptySet(java.util.Collections.emptySet) ProductType.referenceOfId(io.sphere.sdk.producttypes.ProductType.referenceOfId) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) Lists.list(org.assertj.core.util.Lists.list) Mockito.when(org.mockito.Mockito.when) ChangeName(io.sphere.sdk.producttypes.commands.updateactions.ChangeName) Mockito.verify(org.mockito.Mockito.verify) Mockito.never(org.mockito.Mockito.never) NestedAttributeType(io.sphere.sdk.products.attributes.NestedAttributeType) PagedQueryResult(io.sphere.sdk.queries.PagedQueryResult) STRING(org.assertj.core.api.InstanceOfAssertFactories.STRING) Collections(java.util.Collections) Reference(io.sphere.sdk.models.Reference) ArrayList(java.util.ArrayList) ProductType(io.sphere.sdk.producttypes.ProductType) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) AttributeDefinitionDraft(io.sphere.sdk.products.attributes.AttributeDefinitionDraft) NestedAttributeType(io.sphere.sdk.products.attributes.NestedAttributeType) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) ProductTypeService(com.commercetools.sync.services.ProductTypeService) SphereClient(io.sphere.sdk.client.SphereClient) Test(org.junit.jupiter.api.Test)

Example 20 with ProductTypeService

use of com.commercetools.sync.services.ProductTypeService in project commercetools-sync-java by commercetools.

the class ProductTypeSyncTest method sync_WithErrorFetchingExistingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter.

@Test
void sync_WithErrorFetchingExistingKeys_ShouldExecuteCallbackOnErrorAndIncreaseFailedCounter() {
    // preparation
    final ProductTypeDraft newProductTypeDraft = ProductTypeDraft.ofAttributeDefinitionDrafts("foo", "name", "desc", emptyList());
    final List<String> errorMessages = new ArrayList<>();
    final List<Throwable> exceptions = new ArrayList<>();
    final ProductTypeSyncOptions syncOptions = ProductTypeSyncOptionsBuilder.of(mock(SphereClient.class)).errorCallback((exception, oldResource, newResource, updateActions) -> {
        errorMessages.add(exception.getMessage());
        exceptions.add(exception);
    }).build();
    final ProductTypeService mockProductTypeService = mock(ProductTypeService.class);
    when(mockProductTypeService.fetchMatchingProductTypesByKeys(singleton(newProductTypeDraft.getKey()))).thenReturn(supplyAsync(() -> {
        throw new SphereException();
    }));
    when(mockProductTypeService.cacheKeysToIds(anySet())).thenReturn(CompletableFuture.completedFuture(emptyMap()));
    final ProductTypeSync productTypeSync = new ProductTypeSync(syncOptions, mockProductTypeService);
    // test
    final ProductTypeSyncStatistics productTypeSyncStatistics = productTypeSync.sync(singletonList(newProductTypeDraft)).toCompletableFuture().join();
    // assertions
    assertThat(errorMessages).hasSize(1).singleElement(as(STRING)).isEqualTo("Failed to fetch existing product types with keys: '[foo]'.");
    assertThat(exceptions).hasSize(1).singleElement(as(THROWABLE)).isExactlyInstanceOf(SyncException.class).hasCauseExactlyInstanceOf(CompletionException.class).hasRootCauseExactlyInstanceOf(SphereException.class);
    assertThat(productTypeSyncStatistics).hasValues(1, 0, 0, 1, 0);
}
Also used : Reference(io.sphere.sdk.models.Reference) SyncException(com.commercetools.sync.commons.exceptions.SyncException) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UpdateAction(io.sphere.sdk.commands.UpdateAction) ProductTypeCreateCommand(io.sphere.sdk.producttypes.commands.ProductTypeCreateCommand) Collections.singletonList(java.util.Collections.singletonList) Collections.singleton(java.util.Collections.singleton) ProductTypeService(com.commercetools.sync.services.ProductTypeService) THROWABLE(org.assertj.core.api.InstanceOfAssertFactories.THROWABLE) SphereClient(io.sphere.sdk.client.SphereClient) ProductTypeQuery(io.sphere.sdk.producttypes.queries.ProductTypeQuery) ProductTypeUpdateCommand(io.sphere.sdk.producttypes.commands.ProductTypeUpdateCommand) ProductTypeDraftBuilder(io.sphere.sdk.producttypes.ProductTypeDraftBuilder) ResourceKeyIdGraphQlRequest(com.commercetools.sync.commons.helpers.ResourceKeyIdGraphQlRequest) Collections.emptyList(java.util.Collections.emptyList) CompletionException(java.util.concurrent.CompletionException) UUID(java.util.UUID) Test(org.junit.jupiter.api.Test) List(java.util.List) LocalizedString.ofEnglish(io.sphere.sdk.models.LocalizedString.ofEnglish) ProductTypeServiceImpl(com.commercetools.sync.services.impl.ProductTypeServiceImpl) Sets.newLinkedHashSet(org.assertj.core.util.Sets.newLinkedHashSet) Optional(java.util.Optional) AttributeDefinitionDraft(io.sphere.sdk.products.attributes.AttributeDefinitionDraft) Mockito.mock(org.mockito.Mockito.mock) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArgumentMatchers.anySet(org.mockito.ArgumentMatchers.anySet) ProductType(io.sphere.sdk.producttypes.ProductType) AssertionsForStatistics.assertThat(com.commercetools.sync.commons.asserts.statistics.AssertionsForStatistics.assertThat) CompletableFuture(java.util.concurrent.CompletableFuture) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Assertions.as(org.assertj.core.api.Assertions.as) CompletableFuture.supplyAsync(java.util.concurrent.CompletableFuture.supplyAsync) SphereException(io.sphere.sdk.models.SphereException) ChangeDescription(io.sphere.sdk.producttypes.commands.updateactions.ChangeDescription) Collections.emptyMap(java.util.Collections.emptyMap) AttributeDefinitionDraftBuilder(io.sphere.sdk.products.attributes.AttributeDefinitionDraftBuilder) Collections.emptySet(java.util.Collections.emptySet) ProductType.referenceOfId(io.sphere.sdk.producttypes.ProductType.referenceOfId) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) Lists.list(org.assertj.core.util.Lists.list) Mockito.when(org.mockito.Mockito.when) ChangeName(io.sphere.sdk.producttypes.commands.updateactions.ChangeName) Mockito.verify(org.mockito.Mockito.verify) Mockito.never(org.mockito.Mockito.never) NestedAttributeType(io.sphere.sdk.products.attributes.NestedAttributeType) PagedQueryResult(io.sphere.sdk.queries.PagedQueryResult) STRING(org.assertj.core.api.InstanceOfAssertFactories.STRING) Collections(java.util.Collections) ArrayList(java.util.ArrayList) ProductTypeSyncStatistics(com.commercetools.sync.producttypes.helpers.ProductTypeSyncStatistics) SphereException(io.sphere.sdk.models.SphereException) ProductTypeDraft(io.sphere.sdk.producttypes.ProductTypeDraft) ProductTypeService(com.commercetools.sync.services.ProductTypeService) SphereClient(io.sphere.sdk.client.SphereClient) CompletionException(java.util.concurrent.CompletionException) Test(org.junit.jupiter.api.Test)

Aggregations

ProductTypeService (com.commercetools.sync.services.ProductTypeService)32 Test (org.junit.jupiter.api.Test)31 ProductTypeDraft (io.sphere.sdk.producttypes.ProductTypeDraft)22 ProductTypeSyncOptions (com.commercetools.sync.producttypes.ProductTypeSyncOptions)20 AttributeDefinitionDraft (io.sphere.sdk.products.attributes.AttributeDefinitionDraft)20 SphereClient (io.sphere.sdk.client.SphereClient)18 NestedAttributeType (io.sphere.sdk.products.attributes.NestedAttributeType)18 ProductTypeQuery (io.sphere.sdk.producttypes.queries.ProductTypeQuery)16 Optional (java.util.Optional)16 ProductTypeServiceImpl (com.commercetools.sync.services.impl.ProductTypeServiceImpl)15 ProductType (io.sphere.sdk.producttypes.ProductType)15 ChangeName (io.sphere.sdk.producttypes.commands.updateactions.ChangeName)13 ArrayList (java.util.ArrayList)13 Collections (java.util.Collections)13 Collections.singleton (java.util.Collections.singleton)13 Collections.singletonList (java.util.Collections.singletonList)13 List (java.util.List)13 ProductTypeCreateCommand (io.sphere.sdk.producttypes.commands.ProductTypeCreateCommand)10 ProductTypeUpdateCommand (io.sphere.sdk.producttypes.commands.ProductTypeUpdateCommand)10 Assertions.as (org.assertj.core.api.Assertions.as)7