package com.constellio.app.modules.rm.ui.pages.decommissioning; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningListQueryFactory; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.data.utils.TimeProvider; import com.constellio.model.entities.records.wrappers.User; 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.LogicalSearchQuery; import com.constellio.sdk.tests.ConstellioTest; public class DecommissioningListQueryFactoryAcceptanceTest extends ConstellioTest { RMTestRecords records = new RMTestRecords(zeCollection); private DecommissioningListQueryFactory queryFactory; private RecordServices recordServices; private SearchServices searchServices; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus() ); recordServices = getModelLayerFactory().newRecordServices(); searchServices = getModelLayerFactory().newSearchServices(); queryFactory = new DecommissioningListQueryFactory(zeCollection, getAppLayerFactory()); } @Test public void givenUserHasNoPermissionWhenSearchingGeneratedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getGeneratedListsQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserHasApprovalPermissionWhenSearchingGeneratedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getGeneratedListsQuery(records.getGandalf_managerInABC()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserHasProcessPermissionWhenSearchingGeneratedListsThenReturnGeneratedLists() { LogicalSearchQuery query = queryFactory.getGeneratedListsQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly( records.list_01, records.list_02, records.list_03, records.list_04, records.list_05, records.list_06, records.list_07, records.list_08, records.list_09, records.list_10, records.list_16, records.list_17, records.list_18, records.list_19, records.list_20, records.list_21); } @Test public void givenUserHasNoPermissionWhenSearchingListsPendingValidationThenReturnNone() throws RecordServicesException { LogicalSearchQuery query = queryFactory.getListsPendingValidationQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserHasApprovalPermissionWhenSearchingListsPendingValidationThenReturnListsPendingApprovalAndValidation() throws RecordServicesException { LogicalSearchQuery query = queryFactory.getListsPendingValidationQuery(records.getGandalf_managerInABC()); assertThat(searchServices.search(query)).extracting("id").containsOnly(records.list_25); } // TODO: validator = user when user is manager @Test public void givenUserHasProcessPermissionWhenSearchingListsPendingValidationThenReturnListsPendingValidationNotApproval() throws RecordServicesException { DecommissioningList list = addListWithValidationRequestToBobAndChuck(); LogicalSearchQuery query = queryFactory.getListsPendingValidationQuery(records.getAdmin()); assertThat(searchServices.search(query)).extracting("id").containsOnly(list.getId()); } @Test public void givenUserHasProcessPermissionWhenSearchingListsPendingValidationThenDoNotReturnListsTheUserMustValidate() throws RecordServicesException { addListWithValidationRequestToBobAndChuck(); LogicalSearchQuery query = queryFactory.getListsPendingValidationQuery(records.getChuckNorris()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenNoValidationRequestWhenSearchingListsToValidateThenReturnNone() throws RecordServicesException { LogicalSearchQuery query = queryFactory.getListsPendingValidationQuery(records.getChuckNorris()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenValidationRequestWhenSearchingListsToValidateThenReturnList() throws RecordServicesException { DecommissioningList newList = addListWithValidationRequestToBobAndChuck(); LogicalSearchQuery query = queryFactory.getListsToValidateQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly(newList.getId()); } @Test public void givenValidationRequestAlreadyValidatedBySameUserWhenSearchingListsToValidateThenReturnNone() throws RecordServicesException { addUserValidationToList(addListWithValidationRequestToBobAndChuck(), records.getChuckNorris()); LogicalSearchQuery query = queryFactory.getListsToValidateQuery(records.getChuckNorris()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenValidationRequestAlreadyValidatedByAnotherUserWhenSearchingListsToValidateThenReturnList() throws RecordServicesException { DecommissioningList newList = addListWithValidationRequestToBobAndChuck(); addUserValidationToList(newList, records.getBob_userInAC()); LogicalSearchQuery query = queryFactory.getListsToValidateQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly(newList.getId()); } @Test public void givenUserWithNoPermissionWhenSearchingValidatedListsThenReturnValidatedLists() throws RecordServicesException { DecommissioningList newList = addListWithValidationRequestToBobAndChuck(); addUserValidationToList(newList, records.getBob_userInAC()); addUserValidationToList(newList, records.getChuckNorris()); LogicalSearchQuery query = queryFactory.getValidatedListsQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithApprovePermissionWhenSearchingValidatedListsThenReturnValidatedLists() throws RecordServicesException { DecommissioningList newList = addListWithValidationRequestToBobAndChuck(); addUserValidationToList(newList, records.getBob_userInAC()); addUserValidationToList(newList, records.getChuckNorris()); LogicalSearchQuery query = queryFactory.getValidatedListsQuery(records.getGandalf_managerInABC()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithProcessPermissionWhenSearchingValidatedListsThenReturnValidatedLists() throws RecordServicesException { DecommissioningList newList = addListWithValidationRequestToBobAndChuck(); addUserValidationToList(newList, records.getBob_userInAC()); addUserValidationToList(newList, records.getChuckNorris()); LogicalSearchQuery query = queryFactory.getValidatedListsQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly(newList.getId()); } @Test public void givenUserWithNoPermissionWhenSearchingListsPendingApprovalThenReturnNone() { LogicalSearchQuery query = queryFactory.getListsPendingApprovalQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithApprovePermissionWhenSearchingListsPendingApprovalThenReturnNone() { LogicalSearchQuery query = queryFactory.getListsPendingApprovalQuery(records.getGandalf_managerInABC()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithProcessPermissionWhenSearchingListsPendingApprovalThenReturnLists() { LogicalSearchQuery query = queryFactory.getListsPendingApprovalQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly(records.list_23, records.list_25); } @Test public void givenUserWithNoPermissionWhenSearchingListsToApproveThenReturnNone() { LogicalSearchQuery query = queryFactory.getListsToApproveQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithProcessPermissionWhenSearchingListsToApproveThenReturnNone() { LogicalSearchQuery query = queryFactory.getListsToApproveQuery(records.getAdmin()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithApprovePermissionWhenSearchingListsToApproveThenReturnLists() { LogicalSearchQuery query = queryFactory.getListsToApproveQuery(records.getGandalf_managerInABC()); assertThat(searchServices.search(query)).extracting("id").containsOnly(records.list_23); } @Test public void givenUserWithNoPermissionWhenSearchingApprovedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getApprovedListsQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithApprovePermissionWhenSearchingApprovedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getApprovedListsQuery(records.getGandalf_managerInABC()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithProcessPermissionWhenSearchingApprovedListsThenReturnApprovedLists() { LogicalSearchQuery query = queryFactory.getApprovedListsQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly(records.list_24); } @Test public void givenUserWithNoPermissionWhenSearchingProcessedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getProcessedListsQuery(records.getAlice()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithApprovePermissionWhenSearchingProcessedListsThenReturnNone() { LogicalSearchQuery query = queryFactory.getProcessedListsQuery(records.getGandalf_managerInABC()); assertThat(searchServices.hasResults(query)).isFalse(); } @Test public void givenUserWithProcessPermissionWhenSearchingProcessedListsThenReturnProcessedLists() { LogicalSearchQuery query = queryFactory.getProcessedListsQuery(records.getChuckNorris()); assertThat(searchServices.search(query)).extracting("id").containsOnly( records.list_11, records.list_12, records.list_13, records.list_14, records.list_15); } void addUserValidationToList(DecommissioningList list, User user) throws RecordServicesException { list.getValidationFor(user.getId()).setValidationDate(TimeProvider.getLocalDate()); recordServices.add(list); } private DecommissioningList addListWithValidationRequestToBobAndChuck() throws RecordServicesException { String bob = records.getBob_userInAC().getId(); String chuck = records.getChuckNorris().getId(); DecommissioningList list = records.getList01() .addValidationRequest(bob, TimeProvider.getLocalDate()) .addValidationRequest(chuck, TimeProvider.getLocalDate()); recordServices.add(list); return list; } }