package com.constellio.model.services.schemas;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.sdk.tests.ConstellioTest;
public class SchemaComparatorsTest extends ConstellioTest {
@Mock MetadataSchemaTypes types;
@Mock Record zeFirstSchemaTypeDefaultRecord;
@Mock Record zeFirstSchemaTypeCustomRecord;
@Mock Record anotherSchemaTypeCustomRecord;
@Mock Record anotherSchemaTypeDefaultRecord;
@Before
public void setUp()
throws Exception {
when(types.getSchemaTypesSortedByDependency()).thenReturn(Arrays.asList("zeFirstSchemaType", "anotherSchemaType"));
}
@Test
public void whenSortingRecordsBySchemaTypes()
throws Exception {
when(zeFirstSchemaTypeDefaultRecord.getSchemaCode()).thenReturn("zeFirstSchemaType_default_default");
when(zeFirstSchemaTypeCustomRecord.getSchemaCode()).thenReturn("zeFirstSchemaType_default_custom");
when(anotherSchemaTypeCustomRecord.getSchemaCode()).thenReturn("anotherSchemaType_custom");
when(anotherSchemaTypeDefaultRecord.getSchemaCode()).thenReturn("anotherSchemaType_default");
List<Record> records = Arrays.asList(anotherSchemaTypeCustomRecord, zeFirstSchemaTypeDefaultRecord,
zeFirstSchemaTypeCustomRecord,
anotherSchemaTypeDefaultRecord);
Collections.sort(records, SchemaComparators.sortRecordsBySchemasDependencies(types));
assertThat(records)
.containsExactly(zeFirstSchemaTypeDefaultRecord, zeFirstSchemaTypeCustomRecord, anotherSchemaTypeCustomRecord,
anotherSchemaTypeDefaultRecord);
}
@Test
public void whenSortingMetadataByAscCodeThenCorrect()
throws Exception {
Metadata metadataABC = mock(Metadata.class);
when(metadataABC.getLocalCode()).thenReturn("abc");
Metadata metadataDEF = mock(Metadata.class);
when(metadataDEF.getLocalCode()).thenReturn("def");
Metadata metadataGHI = mock(Metadata.class);
when(metadataGHI.getLocalCode()).thenReturn("ghi");
List<Metadata> metadatas = new ArrayList<>(Arrays.asList(metadataGHI, metadataABC, metadataDEF));
Collections.sort(metadatas, SchemaComparators.METADATA_COMPARATOR_BY_ASC_LOCAL_CODE);
assertThat(metadatas).containsExactly(metadataABC, metadataDEF, metadataGHI);
}
@Test
public void whenSortingMetadataSchemaByAscCodeThenCorrect()
throws Exception {
MetadataSchema metadataSchemaABC = mock(MetadataSchema.class);
when(metadataSchemaABC.getLocalCode()).thenReturn("abc");
MetadataSchema metadataSchemaDEF = mock(MetadataSchema.class);
when(metadataSchemaDEF.getLocalCode()).thenReturn("def");
MetadataSchema metadataSchemaGHI = mock(MetadataSchema.class);
when(metadataSchemaGHI.getLocalCode()).thenReturn("ghi");
List<MetadataSchema> metadatas = new ArrayList<>(
Arrays.asList(metadataSchemaGHI, metadataSchemaABC, metadataSchemaDEF));
Collections.sort(metadatas, SchemaComparators.SCHEMA_COMPARATOR_BY_ASC_LOCAL_CODE);
assertThat(metadatas).containsExactly(metadataSchemaABC, metadataSchemaDEF, metadataSchemaGHI);
}
@Test
public void whenSortingMetadataSchemaTypeByAscCodeThenCorrect()
throws Exception {
MetadataSchemaType metadataSchemaTypeABC = mock(MetadataSchemaType.class);
when(metadataSchemaTypeABC.getCode()).thenReturn("abc");
MetadataSchemaType metadataSchemaTypeDEF = mock(MetadataSchemaType.class);
when(metadataSchemaTypeDEF.getCode()).thenReturn("def");
MetadataSchemaType metadataSchemaTypeGHI = mock(MetadataSchemaType.class);
when(metadataSchemaTypeGHI.getCode()).thenReturn("ghi");
List<MetadataSchemaType> metadatas = new ArrayList<>(
Arrays.asList(metadataSchemaTypeGHI, metadataSchemaTypeABC, metadataSchemaTypeDEF));
Collections.sort(metadatas, SchemaComparators.SCHEMA_TYPE_COMPARATOR_BY_ASC_CODE);
assertThat(metadatas).containsExactly(metadataSchemaTypeABC, metadataSchemaTypeDEF, metadataSchemaTypeGHI);
}
}