package com.constellio.app.ui.framework.data;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.ui.entities.AuthorizationVO;
import com.constellio.app.ui.framework.builders.AuthorizationToVOBuilder;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.security.Authorization;
import com.constellio.model.entities.security.Role;
import com.constellio.model.entities.security.global.AuthorizationDetails;
import com.constellio.model.services.records.RecordServicesImpl;
import com.constellio.model.services.security.AuthorizationsServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.MockedFactories;
public class AuthorizationVODataProviderTest extends ConstellioTest {
public static final String RECORD_ID_1 = "recordId1";
public static final String USER_1 = "user1";
public static final String USER_2 = "user2";
public static final String RECORD_ID_2 = "recordId2";
public static final String ROLE_1 = "role1";
public static final String ROLE_2 = "role2";
MockedFactories mockedFactories = new MockedFactories();
AuthorizationVODataProvider dataProvider;
@Mock AuthorizationToVOBuilder voBuilder;
@Mock AuthorizationVO authorizationVO1, authorizationVO2;
@Mock AuthorizationsServices authorizationsServices;
@Mock RecordServicesImpl recordServices;
@Mock Record record1, record2;
@Mock Authorization authorization1, authorization2;
@Mock
AuthorizationDetails xmlAuthorizationDetails1;
@Mock Role role;
List<Authorization> authorizations1;
List<String> principals1, records1, roles1;
@Before
public void setUp()
throws Exception {
authorizations1 = new ArrayList<>();
authorizations1.add(authorization1);
authorizations1.add(authorization2);
principals1 = new ArrayList<>();
principals1.add(USER_1);
principals1.add(USER_2);
roles1 = new ArrayList<>();
roles1.add(ROLE_1);
roles1.add(ROLE_2);
when(mockedFactories.getModelLayerFactory().newAuthorizationsServices()).thenReturn(authorizationsServices);
when(mockedFactories.getModelLayerFactory().newRecordServices()).thenReturn(recordServices);
when(authorization1.getGrantedToPrincipals()).thenReturn(principals1);
when(authorization1.getGrantedOnRecord()).thenReturn(RECORD_ID_1);
when(authorization1.getDetail()).thenReturn(xmlAuthorizationDetails1);
when(xmlAuthorizationDetails1.getRoles()).thenReturn(roles1);
when(authorizationsServices.getRecordAuthorizations(record1)).thenReturn(authorizations1);
when(record1.getId()).thenReturn(RECORD_ID_1);
when(record2.getId()).thenReturn(RECORD_ID_2);
when(recordServices.getDocumentById(RECORD_ID_1)).thenReturn(record1);
when(voBuilder.build(authorization1)).thenReturn(authorizationVO1);
when(voBuilder.build(authorization2)).thenReturn(authorizationVO2);
dataProvider = spy(new AuthorizationVODataProvider(voBuilder, mockedFactories.getModelLayerFactory(), record1.getId()));
}
@Test
public void givenDataProviderAndRecordWhenNewInstanceThenListPermissionVOs()
throws Exception {
verify(recordServices).getDocumentById(RECORD_ID_1);
verify(authorizationsServices).getRecordAuthorizations(record1);
verify(voBuilder).build(authorization1);
verify(voBuilder).build(authorization2);
assertThat(dataProvider.authorizationVOs).hasSize(2);
assertThat(dataProvider.authorizationVOs).containsOnly(authorizationVO1, authorizationVO2);
}
@Test
public void whenListThenReturnIndexes()
throws Exception {
List<Integer> indexes = dataProvider.list();
assertThat(indexes).hasSize(2);
assertThat(indexes.get(0)).isEqualTo(0);
assertThat(indexes.get(1)).isEqualTo(1);
}
@Test
public void whenGetPermissionVOByIndexThenOk()
throws Exception {
AuthorizationVO retrievedAuthorizationVO1 = dataProvider.getAuthorizationVO(0);
AuthorizationVO retrievedAuthorizationVO2 = dataProvider.getAuthorizationVO(1);
assertThat(retrievedAuthorizationVO1).isEqualTo(authorizationVO1);
assertThat(retrievedAuthorizationVO2).isEqualTo(authorizationVO2);
}
@Test
public void whenSizeThenOk()
throws Exception {
assertThat(dataProvider.size()).isEqualTo(2);
}
}