package com.constellio.app.modules.rm.extensions; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.ui.components.breadcrumb.FolderDocumentBreadcrumbTrail; import com.constellio.app.modules.rm.ui.pages.containers.DisplayContainerPresenter; import com.constellio.app.modules.rm.ui.pages.containers.DisplayContainerViewImpl; import com.constellio.app.modules.rm.ui.pages.folder.DisplayFolderPresenter; import com.constellio.app.modules.rm.ui.pages.folder.DisplayFolderViewImpl; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.RMTaskType; import com.constellio.app.modules.tasks.model.wrappers.Task; import com.constellio.app.modules.tasks.model.wrappers.request.ExtensionRequest; import com.constellio.app.modules.tasks.model.wrappers.request.RequestTask; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.pages.base.UIContext; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedNavigation; import com.constellio.sdk.tests.setups.Users; 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 com.constellio.sdk.tests.TestUtils.asList; import static com.constellio.sdk.tests.TestUtils.assertThatRecord; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; /** * Created by Constellio on 2017-04-03. */ public class RMRequestTaskButtonExtensionAcceptanceTest extends ConstellioTest { @Mock RMRequestTaskButtonExtension extension; @Mock DisplayFolderViewImpl folderView; @Mock DisplayContainerViewImpl containerView; @Mock UIContext uiContext; MockedNavigation navigator; private DisplayFolderPresenter folderPresenter; private DisplayContainerPresenter containerPresenter; private SessionContext sessionContext; private RecordVO folderVO; private RecordVO containerVO; private RecordServices recordServices; private RMSchemasRecordsServices rm; private TasksSchemasRecordsServices taskSchemas; RMTestRecords records = new RMTestRecords(zeCollection); Users users = new Users(); @Before public void setup() { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withAllTestUsers() ); extension = spy(new RMRequestTaskButtonExtension(zeCollection, getAppLayerFactory())); doNothing().when(extension).adjustButtons(any(BaseViewImpl.class), any(Folder.class), any(ContainerRecord.class), any(User.class)); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); taskSchemas = new TasksSchemasRecordsServices(zeCollection, getAppLayerFactory()); users.setUp(new UserServices(getModelLayerFactory())); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); recordServices = getModelLayerFactory().newRecordServices(); RecordToVOBuilder recordToVOBuilder = new RecordToVOBuilder(); folderVO = recordToVOBuilder.build(records.getFolder_A42().getWrappedRecord(), RecordVO.VIEW_MODE.DISPLAY, sessionContext); containerVO = recordToVOBuilder.build(records.getContainerBac13().getWrappedRecord(), RecordVO.VIEW_MODE.DISPLAY, sessionContext); when(folderView.getSessionContext()).thenReturn(sessionContext); when(folderView.getCollection()).thenReturn(zeCollection); when(folderView.getConstellioFactories()).thenReturn(getConstellioFactories()); when(folderView.navigate()).thenReturn(navigator); when(folderView.getUIContext()).thenReturn(uiContext); when(folderView.getRecord()).thenReturn(folderVO); when(uiContext.getAttribute(FolderDocumentBreadcrumbTrail.TAXONOMY_CODE)).thenReturn("plan"); when(containerView.getSessionContext()).thenReturn(sessionContext); when(containerView.getCollection()).thenReturn(zeCollection); when(containerView.getConstellioFactories()).thenReturn(getConstellioFactories()); when(containerView.navigate()).thenReturn(navigator); when(containerView.getUIContext()).thenReturn(uiContext); folderPresenter = new DisplayFolderPresenter(folderView); containerPresenter = new DisplayContainerPresenter(containerView); when(containerView.getPresenter()).thenReturn(containerPresenter); } @Test public void givenBorrowButtonClickedForFolderThenCreateValidTask() { folderPresenter.forParams(records.folder_A42); //Crocodile extension.borrowRequest(folderView, false, "7"); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_FOLDERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE) .containsOnly(asList(records.folder_A42), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.BORROW_REQUEST).getId(), "Demande d'emprunt du dossier: Crocodile"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenBorrowButtonClickedForContainerThenCreateValidTask() { folderPresenter.forParams(records.folder_A42); //Crocodile extension.borrowRequest(folderView, true, "7"); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_CONTAINERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.containerId_bac13), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.BORROW_REQUEST).getId(), "Demande d'emprunt du contenant: 10_A_06"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); containerPresenter.forContainerId(records.containerId_bac13); //Crocodile extension.borrowRequest(containerView, true, "7"); tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).where(Schemas.IDENTIFIER).isNotEqual(task.getId())))); assertThat(tasks.size()).isEqualTo(1); task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_CONTAINERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.containerId_bac13), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.BORROW_REQUEST).getId(), "Demande d'emprunt du contenant: 10_A_06"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenReturnButtonClickedForFolderThenCreateValidTask() { folderPresenter.forParams(records.folder_A42); //Crocodile extension.returnRequest(folderView); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_FOLDERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.folder_A42), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.RETURN_REQUEST).getId(), "Demande de retour du dossier: Crocodile"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenReturnButtonClickedForContainerThenCreateValidTask() { containerPresenter.forContainerId(records.containerId_bac13); //Crocodile extension.returnRequest(containerView); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_CONTAINERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.containerId_bac13), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.RETURN_REQUEST).getId(), "Demande de retour du contenant: 10_A_06"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenReactivationButtonClickedForFolderThenCreateValidTask() { folderPresenter.forParams(records.folder_A42); //Crocodile extension.reactivationRequested(folderView, new RMRequestTaskButtonExtension.Request(new LocalDate().now(), RMRequestTaskButtonExtension.RequestType.REACTIVATION)); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_FOLDERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.folder_A42), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.REACTIVATION_REQUEST).getId(), "Demande de réactivation du dossier: Crocodile"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenReactivationButtonClickedForContainerThenCreateValidTask() { containerPresenter.forContainerId(records.containerId_bac13); //Crocodile extension.reactivationRequested(containerView, new RMRequestTaskButtonExtension.Request(new LocalDate().now(), RMRequestTaskButtonExtension.RequestType.REACTIVATION)); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_CONTAINERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE).containsOnly(asList(records.containerId_bac13), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.REACTIVATION_REQUEST).getId(), "Demande de réactivation du contenant: 10_A_06"); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenBorrowExtensionButtonClickedForFolderThenCreateValidTask() { folderPresenter.forParams(records.folder_A42); //Crocodile extension.borrowExtensionRequested(folderView, new RMRequestTaskButtonExtension.Request(new LocalDate().now(), RMRequestTaskButtonExtension.RequestType.EXTENSION)); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_FOLDERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE, ExtensionRequest.EXTENSION_VALUE).containsOnly(asList(records.folder_A42), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.BORROW_EXTENSION_REQUEST).getId(), "Demande de renouvellement d'emprunt du dossier: Crocodile", LocalDate.now()); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } @Test public void givenBorrowExtensionButtonClickedForContainerThenCreateValidTask() { containerPresenter.forContainerId(records.containerId_bac13); //Crocodile extension.borrowExtensionRequested(containerView, new RMRequestTaskButtonExtension.Request(new LocalDate().now(), RMRequestTaskButtonExtension.RequestType.EXTENSION)); List<Task> tasks = taskSchemas.wrapTasks(getModelLayerFactory().newSearchServices().search(new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(rm.userTask.schemaType()).returnAll()))); assertThat(tasks.size()).isEqualTo(1); Task task = tasks.get(0); assertThatRecord(task).extracting(Task.LINKED_CONTAINERS, RequestTask.ACCEPTED, RequestTask.APPLICANT, Task.TYPE, Task.TITLE, ExtensionRequest.EXTENSION_VALUE).containsOnly(asList(records.containerId_bac13), null, records.getAdmin().getId(), taskSchemas.getTaskTypeByCode(RMTaskType.BORROW_EXTENSION_REQUEST).getId(), "Demande de renouvellement d'emprunt du contenant: 10_A_06", LocalDate.now()); assertThat(task.getAssigneeUsersCandidates()).containsOnly(records.getChuckNorris().getId(), records.getAdmin().getId()); } }