/* 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. */ package org.activiti.rest.service.api.identity; import java.util.ArrayList; import java.util.List; import org.activiti.engine.identity.User; import org.activiti.engine.test.Deployment; import org.activiti.rest.service.BaseSpringRestTestCase; import org.activiti.rest.service.api.RestUrls; import org.apache.http.HttpStatus; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; /** * @author Frederik Heremans */ public class UserCollectionResourceTest extends BaseSpringRestTestCase { /** * Test getting all users. */ @Deployment public void testGetUsers() throws Exception { List<User> savedUsers = new ArrayList<User>(); try { User user1 = identityService.newUser("testuser"); user1.setFirstName("Fred"); user1.setLastName("McDonald"); user1.setEmail("no-reply@activiti.org"); identityService.saveUser(user1); savedUsers.add(user1); User user2 = identityService.newUser("anotherUser"); user2.setFirstName("Tijs"); user2.setLastName("Barrez"); user2.setEmail("no-reply@alfresco.org"); identityService.saveUser(user2); savedUsers.add(user2); User user3 = identityService.createUserQuery().userId("kermit").singleResult(); assertNotNull(user3); // Test filter-less String url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION); assertResultsPresentInDataResponse(url, user1.getId(), user2.getId(), user3.getId()); // Test based on userId url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?id=testuser"; assertResultsPresentInDataResponse(url, user1.getId()); // Test based on firstName url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?firstName=Tijs"; assertResultsPresentInDataResponse(url, user2.getId()); // Test based on lastName url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?lastName=Barrez"; assertResultsPresentInDataResponse(url, user2.getId()); // Test based on email url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?email=no-reply@activiti.org"; assertResultsPresentInDataResponse(url, user1.getId()); // Test based on firstNameLike url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?firstNameLike=" + encode("%ij%"); assertResultsPresentInDataResponse(url, user2.getId()); // Test based on lastNameLike url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?lastNameLike=" + encode("%rez"); assertResultsPresentInDataResponse(url, user2.getId()); // Test based on emailLike url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?emailLike=" + encode("no-reply@activiti.org%"); assertResultsPresentInDataResponse(url, user1.getId()); // Test based on memberOfGroup url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?memberOfGroup=admin"; assertResultsPresentInDataResponse(url, user3.getId()); // Test based on potentialStarter String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey("simpleProcess") .singleResult().getId(); repositoryService.addCandidateStarterUser(processDefinitionId, "kermit"); url = RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION) + "?potentialStarter=" + processDefinitionId; assertResultsPresentInDataResponse(url, user3.getId()); } finally { // Delete user after test passes or fails if(!savedUsers.isEmpty()) { for(User user : savedUsers) { identityService.deleteUser(user.getId()); } } } } public void testCreateUser() throws Exception { try { ObjectNode requestNode = objectMapper.createObjectNode(); requestNode.put("id", "testuser"); requestNode.put("firstName", "Frederik"); requestNode.put("lastName", "Heremans"); requestNode.put("password", "test"); requestNode.put("email", "no-reply@activiti.org"); HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION, "testuser")); httpPost.setEntity(new StringEntity(requestNode.toString())); CloseableHttpResponse response = executeRequest(httpPost, HttpStatus.SC_CREATED); JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent()); closeResponse(response); assertNotNull(responseNode); assertEquals("testuser", responseNode.get("id").textValue()); assertEquals("Frederik", responseNode.get("firstName").textValue()); assertEquals("Heremans", responseNode.get("lastName").textValue()); assertEquals("no-reply@activiti.org", responseNode.get("email").textValue()); assertTrue(responseNode.get("url").textValue().endsWith(RestUrls.createRelativeResourceUrl(RestUrls.URL_USER, "testuser"))); assertNotNull(identityService.createUserQuery().userId("testuser").singleResult()); } finally { try { identityService.deleteUser("testuser"); } catch(Throwable t) { // Ignore, user might not have been created by test } } } public void testCreateUserExceptions() throws Exception { // Create without ID ObjectNode requestNode = objectMapper.createObjectNode(); requestNode.put("firstName", "Frederik"); requestNode.put("lastName", "Heremans"); requestNode.put("email", "no-reply@activiti.org"); HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + RestUrls.createRelativeResourceUrl(RestUrls.URL_USER_COLLECTION, "unexisting")); httpPost.setEntity(new StringEntity(requestNode.toString())); closeResponse(executeRequest(httpPost, HttpStatus.SC_BAD_REQUEST)); // Create when user already exists // Create without ID requestNode = objectMapper.createObjectNode(); requestNode.put("id", "kermit"); requestNode.put("firstName", "Frederik"); requestNode.put("lastName", "Heremans"); requestNode.put("email", "no-reply@activiti.org"); httpPost.setEntity(new StringEntity(requestNode.toString())); closeResponse(executeRequest(httpPost, HttpStatus.SC_CONFLICT)); } }