package com.constellio.model.services.schemas.builders;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.data.dao.services.DataStoreTypesFactory;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
import com.constellio.model.utils.DefaultClassProvider;
import com.constellio.sdk.tests.ConstellioTest;
public class MetadataSchemaTypesBuilderOldTest extends ConstellioTest {
static final String UNDERSCORE = "_";
static final String DEFAULT = "default";
static final String INEXISTENT_CODE = "inexistentCode";
static final String FOLDER = "folder";
static int VERSION = 1;
@Mock DataStoreTypesFactory typesFactory;
MetadataSchemaTypesBuilder typesBuilder;
MetadataSchemaTypesBuilder typesBuilder2;
MetadataSchemaTypeBuilder folderTypeBuilder;
MetadataSchemaTypeBuilder newTypeBuilder;
MetadataSchemaTypes schemaTypes;
MetadataSchemaBuilder employeeFolderSchemaBuilder;
MetadataBuilder employeeName;
@Mock TaxonomiesManager taxonomiesManager;
@Mock ModelLayerFactory modelLayerFactory;
@Before
public void setup()
throws Exception {
when(modelLayerFactory.getTaxonomiesManager()).thenReturn(taxonomiesManager);
typesBuilder = MetadataSchemaTypesBuilder.createWithVersion(zeCollection, VERSION, new DefaultClassProvider(),
Arrays.asList(Language.French));
folderTypeBuilder = typesBuilder.createNewSchemaType(FOLDER);
schemaTypes = typesBuilder.build(typesFactory, modelLayerFactory);
typesBuilder2 = MetadataSchemaTypesBuilder.modify(schemaTypes, new DefaultClassProvider());
folderTypeBuilder.getDefaultSchema().create("zetitle");
employeeFolderSchemaBuilder = folderTypeBuilder.createCustomSchema("employeeFolder");
employeeName = employeeFolderSchemaBuilder.create("employeeName");
}
@Test
public void whenCreateWithVersionThenItsIsCreatedWithVersion()
throws Exception {
assertThat(typesBuilder.getVersion()).isEqualTo(VERSION);
}
@Test
public void whenCreateNewSchemaTypeThenItIsCanBeRetrieved()
throws Exception {
assertThat(typesBuilder.getSchemaType(FOLDER)).isEqualTo(folderTypeBuilder);
}
@Test(expected = MetadataSchemaTypesBuilderRuntimeException.SchemaTypeExistent.class)
public void whenCreateNewSchemaTypeWithAExistentSchemaThenThrowException()
throws Exception {
folderTypeBuilder = typesBuilder.createNewSchemaType(FOLDER);
}
@Test(expected = MetadataSchemaTypesBuilderRuntimeException.NoSuchSchemaType.class)
public void whenGetAInexistentSchemaTypeThenThrowException()
throws Exception {
folderTypeBuilder = typesBuilder.getSchemaType(INEXISTENT_CODE);
}
@Test
public void whenGetOrCreateSchemaTypeThenItIsCanBeRetrieved()
throws Exception {
newTypeBuilder = typesBuilder.getOrCreateNewSchemaType(INEXISTENT_CODE);
assertThat(typesBuilder.getSchemaType(FOLDER)).isEqualTo(folderTypeBuilder);
assertThat(typesBuilder.getSchemaType(INEXISTENT_CODE)).isEqualTo(newTypeBuilder);
}
@Test
public void whenModifyThenNewSchemaTypesBuilderIsReturned()
throws Exception {
assertThat(typesBuilder2.getVersion()).isEqualTo(schemaTypes.getVersion());
}
@Test
public void whenBuildModifySchemaTypesThenNewSchemaTypesIsBuildWithNewVersion()
throws Exception {
assertThat(typesBuilder2.build(typesFactory, modelLayerFactory).getVersion()).isEqualTo(schemaTypes.getVersion() + 1);
}
@Test
public void whenGetSchemaThenItIsReturned() {
assertThat(typesBuilder.getSchema(employeeFolderSchemaBuilder.getCode())).isNotNull();
}
}