/*
* (C) Copyright 2014-2015 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
*/
package org.nuxeo.ecm.user.invite;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.nuxeo.ecm.user.invite.UserRegistrationConfiguration.DEFAULT_CONFIGURATION_NAME;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.ecm.platform.usermanager.exceptions.UserAlreadyExistsException;
/**
* @author <a href="mailto:akervern@nuxeo.com">Arnaud Kervern</a>
*/
public class TestUserRegistration extends AbstractUserRegistration {
@Before
public void init() {
initializeRegistrations();
}
@Test
public void testTestContribution() {
DocumentModel doc = session.createDocumentModel("TestRegistration");
assertTrue(doc.hasFacet("UserInvitation"));
assertNotNull(userRegistrationService);
UserRegistrationConfiguration config = userRegistrationService.getConfiguration();
assertEquals("Workspace", config.getContainerDocType());
}
@Test
public void testBasicUserRegistration() {
UserRegistrationConfiguration configuration = ((UserInvitationComponent) userRegistrationService).configurations.get(DEFAULT_CONFIGURATION_NAME);
// User info
DocumentModel userInfo = session.createDocumentModel(configuration.getRequestDocType());
userInfo.setPropertyValue("userinfo:login", "jolivier");
userInfo.setPropertyValue("userinfo:firstName", "jolivier");
userInfo.setPropertyValue("userinfo:lastName", "jolivier");
userInfo.setPropertyValue("userinfo:email", "oolivier@dummy.com");
userInfo.setPropertyValue("userinfo:tenantId", "tenant-a");
DocumentModelList users = userManager.searchUsers("jolivier");
assertEquals(0, users.size());
String requestId = userRegistrationService.submitRegistrationRequest(userInfo,
new HashMap<String, Serializable>(), UserInvitationService.ValidationMethod.NONE, true);
userRegistrationService.validateRegistration(requestId, new HashMap<String, Serializable>());
users = userManager.searchUsers("jolivier");
DocumentModel jolivier = users.get(0);
assertEquals(1, userManager.searchUsers("jolivier").size());
assertEquals("tenant-a", jolivier.getPropertyValue("tenantId"));
}
@Test
public void testBasicUserRegistrationWithLoginChanged() {
UserRegistrationConfiguration configuration = ((UserInvitationComponent) userRegistrationService).configurations.get(DEFAULT_CONFIGURATION_NAME);
// User info
DocumentModel userInfo = session.createDocumentModel(configuration.getRequestDocType());
String templogin = "templogin";
String newUser = "newUser";
userInfo.setPropertyValue("userinfo:login", templogin);
userInfo.setPropertyValue("userinfo:firstName", "John");
userInfo.setPropertyValue("userinfo:lastName", "Olivier");
userInfo.setPropertyValue("userinfo:email", templogin + "@dummy.com");
assertEquals(0, userManager.searchUsers(templogin).size());
assertEquals(0, userManager.searchUsers(newUser).size());
String requestId = userRegistrationService.submitRegistrationRequest(userInfo,
new HashMap<String, Serializable>(), UserInvitationService.ValidationMethod.NONE, true);
Map<String, Serializable> additionnalInfos = new HashMap<>();
additionnalInfos.put("userinfo:login", newUser);
userRegistrationService.validateRegistration(requestId, additionnalInfos);
assertEquals(0, userManager.searchUsers(templogin).size());
assertEquals(1, userManager.searchUsers(newUser).size());
}
@Test(expected = UserAlreadyExistsException.class)
public void testMultipleRegistrationWithSameEmail() {
UserRegistrationConfiguration configuration = ((UserInvitationComponent) userRegistrationService).configurations.get(DEFAULT_CONFIGURATION_NAME);
// User info
DocumentModel userInfo = session.createDocumentModel(configuration.getRequestDocType());
String templogin = "templogin";
String newUser = "newUser";
userInfo.setPropertyValue("userinfo:login", templogin);
userInfo.setPropertyValue("userinfo:firstName", "John");
userInfo.setPropertyValue("userinfo:lastName", "Olivier");
userInfo.setPropertyValue("userinfo:email", templogin + "@dummy.com");
String requestId = userRegistrationService.submitRegistrationRequest(userInfo,
new HashMap<String, Serializable>(0), UserInvitationService.ValidationMethod.NONE, true);
Map<String, Serializable> additionnalInfos = new HashMap<>();
additionnalInfos.put("userinfo:login", newUser);
userRegistrationService.validateRegistration(requestId, additionnalInfos);
userInfo.setPropertyValue("userinfo:login", templogin + '1');
// Must throw a UserAlreadyExistsException
userRegistrationService.submitRegistrationRequest(userInfo, new HashMap<String, Serializable>(0),
UserInvitationService.ValidationMethod.NONE, true);
}
}