package com.constellio.app.ui.pages.user;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import com.constellio.sdk.tests.MockedNavigation;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.ui.application.CoreViews;
import com.constellio.app.ui.entities.UserCredentialVO;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.security.global.UserCredential;
import com.constellio.model.services.users.UserServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.FakeSessionContext;
public class AddEditUserCredentialPresenterAcceptTest extends ConstellioTest {
public static final String HEROES = "heroes";
public static final String DAKOTA = "dakota";
@Mock AddEditUserCredentialView userCredentialView;
MockedNavigation navigator;
UserServices userServices;
UserCredential dakotaCredential, newUserCredential;
UserCredentialVO dakotaCredentialVO, newUserCredentialVO;
AddEditUserCredentialPresenter presenter;
SessionContext sessionContext;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withAllTestUsers(),
withCollection("otherCollection")
);
navigator = new MockedNavigation();
sessionContext = FakeSessionContext.adminInCollection(zeCollection);
sessionContext.setCurrentLocale(Locale.FRENCH);
userServices = getModelLayerFactory().newUserServices();
when(userCredentialView.getSessionContext()).thenReturn(sessionContext);
when(userCredentialView.getCollection()).thenReturn(zeCollection);
when(userCredentialView.getConstellioFactories()).thenReturn(getConstellioFactories());
when(userCredentialView.navigate()).thenReturn(navigator);
presenter = spy(new AddEditUserCredentialPresenter(userCredentialView));
doNothing().when(presenter).showErrorMessageView(anyString());
givenBreadCrumbAndParameters();
}
private void givenBreadCrumbAndParameters() {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put("username", DAKOTA);
presenter.setParamsMap(paramsMap);
presenter.setBreadCrumb("url1/url2/url3");
}
@Test
public void givenUsernameWhenGetUserCredentialVOThenReturnVO()
throws Exception {
UserCredentialVO userCredentialVO = presenter.getUserCredentialVO(DAKOTA);
assertThat(userCredentialVO.getUsername()).isEqualTo(DAKOTA);
}
@Test
public void givenNoUserNameWhenGetUserCredentialVOThenNewUserCredentialVO()
throws Exception {
UserCredentialVO userCredentialVO = presenter.getUserCredentialVO("");
assertThat(userCredentialVO).isNotNull();
assertThat(userCredentialVO.getUsername()).isNull();
}
@Test
public void givenEditActionWhenSaveButtonClickedThenSaveChanges()
throws Exception {
dakotaCredentialVO = presenter.getUserCredentialVO(DAKOTA);
dakotaCredentialVO.setFirstName("Dakota1");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
dakotaCredentialVO.setCollections(collectionsSet);
dakotaCredentialVO.setEmail("dakota1@constellio.com");
dakotaCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
dakotaCredentialVO.setLastName("Lindien1");
presenter.saveButtonClicked(dakotaCredentialVO);
dakotaCredential = userServices.getUserCredential(DAKOTA);
verify(userCredentialView.navigate().to()).url("url3/url1/url2/" + URLEncoder.encode("username=dakota", "UTF-8"));
assertThat(dakotaCredential.getFirstName()).isEqualTo("Dakota1");
assertThat(dakotaCredential.getGlobalGroups()).containsOnly(HEROES);
assertThat(dakotaCredential.getCollections()).containsOnly(zeCollection, "otherCollection");
assertThat(dakotaCredential.getLastName()).isEqualTo("Lindien1");
assertThat(dakotaCredential.getEmail()).isEqualTo("dakota1@constellio.com");
}
@Test
public void givenEditActionAndChangedUsernameWhenSaveButtonClickedThenDoNothing()
throws Exception {
dakotaCredentialVO = presenter.getUserCredentialVO(DAKOTA);
dakotaCredentialVO.setUsername("dakota1");
dakotaCredentialVO.setFirstName("Dakota1");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
dakotaCredentialVO.setCollections(collectionsSet);
dakotaCredentialVO.setEmail("dakota1@constellio.com");
dakotaCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
dakotaCredentialVO.setLastName("Lindien1");
presenter.saveButtonClicked(dakotaCredentialVO);
dakotaCredential = userServices.getUserCredential(DAKOTA);
verify(userCredentialView, never()).navigate();
assertThat(dakotaCredential.getFirstName()).isEqualTo("Dakota");
assertThat(dakotaCredential.getGlobalGroups()).containsOnly(HEROES);
assertThat(dakotaCredential.getCollections()).containsOnly(zeCollection);
assertThat(dakotaCredential.getLastName()).isEqualTo("L'Indien");
assertThat(dakotaCredential.getEmail()).isEqualTo("dakota@doculibre.com");
}
@Test
public void givenAddActionWhenSaveButtonClickedThenSaveChanges()
throws Exception {
newUserCredentialVO = presenter.getUserCredentialVO("");
newUserCredentialVO.setUsername("user");
newUserCredentialVO.setFirstName("User");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
newUserCredentialVO.setCollections(collectionsSet);
newUserCredentialVO.setEmail("user@constellio.com");
newUserCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
newUserCredentialVO.setLastName("lastName");
newUserCredentialVO.setPassword("password");
newUserCredentialVO.setConfirmPassword("password");
presenter.saveButtonClicked(newUserCredentialVO);
verify(userCredentialView.navigate().to()).url("url3/url1/url2/" + URLEncoder.encode("username=user", "UTF-8"));
newUserCredential = userServices.getUserCredential("user");
assertThat(newUserCredential.getFirstName()).isEqualTo("User");
assertThat(newUserCredential.getGlobalGroups()).containsOnly(HEROES);
assertThat(newUserCredential.getCollections()).containsOnly(zeCollection, "otherCollection");
assertThat(newUserCredential.getLastName()).isEqualTo("lastName");
assertThat(newUserCredential.getEmail()).isEqualTo("user@constellio.com");
}
@Test
public void givenAddActionAndDifferentConfirmPasswordWhenSaveButtonClickedThenDoNotSaveChanges()
throws Exception {
newUserCredentialVO = presenter.getUserCredentialVO("");
newUserCredentialVO.setFirstName("User");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
newUserCredentialVO.setCollections(collectionsSet);
newUserCredentialVO.setEmail("user@constellio.com");
newUserCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
newUserCredentialVO.setLastName("lastName");
newUserCredentialVO.setPassword("password");
newUserCredentialVO.setConfirmPassword("password1");
presenter.saveButtonClicked(newUserCredentialVO);
verify(userCredentialView, never()).navigate();
assertThat(userServices.getUserCredential("user")).isNull();
}
@Test
public void givenAddActionAndExistingUsernameWhenSaveButtonClickedThenDoNotSaveChanges()
throws Exception {
newUserCredentialVO = presenter.getUserCredentialVO("");
newUserCredentialVO.setUsername("bob");
newUserCredentialVO.setFirstName("User");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
newUserCredentialVO.setCollections(collectionsSet);
newUserCredentialVO.setEmail("user@constellio.com");
newUserCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
newUserCredentialVO.setLastName("lastName");
newUserCredentialVO.setPassword("password");
newUserCredentialVO.setConfirmPassword("password");
presenter.saveButtonClicked(newUserCredentialVO);
verify(userCredentialView, never()).navigate();
assertThat(userServices.getUserCredential("user")).isNull();
}
@Test
public void givenSaveButtonIsClickedThenPersonalEmailsIsSaved()
throws Exception {
newUserCredentialVO = presenter.getUserCredentialVO("");
newUserCredentialVO.setUsername("user");
newUserCredentialVO.setFirstName("User");
Set collectionsSet = new HashSet<>();
collectionsSet.add(zeCollection);
collectionsSet.add("otherCollection");
newUserCredentialVO.setCollections(collectionsSet);
newUserCredentialVO.setEmail("user@constellio.com");
newUserCredentialVO.setGlobalGroups(Arrays.asList(HEROES));
newUserCredentialVO.setLastName("lastName");
newUserCredentialVO.setPassword("password");
newUserCredentialVO.setConfirmPassword("password");
newUserCredentialVO.setPersonalEmails("admin@gmail.com\nadmin@hotmail.com");
presenter.saveButtonClicked(newUserCredentialVO);
verify(userCredentialView.navigate().to()).url("url3/url1/url2/" + URLEncoder.encode("username=user", "UTF-8"));
newUserCredential = userServices.getUserCredential("user");
assertThat(newUserCredential.getFirstName()).isEqualTo("User");
assertThat(newUserCredential.getGlobalGroups()).containsOnly(HEROES);
assertThat(newUserCredential.getCollections()).containsOnly(zeCollection, "otherCollection");
assertThat(newUserCredential.getLastName()).isEqualTo("lastName");
assertThat(newUserCredential.getEmail()).isEqualTo("user@constellio.com");
assertThat(newUserCredential.getPersonalEmails()).isEqualTo(Arrays.asList("admin@gmail.com", "admin@hotmail.com"));
}
@Test
public void whenCancelButtonClickedThenNavigateToBackPage()
throws Exception {
presenter.cancelButtonClicked();
verify(userCredentialView.navigate().to()).url("url3/url1/url2/" + URLEncoder.encode("username=dakota",
"UTF-8"));
}
}