package com.constellio.app.ui.pages.management.authorizations; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentCaptor.forClass; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.ui.entities.AuthorizationVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.AuthorizationToVOBuilder; import com.constellio.app.ui.pages.base.PresenterService; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.Authorization; import com.constellio.model.entities.security.global.AuthorizationDeleteRequest; import com.constellio.model.entities.security.global.AuthorizationDetails; import com.constellio.model.services.security.AuthorizationsServices; import com.constellio.model.services.taxonomies.TaxonomiesManager; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedFactories; import com.constellio.sdk.tests.SDKViewNavigation; public class ListContentAccessAuthorizationsPresenterTest extends ConstellioTest { public static final String ZE_SECURED_OBJECT = "zeObject"; public static final String ZENOTHER_SECURED_OBJECT = "zenotherObject"; public static final String ZE_PRINCIPAL = "zePrincipal"; @Mock AuthorizationsServices authorizationsServices; @Mock PresenterService presenterService; @Mock ListContentAccessAuthorizationsView view; SDKViewNavigation sdkViewNavigation; @Mock User user; @Mock RecordVO object; @Mock AuthorizationVO authorizationVO; @Mock AuthorizationVO inherited1; @Mock AuthorizationVO inherited2; @Mock AuthorizationVO own1; @Mock AuthorizationVO own2; @Mock Authorization authorization; @Mock AuthorizationDetails details; MockedFactories factories = new MockedFactories(); ListAuthorizationsPresenter presenter; @Before public void setUp() throws Exception { when(authorizationVO.getAuthId()).thenReturn("zeAuth"); when(details.getId()).thenReturn("zeAuth"); when(view.getConstellioFactories()).thenReturn(factories.getConstellioFactories()); SessionContext context = FakeSessionContext.gandalfInCollection(zeCollection); when(view.getSessionContext()).thenReturn(context); when(view.getCollection()).thenReturn(zeCollection); sdkViewNavigation = new SDKViewNavigation(view); when(factories.getAppLayerFactory().newPresenterService()).thenReturn(presenterService); when(presenterService.getRecordVO(ZE_SECURED_OBJECT, VIEW_MODE.DISPLAY, context)).thenReturn(object); when(presenterService.getCurrentUser(isA(SessionContext.class))).thenReturn(user); when(factories.getModelLayerFactory().newAuthorizationsServices()).thenReturn(authorizationsServices); presenter = spy(new ListContentAccessAuthorizationsPresenter(view).forRequestParams(ZE_SECURED_OBJECT)); } @Test public void givenIdThenReturnTheCorrectObject() { assertThat(presenter.getRecordVO()).isEqualTo(object); } @Test public void givenBackButtonPressedWhenObjectIsFolderWithDefaultSchemaThenNavigateToFolder() { presenter.backButtonClicked(Folder.DEFAULT_SCHEMA); } @Test public void givenBackButtonPressedWhenObjectIsFolderWithCustomSchemaThenNavigateToFolder() { presenter.backButtonClicked(Folder.SCHEMA_TYPE + "_custom"); } @Test public void givenBackButtonPressedWhenObjectIsTaxonomyConceptThenNavigateToTaxonomyManagement() { TaxonomiesManager manager = mock(TaxonomiesManager.class, "TaxonomiesManager"); when(factories.getModelLayerFactory().getTaxonomiesManager()).thenReturn(manager); Taxonomy taxonomy = mock(Taxonomy.class, "Taxonomy"); when(manager.getPrincipalTaxonomy(zeCollection)).thenReturn(taxonomy); when(taxonomy.getCode()).thenReturn("taxo"); presenter.backButtonClicked(AdministrativeUnit.DEFAULT_SCHEMA); verify(sdkViewNavigation.coreViews, times(1)).taxonomyManagement("taxo", ZE_SECURED_OBJECT); } @Test public void givenAuthorizationDeletedThenRemoveTheAuthorizationAndRefreshTheView() { ArgumentCaptor<AuthorizationDeleteRequest> requestArgumentCaptor = forClass(AuthorizationDeleteRequest.class); givenAuthorizationWithId(aString()); presenter.deleteButtonClicked(authorizationVO); verify(authorizationsServices, times(1)).execute(requestArgumentCaptor.capture()); verify(view, times(1)).removeAuthorization(authorizationVO); assertThat(requestArgumentCaptor.getValue().getAuthId()).isEqualTo("zeAuth"); assertThat(requestArgumentCaptor.getValue().getExecutedBy()).isEqualTo(user); } private void givenObjectWithTwoInheritedAndTwoOwnAuthorizations() { Authorization authorization1 = mock(Authorization.class, "Authorization1"); Authorization authorization2 = mock(Authorization.class, "Authorization2"); Authorization authorization3 = mock(Authorization.class, "Authorization3"); Authorization authorization4 = mock(Authorization.class, "Authorization4"); Authorization authorization5 = mock(Authorization.class, "Authorization5"); Authorization authorization6 = mock(Authorization.class, "Authorization6"); when(authorization1.getGrantedOnRecord()).thenReturn(ZE_SECURED_OBJECT); when(authorization1.getGrantedToPrincipals()).thenReturn(Arrays.asList(ZE_PRINCIPAL)); when(authorization2.getGrantedOnRecord()).thenReturn(ZENOTHER_SECURED_OBJECT); when(authorization2.getGrantedToPrincipals()).thenReturn(Arrays.asList(ZE_PRINCIPAL)); when(authorization3.getGrantedOnRecord()).thenReturn(ZE_SECURED_OBJECT); when(authorization3.getGrantedToPrincipals()).thenReturn(Arrays.asList(ZE_PRINCIPAL)); when(authorization4.getGrantedOnRecord()).thenReturn(ZENOTHER_SECURED_OBJECT); when(authorization4.getGrantedToPrincipals()).thenReturn(Arrays.asList(ZE_PRINCIPAL)); when(authorization5.getGrantedOnRecord()).thenReturn(ZE_SECURED_OBJECT); when(authorization5.getGrantedToPrincipals()).thenReturn(new ArrayList<String>()); when(authorization6.getGrantedOnRecord()).thenReturn(ZENOTHER_SECURED_OBJECT); when(authorization6.getGrantedToPrincipals()).thenReturn(new ArrayList<String>()); Record record = mock(Record.class, "Record"); when(presenterService.getRecord(ZE_SECURED_OBJECT)).thenReturn(record); when(authorizationsServices.getRecordAuthorizations(record)).thenReturn( Arrays.asList(authorization1, authorization2, authorization3, authorization4, authorization5, authorization6)); AuthorizationToVOBuilder builder = mock(AuthorizationToVOBuilder.class, "AuthorizationToVOBuilder"); when(builder.build(authorization1)).thenReturn(own1); when(builder.build(authorization2)).thenReturn(inherited1); when(builder.build(authorization3)).thenReturn(own2); when(builder.build(authorization4)).thenReturn(inherited2); doReturn(builder).when(presenter).newAuthorizationToVOBuilder(); } private void givenAuthorizationWithId(String authId) { when(authorizationVO.getAuthId()).thenReturn(authId); when(authorizationsServices.getAuthorization(zeCollection, authId)).thenReturn(authorization); when(authorization.getDetail()).thenReturn(details); } }