package com.constellio.app.ui.framework.data;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.RecordVO.VIEW_MODE;
import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder;
import com.constellio.app.ui.framework.builders.RecordToVOBuilder;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.sdk.tests.ConstellioTest;
public class RecordVODataProviderAcceptTest extends ConstellioTest {
RMTestRecords records = new RMTestRecords(zeCollection);
RMSchemasRecordsServices rm;
@Mock SessionContext sessionContext;
MetadataSchemaVO schema;
RecordToVOBuilder voBuilder;
@Test
public void givenDataProviderThenReturnGoodSizeOfRecords()
throws Exception {
LogicalSearchQuery query = new LogicalSearchQuery(from(rm.folderSchemaType())
.where(rm.folder.category()).isEqualTo(records.getCategory_Z112()));
RecordVODataProvider dataProvider = newDataProvider(query);
assertThat(dataProvider.size()).isEqualTo(5);
}
@Test
public void givenDataProviderThenReturnGoodRecords()
throws Exception {
LogicalSearchQuery query = new LogicalSearchQuery(from(rm.folderSchemaType())
.where(rm.folder.category()).isEqualTo(records.getCategory_Z112()));
RecordVODataProvider dataProvider = newDataProvider(query.sortAsc(Schemas.TITLE));
assertThat(dataProvider.getRecordVO(0).getTitle()).isEqualTo("Boeuf");
assertThat(dataProvider.getRecordVO(1).getTitle()).isEqualTo("Bouc");
assertThat(dataProvider.getRecordVO(2).getTitle()).isEqualTo("Buffle");
assertThat(dataProvider.getRecordVO(3).getTitle()).isEqualTo("Carotte");
assertThat(dataProvider.getRecordVO(4).getTitle()).isEqualTo("Citron");
}
@Test
public void givenDataProviderWhenListRecordVOsThenReturnGoodRecords()
throws Exception {
LogicalSearchQuery query = new LogicalSearchQuery(from(rm.folderSchemaType())
.where(rm.folder.category()).isEqualTo(records.getCategory_Z112()));
RecordVODataProvider dataProvider = newDataProvider(query.sortAsc(Schemas.TITLE));
assertThat(titlesOf(dataProvider.listRecordVOs(0, 1))).isEqualTo(asList("Boeuf"));
assertThat(titlesOf(dataProvider.listRecordVOs(0, 3))).isEqualTo(asList("Boeuf", "Bouc", "Buffle"));
assertThat(titlesOf(dataProvider.listRecordVOs(1, 3))).isEqualTo(asList("Bouc", "Buffle", "Carotte"));
assertThat(titlesOf(dataProvider.listRecordVOs(1, 4))).isEqualTo(asList("Bouc", "Buffle", "Carotte", "Citron"));
}
private List<String> titlesOf(List<RecordVO> list) {
List<String> titles = new ArrayList<>();
for (RecordVO item : list) {
titles.add(item.getTitle());
}
return titles;
}
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
.withFoldersAndContainersOfEveryStatus());
rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
when(sessionContext.getCurrentCollection()).thenReturn(zeCollection);
when(sessionContext.getCurrentLocale()).thenReturn(Locale.FRENCH);
}
private RecordVODataProvider newDataProvider(final LogicalSearchQuery zeQuery) {
return new RecordVODataProvider(folderSchemaVO(), new RecordToVOBuilder(), getModelLayerFactory(),
sessionContext) {
@Override
protected LogicalSearchQuery getQuery() {
return zeQuery;
}
};
}
private MetadataSchemaVO folderSchemaVO() {
return new MetadataSchemaToVOBuilder().build(rm.defaultFolderSchema(), VIEW_MODE.TABLE, sessionContext);
}
}