package com.constellio.app.modules.rm.ui.pages.containers; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static junit.framework.Assert.fail; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; 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.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedNavigation; public class DisplayContainerPresenterAcceptanceTest extends ConstellioTest { @Mock DisplayContainerView view; MockedNavigation navigator; private RMTestRecords records = new RMTestRecords(zeCollection); private DisplayContainerPresenter presenter; private SessionContext sessionContext; private RecordVO recordVO; private RecordServices recordServices; private ContainerRecord container; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withEvents() ); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); recordServices = getModelLayerFactory().newRecordServices(); when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); when(view.navigate()).thenReturn(navigator); presenter = new DisplayContainerPresenter(view);//spy(); container = records.getContainerBac01(); List<Record> folders = getRecordsInContainer(container.getId()); assertThat(folders.size()).isEqualTo(2); assertThat(folders.get(0).getId()).isIn(new String[] { records.folder_C50, records.folder_C55 }); assertThat(folders.get(1).getId()).isIn(new String[] { records.folder_C50, records.folder_C55 }); recordVO = new RecordToVOBuilder().build(container.getWrappedRecord(), RecordVO.VIEW_MODE.FORM, sessionContext); } @Test public void givenContainerWithEnteredFillRatioThenReturnFillRatio() throws Exception, RecordInContainerWithoutLinearMeasure, ContainerWithoutCapacityException { Double expectedRatio = 20d; container.setFillRatioEntered(expectedRatio); recordVO = new RecordToVOBuilder().build(container.getWrappedRecord(), RecordVO.VIEW_MODE.FORM, sessionContext); Double ratio = presenter.getFillRatio(recordVO); assertThat(ratio).isEqualTo(expectedRatio); } @Test public void givenContainerWithoutCapacityThenThrowException() throws Exception { try { presenter.getFillRatio(recordVO); fail("should fail"); } catch (ContainerWithoutCapacityException e) { } catch (RecordInContainerWithoutLinearMeasure recordInContainerWithoutLinearMeasure) { fail("should return valid exception"); } } @Test public void givenContainerWithoutFoldersThenReturnZero() throws Exception, RecordInContainerWithoutLinearMeasure, ContainerWithoutCapacityException { Double expectedRatio = 0d; container.setCapacity(10d); recordServices.update(records.getFolder_C50().set(Folder.CONTAINER, null)); recordServices.update(records.getFolder_C55().set(Folder.CONTAINER, null)); recordVO = new RecordToVOBuilder().build(container.getWrappedRecord(), RecordVO.VIEW_MODE.FORM, sessionContext); Double ratio = presenter.getFillRatio(recordVO); assertThat(ratio).isEqualTo(expectedRatio); } private List<Record> getRecordsInContainer(String id) { RMSchemasRecordsServices schemas = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); Metadata containerMetadata = schemas.folderSchemaType().getDefaultSchema().getMetadata(Folder.CONTAINER); LogicalSearchCondition condition = from(schemas.folderSchemaType()).where(containerMetadata).isEqualTo(id); LogicalSearchQuery query = new LogicalSearchQuery(condition); return getModelLayerFactory().newSearchServices().search(query); } }