package com.constellio.model.services.users; import static com.constellio.model.services.users.UserCredentialsWriter.DN; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom2.Document; import org.joda.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.data.utils.Factory; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.entities.security.global.UserCredentialStatus; import com.constellio.model.entities.security.global.XmlUserCredential; import com.constellio.model.services.encrypt.EncryptionServices; import com.constellio.sdk.tests.ConstellioTest; public class UserCredentialsWriterTest extends ConstellioTest { @Mock Factory<EncryptionServices> encryptionServicesFactory; private static final String COLLECTIONS = "collections"; private static final String TOKENS = "tokens"; private static final String GLOBAL_GROUP = "globalGroup"; private static final String GLOBAL_GROUPS = "globalGroups"; private static final String EMAIL = "email"; private static final String LAST_NAME = "lastName"; private static final String FIRST_NAME = "firstName"; private static final String USERNAME = "username"; private static final String STATUS = "status"; private static final String DOMAIN = "domain"; private static final String MS_EXCH_DELEGATE_LIST_BL = "msExchDelegateListBL"; UserCredentialsWriter writer; Document document; UserCredential chuckUserCredential; UserCredential dakotaUserCredential; LocalDateTime endDate; Map<String, LocalDateTime> tokens; List<String> msExchDelegateListBL = new ArrayList<>(); @Before public void setup() throws Exception { EncryptionServices encryptionServices = FakeEncryptionServicesUtils.create(); when(encryptionServicesFactory.get()).thenReturn(encryptionServices); document = new Document(); writer = new UserCredentialsWriter(document, encryptionServicesFactory); writer.createEmptyUserCredentials(); msExchDelegateListBL.add("msExchDelegateListBL1"); msExchDelegateListBL.add("msExchDelegateListBL2"); tokens = new HashMap<String, LocalDateTime>(); endDate = new LocalDateTime(2014, 11, 04, 10, 30); tokens.put("token1", endDate); chuckUserCredential = new XmlUserCredential("chuck", "Chuck", "Norris", "chuck.norris@gmail.com", "serviceKeyChuck", false, Arrays.asList("group1"), Arrays.asList(zeCollection), tokens, UserCredentialStatus.ACTIVE, "", msExchDelegateListBL, "dnChuck"); dakotaUserCredential = new XmlUserCredential("dakota", "Dakota", "Lindien", "dakota.lindien@gmail.com", Arrays.asList("group1"), Arrays.asList(zeCollection, "collection1"), UserCredentialStatus.ACTIVE, "", msExchDelegateListBL, "dakotaDN"); } @Test public void whenCreateEmptyUserCredentialsThenItIsCreated() throws Exception { assertThat(document.getRootElement().getChildren()).isEmpty(); } @Test public void whenAddUserCredentialThenItIsAdded() throws Exception { writer.addUpdate(chuckUserCredential); assertThat(document.getRootElement().getChildren()).hasSize(1); assertThat(document.getRootElement().getChildren().get(0).getAttributeValue(USERNAME)).isEqualTo( chuckUserCredential.getUsername()); assertThat(document.getRootElement().getChildren().get(0).getChild(FIRST_NAME).getText()).isEqualTo( chuckUserCredential.getFirstName()); assertThat(document.getRootElement().getChildren().get(0).getChild(LAST_NAME).getText()).isEqualTo( chuckUserCredential.getLastName()); assertThat(document.getRootElement().getChildren().get(0).getChild(EMAIL).getText()).isEqualTo( chuckUserCredential.getEmail()); assertThat(document.getRootElement().getChildren().get(0).getChild(GLOBAL_GROUPS).getChild(GLOBAL_GROUP).getText()) .isEqualTo(chuckUserCredential.getGlobalGroups().get(0)); assertThat(document.getRootElement().getChildren().get(0).getChild(COLLECTIONS).getChildren().get(0).getText()).isEqualTo( chuckUserCredential.getCollections().get(0)); assertThat(document.getRootElement().getChildren().get(0).getChild(STATUS).getText()).isEqualTo( String.valueOf(chuckUserCredential.getStatus().getCode())); assertThat(document.getRootElement().getChildren().get(0).getChild(DOMAIN).getText()).isEqualTo( chuckUserCredential.getDomain()); assertThat(document.getRootElement().getChildren().get(0).getChild(TOKENS).getChildren().get(0).getChildren().get(0) .getText()).isEqualTo( "$token1"); assertThat(document.getRootElement().getChildren().get(0).getChild(TOKENS).getChildren().get(0).getChildren().get(1) .getText()).isEqualTo( endDate.toString()); assertThat( document.getRootElement().getChildren().get(0).getChild(MS_EXCH_DELEGATE_LIST_BL).getChildren().get(0).getText()) .isEqualTo( chuckUserCredential.getMsExchDelegateListBL().get(0)); } @Test public void givenUserCredentialWhenUpdateUserCredentialThenItIsUpdated() throws Exception { writer.addUpdate(chuckUserCredential); chuckUserCredential = new XmlUserCredential("chuck", "Chuck", "Norris", "chuck.norris@gmail.com", Arrays.asList("group1"), Arrays.asList(zeCollection, "collection1"), UserCredentialStatus.ACTIVE, "", msExchDelegateListBL, "chuckDN"); writer.addUpdate(chuckUserCredential); assertThat(document.getRootElement().getChildren()).hasSize(1); assertThat(document.getRootElement().getChildren().get(0).getAttributeValue(USERNAME)).isEqualTo( chuckUserCredential.getUsername()); assertThat(document.getRootElement().getChildren().get(0).getChild(COLLECTIONS).getChildren().get(0).getText()).isEqualTo( chuckUserCredential.getCollections().get(0)); assertThat(document.getRootElement().getChildren().get(0).getChild(COLLECTIONS).getChildren().get(1).getText()).isEqualTo( chuckUserCredential.getCollections().get(1)); } @Test public void givenUserWhenRemoveCollectionThenItIsRemoved() throws Exception { writer.addUpdate(chuckUserCredential); writer.addUpdate(dakotaUserCredential); writer.removeCollection(zeCollection); assertThat(document.getRootElement().getChildren().get(0).getChild(COLLECTIONS).getChildren()).isEmpty(); assertThat(document.getRootElement().getChildren().get(1).getChild(COLLECTIONS).getChildren().get(0).getText()).isEqualTo( "collection1"); } @Test public void givenUserWhenRemoveTokenThenItIsRemoved() throws Exception { writer.addUpdate(chuckUserCredential); writer.addUpdate(dakotaUserCredential); assertThat(document.getRootElement().getChildren().get(0).getChild(TOKENS).getChildren()).isNotEmpty(); writer.removeToken("token1"); assertThat(document.getRootElement().getChildren().get(0).getChild(TOKENS).getChildren()).isEmpty(); } @Test public void givenUserWhenRemoveHimFromCollectionThenHeIsRemoved() throws Exception { writer.addUpdate(chuckUserCredential); writer.addUpdate(dakotaUserCredential); writer.removeUserFromCollection(chuckUserCredential, zeCollection); assertThat(document.getRootElement().getChildren().get(0).getChild(COLLECTIONS).getChildren()).isEmpty(); assertThat(document.getRootElement().getChildren().get(1).getChild(COLLECTIONS).getChildren().get(0).getText()).isEqualTo( zeCollection); assertThat(document.getRootElement().getChildren().get(1).getChild(COLLECTIONS).getChildren().get(1).getText()).isEqualTo( "collection1"); } @Test public void givenUsersWithGroupWhenRemoveGroupThenItIsRemoved() throws Exception { chuckUserCredential = new XmlUserCredential("chuck", "Chuck", "Norris", "chuck.norris@gmail.com", Arrays.asList("group1", "group2"), Arrays.asList(zeCollection), UserCredentialStatus.ACTIVE, "", msExchDelegateListBL, "chuckDN"); dakotaUserCredential = new XmlUserCredential("dakota", "Dakota", "Lindien", "dakota.lindien@gmail.com", Arrays.asList( "group1", "group2"), Arrays.asList(zeCollection, "collection1"), UserCredentialStatus.ACTIVE, "", msExchDelegateListBL, "dakotaDN"); writer.addUpdate(chuckUserCredential); writer.addUpdate(dakotaUserCredential); writer.removeGroup("group1"); assertThat(document.getRootElement().getChildren().get(0).getChild(GLOBAL_GROUPS).getChildren()).hasSize(1); assertThat(document.getRootElement().getChildren().get(0).getChild(GLOBAL_GROUPS).getChild(GLOBAL_GROUP).getText()) .isEqualTo("group2"); assertThat(document.getRootElement().getChildren().get(1).getChild(GLOBAL_GROUPS).getChildren()).hasSize(1); assertThat(document.getRootElement().getChildren().get(1).getChild(GLOBAL_GROUPS).getChild(GLOBAL_GROUP).getText()) .isEqualTo("group2"); assertThat(document.getRootElement().getChildren().get(1).getChild(DN).getText()) .isEqualTo("dakotaDN"); } }