package com.constellio.app.modules.rm.ui.pages.folder;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.model.enums.DecommissioningType;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.ui.builders.FolderToVOBuilder;
import com.constellio.app.modules.rm.ui.entities.FolderVO;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.modules.rm.wrappers.type.FolderType;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
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;
import com.constellio.sdk.tests.FakeSessionContext;
import com.constellio.sdk.tests.MockedNavigation;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import java.util.Locale;
import static org.mockito.Mockito.*;
public class AddEditFolderFolderPresenterAcceptTest extends ConstellioTest {
@Mock AddEditFolderView view;
MockedNavigation navigator;
RMTestRecords records = new RMTestRecords(zeCollection);
AddEditFolderPresenter presenter;
SessionContext sessionContext;
RMSchemasRecordsServices rmSchemasRecordsServices;
MetadataSchemasManager metadataSchemasManager;
RecordServices recordServices;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
.withFoldersAndContainersOfEveryStatus().withEvents()
);
inCollection(zeCollection).setCollectionTitleTo("Collection de test");
rmSchemasRecordsServices = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
sessionContext = FakeSessionContext.chuckNorrisInCollection(zeCollection);
sessionContext.setCurrentLocale(Locale.FRENCH);
when(view.getSessionContext()).thenReturn(sessionContext);
when(view.getCollection()).thenReturn(zeCollection);
when(view.getConstellioFactories()).thenReturn(getConstellioFactories());
navigator = new MockedNavigation();
when(view.navigate()).thenReturn(navigator);
presenter = spy(new AddEditFolderPresenter(view));
doReturn("type1").when(presenter).getTypeFieldValue();
doNothing().when(presenter).commitForm();
doNothing().when(presenter).reloadForm();
buildDefaultContainer();
}
@Test
public void givenNewFolderTypeLinkedToNewFolderSchemaWhenReloadFormWithNewTypeThenDoNotSetValueInAutomaticMetadatas()
throws Exception {
givenNewFolderTypeLinkedToNewFolderSchema();
presenter.forParams("");
presenter.reloadFormAfterFolderTypeChange();
}
@Test
public void givenNewFolderInContainerWithEnoughSizeThanNoErrorMessage() {
presenter.forParams("");
FolderVO folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
presenter.forParams("");
folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(100.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
}
@Test
public void givenNewFolderInContainerWithoutEnoughSizeThanErrorThrown() {
presenter.forParams("");
FolderVO folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(101.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, times(1)).showErrorMessage(any(String.class));
}
@Test
public void givenEditedFolderInNewContainerWithEnoughSizeThanNoErrorMessage() {
presenter.forParams("");
FolderVO folderVO = buildFolderVO();
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
presenter.forParams("id%3D"+folderVO.getId());
folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
}
@Test
public void givenEditedFolderInNewContainerWithoutEnoughSizeThanErrorThrown() {
presenter.forParams("");
FolderVO folderVO = buildFolderVO();
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
presenter.forParams("id%3D"+folderVO.getId());
folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(101.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, times(1)).showErrorMessage(any(String.class));
}
@Test
public void givenEditedFolderInOldContainerWithEnoughSizeThanNoErrorMessage() {
presenter.forParams("testBoite100");
FolderVO folderVO = buildFolderVO();
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
presenter.forParams("id%3D"+folderVO.getId());
folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(100.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
}
@Test
public void givenEditedFolderInOldContainerWithoutEnoughSizeThanErrorThrown() {
presenter.forParams("testBoite100");
FolderVO folderVO = buildFolderVO();
folderVO.setLinearSize(50.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, never()).showErrorMessage(any(String.class));
presenter.forParams("id%3D"+folderVO.getId());
folderVO = buildFolderVO();
folderVO.setContainer("testBoite100");
folderVO.setLinearSize(101.0);
doReturn(folderVO).when(presenter).getFolderVO();
presenter.saveButtonClicked();
verify(view, times(1)).showErrorMessage(any(String.class));
}
private void givenNewFolderTypeLinkedToNewFolderSchema()
throws Exception {
givenNewCustomFolderSchema();
FolderType folderType1 = rmSchemasRecordsServices.newFolderTypeWithId("type1");
folderType1.setCode("type1");
folderType1.setDescription("type1");
folderType1.setTitle("type1");
folderType1.setLinkedSchema("folder_USRcustom1");
recordServices.add(folderType1);
}
private void givenNewCustomFolderSchema()
throws OptimisticLocking {
metadataSchemasManager = getModelLayerFactory().getMetadataSchemasManager();
MetadataSchemaTypesBuilder typesBuilder = metadataSchemasManager.modify(zeCollection);
typesBuilder.getSchemaType(Folder.SCHEMA_TYPE).createCustomSchema("USRcustom1");
metadataSchemasManager.saveUpdateSchemaTypes(typesBuilder);
}
private FolderVO buildFolderVO() {
FolderVO folderVO = new FolderToVOBuilder().build(presenter.newRecord(), RecordVO.VIEW_MODE.FORM, view.getSessionContext());
folderVO.setAdministrativeUnit(records.unitId_10);
folderVO.setCategory(records.categoryId_X);
folderVO.setRetentionRule(records.ruleId_1);
folderVO.setTitle("newFolder");
return folderVO;
}
private void buildDefaultContainer() throws RecordServicesException {
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices.add(rm.newContainerRecordWithId("testBoite100").setDecommissioningType(DecommissioningType.TRANSFERT_TO_SEMI_ACTIVE)
.setAdministrativeUnit(records.getUnit10a()).setTitle("testBoite100").setTemporaryIdentifier("testBoite100")
.setCapacity(100D).setType(recordServices.getDocumentById(records.containerTypeId_boite22x22)));
}
}