package com.constellio.app.modules.rm.ui.pages.decommissioning; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.model.enums.DecommissioningListType; import com.constellio.app.modules.rm.model.enums.OriginStatus; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.services.borrowingServices.BorrowingServices; import com.constellio.app.modules.rm.services.borrowingServices.BorrowingType; import com.constellio.app.modules.rm.services.decommissioning.SearchType; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.modules.rm.wrappers.Folder; 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.search.SearchServices; 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; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.util.List; import java.util.Locale; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; /** * Created by Constellio on 2017-01-10. */ public class DecommissioningBuilderPresenterAcceptanceTest extends ConstellioTest { @Mock DecommissioningBuilderView view; MockedNavigation navigator; RMTestRecords records = new RMTestRecords(zeCollection); DecommissioningBuilderPresenter presenter; SessionContext sessionContext; RMSchemasRecordsServices rm; RecordServices recordServices; DecommissioningList decommissioningList; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withEvents().withDocumentsHavingContent() ); inCollection(zeCollection).setCollectionTitleTo("Collection de test"); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); when(view.navigate()).thenReturn(navigator); decommissioningList = buildDefaultFolderDecommissioningList(); recordServices.add(decommissioningList.getWrappedRecord()); presenter = spy(new DecommissioningBuilderPresenter(view)); } @Test public void givenDecommissioningListThenCalculateGoodSearchType() { presenter.forParams("transfer/id/decomTest"); presenter.forRequestParameters("transfer/id/decomTest"); assertThat(presenter.getSearchType()).isEqualTo(SearchType.transfer); assertThat(presenter.getDecommissioningList().getId()).isEqualTo("decomTest"); assertThat(presenter.adminUnitId).isEqualTo(records.unitId_10); assertThat(presenter.isAddMode()).isFalse(); presenter = spy(new DecommissioningBuilderPresenter(view)); presenter.forParams("transfer"); presenter.forRequestParameters("transfer"); assertThat(presenter.getSearchType()).isEqualTo(SearchType.transfer); assertThat(presenter.getDecommissioningList()).isNull(); assertThat(presenter.adminUnitId).isNull(); assertThat(presenter.isAddMode()).isTrue(); } @Test public void givenBuilderInEditModeThenAddRecordsCorrectly() throws RecordServicesException { presenter.forParams("transfer/id/decomTest"); presenter.forRequestParameters("transfer/id/decomTest"); presenter.addToListButtonClicked(asList(records.folder_A01, records.folder_A05)); assertThat(rm.getDecommissioningList("decomTest").getFolders()).containsOnly(records.folder_A01, records.folder_A02, records.folder_A03, records.folder_A04, records.folder_A05); recordServices.add(buildDefaultDocumentDecommissioningList().getWrappedRecord()); presenter.forParams("documentTransfer/id/decomTestDoc"); presenter.forRequestParameters("documentTransfer/id/decomTestDoc"); presenter.addToListButtonClicked(asList(records.document_A19, records.document_B33)); assertThat(rm.getDecommissioningList("decomTestDoc").getDocuments()).containsOnly(records.document_A19, records.document_A49, records.document_A79, records.document_B30, records.document_B33); } @Test public void givenBuilderThenShowOnlyNonBorrowedFolders() throws Exception { presenter.forParams("semiActiveToDeposit"); presenter.forRequestParameters("semiActiveToDeposit"); presenter.adminUnitId = records.unitId_10a; SearchServices searchServices = getModelLayerFactory().newSearchServices(); LogicalSearchCondition searchCondition = presenter.getSearchCondition(); List<String> recordIds = searchServices.searchRecordIds(searchCondition); assertThat(recordIds).contains(records.folder_A51); new BorrowingServices(zeCollection, getModelLayerFactory()).borrowFolder(records.folder_A51, LocalDate.now(), LocalDate.now().plusDays(1), records.getAdmin(), records.getAdmin(), BorrowingType.BORROW, true); recordIds = searchServices.searchRecordIds(searchCondition); assertThat(recordIds).doesNotContain(records.folder_A51); } @Test public void givenBuilderThenCannotAddFoldersThatAreAlreadyInProccessedDecommissioningLists() throws Exception { presenter.forParams("semiActiveToDeposit"); presenter.forRequestParameters("semiActiveToDeposit"); presenter.adminUnitId = records.unitId_10a; SearchServices searchServices = getModelLayerFactory().newSearchServices(); LogicalSearchCondition searchCondition = presenter.getSearchCondition(); List<String> recordIds = searchServices.searchRecordIds(searchCondition); assertThat(recordIds).contains(records.folder_A51); recordServices.add(records.getList12().addFolderDetailsFor(records.getFolder_A51())); presenter.forParams("semiActiveToDeposit"); presenter.forRequestParameters("semiActiveToDeposit"); presenter.adminUnitId = records.unitId_10a; searchCondition = presenter.buildSearchCondition(); recordIds = searchServices.searchRecordIds(searchCondition); assertThat(recordIds).contains(records.folder_A51); recordServices.add(records.getList17().addFolderDetailsFor(records.getFolder_A51())); presenter.forParams("semiActiveToDeposit"); presenter.forRequestParameters("semiActiveToDeposit"); presenter.adminUnitId = records.unitId_10a; searchCondition = presenter.buildSearchCondition(); recordIds = searchServices.searchRecordIds(searchCondition); assertThat(recordIds).doesNotContain(records.folder_A51); } private DecommissioningList buildDefaultFolderDecommissioningList() { return rm.newDecommissioningListWithId("decomTest").setTitle("decomTest").setOriginArchivisticStatus(OriginStatus.ACTIVE) .setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setAdministrativeUnit(records.unitId_10) .addFolderDetailsFor(rm.getFolders(asList(records.folder_A01, records.folder_A02, records.folder_A03, records.folder_A04)).toArray(new Folder[0])); } private DecommissioningList buildDefaultDocumentDecommissioningList() { return rm.newDecommissioningListWithId("decomTestDoc").setTitle("decomTestDoc").setOriginArchivisticStatus(OriginStatus.ACTIVE) .setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER).setAdministrativeUnit(records.unitId_10) .setDocuments(asList(records.document_A19, records.document_A49, records.document_A79, records.document_B30)); } }