package com.constellio.app.entities.modules;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.data.dao.services.factories.DataLayerFactory;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.MetadataSchemasManagerException.OptimisticLocking;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.sdk.tests.ConstellioTest;
public class MetadataSchemasMigrationHelperTest extends ConstellioTest {
@Mock ModelLayerFactory modelLayerFactory;
@Mock MetadataSchemasManager metadataSchemasManager;
@Mock MetadataSchemaTypesBuilder metadataSchemaTypesBuilder;
@Mock MetadataSchemaTypes newMetadataSchemaTypes;
@Mock AppLayerFactory appLayerFactory;
@Mock DataLayerFactory dataLayerFactory;
@Mock MigrationResourcesProvider migrationResourcesProvider;
MetadataSchemasAlterationHelper script;
@Before
public void setUp()
throws Exception {
when(appLayerFactory.getModelLayerFactory()).thenReturn(modelLayerFactory);
when(modelLayerFactory.getMetadataSchemasManager()).thenReturn(metadataSchemasManager);
when(metadataSchemasManager.modify(zeCollection)).thenReturn(metadataSchemaTypesBuilder);
script = spy(new MetadataSchemasAlterationHelper(zeCollection, migrationResourcesProvider, appLayerFactory) {
@Override
protected void migrate(MetadataSchemaTypesBuilder typesBuilder) {
}
});
}
@Test
public void givenOptimisticLockingWhenSavingSchemaThenRetry()
throws Exception {
doThrow(OptimisticLocking.class)
.doThrow(OptimisticLocking.class)
.doReturn(newMetadataSchemaTypes)
.when(metadataSchemasManager).saveUpdateSchemaTypes(any(MetadataSchemaTypesBuilder.class));
script.migrate();
verify(script, times(3)).migrate(any(MetadataSchemaTypesBuilder.class));
}
}