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.decommissioning.SearchType;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
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.schemas.MetadataSchemasManager;
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.HashMap;
import java.util.List;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
/**
* Created by Constellio on 2017-01-10.
*/
public class DocumentDecommissioningListPresenterAcceptanceTest extends ConstellioTest {
@Mock
DocumentDecommissioningListView view;
MockedNavigation navigator;
RMTestRecords records = new RMTestRecords(zeCollection);
DocumentDecommissioningListPresenter presenter;
SessionContext sessionContext;
RMSchemasRecordsServices rm;
MetadataSchemasManager metadataSchemasManager;
RecordServices recordServices;
DecommissioningList decommissioningList;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records).withDocumentsHavingContent()
.withFoldersAndContainersOfEveryStatus().withEvents()
);
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 = buildDefaultDecommissioningList();
recordServices.add(decommissioningList.getWrappedRecord());
presenter = spy(new DocumentDecommissioningListPresenter(view));
doReturn(decommissioningList).when(presenter).decommissioningList();
doReturn(rm).when(presenter).rmRecordsServices();
doNothing().when(presenter).refreshView();
}
@Test
public void givenDecommissioningListThenCalculateGoodSearchType() {
decommissioningList.setOriginArchivisticStatus(OriginStatus.ACTIVE)
.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER);
assertThat(presenter.calculateSearchType()).isEqualTo(SearchType.documentTransfer);
decommissioningList.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_DEPOSIT);
assertThat(presenter.calculateSearchType()).isEqualTo(SearchType.documentActiveToDeposit);
decommissioningList.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_DESTROY);
assertThat(presenter.calculateSearchType()).isEqualTo(SearchType.documentActiveToDestroy);
decommissioningList.setOriginArchivisticStatus(OriginStatus.SEMI_ACTIVE)
.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_DEPOSIT);
assertThat(presenter.calculateSearchType()).isEqualTo(SearchType.documentSemiActiveToDeposit);
decommissioningList.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_DESTROY);
assertThat(presenter.calculateSearchType()).isEqualTo(SearchType.documentSemiActiveToDestroy);
}
@Test
public void whenRemoveDocumentsClickedThenRemoveGoodDocuments() {
presenter.forRecordId(decommissioningList.getId());
List<RecordVO> recordVOList = presenter.getDocuments().listRecordVOs(0,4);
presenter.removeDocumentsButtonClicked(buildSelectedMap(false, true, false, false));
assertThat(rm.getDecommissioningList(decommissioningList.getId()).getDocuments()).containsOnly(records.document_A19, records.document_A79, records.document_B30);
recordVOList = presenter.getDocuments().listRecordVOs(0,4);
presenter.removeDocumentsButtonClicked(buildSelectedMap(true, true, false));
assertThat(rm.getDecommissioningList(decommissioningList.getId()).getDocuments()).containsOnly(records.document_B30);
recordVOList = presenter.getDocuments().listRecordVOs(0,4);
presenter.removeDocumentsButtonClicked(buildSelectedMap(true));
assertThat(rm.getDecommissioningList(decommissioningList.getId()).getDocuments()).isEmpty();
}
private DecommissioningList buildDefaultDecommissioningList() {
return rm.newDecommissioningListWithId("decomTest").setTitle("decomTest").setOriginArchivisticStatus(OriginStatus.ACTIVE)
.setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER)
.addDocuments(records.document_A19, records.document_A49, records.document_A79, records.document_B30);
}
private HashMap<Integer, Boolean> buildSelectedMap(boolean... selected) {
HashMap<Integer, Boolean> selectedMap = new HashMap<>();
for(int i = 0; i < selected.length; i++) {
selectedMap.put(i, selected[i]);
}
return selectedMap;
}
}