/**
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* 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.jbpm.services.task.wih.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.drools.core.process.instance.WorkItem;
import org.drools.core.process.instance.impl.WorkItemImpl;
import org.jbpm.test.util.AbstractBaseTest;
import org.junit.Before;
import org.junit.Test;
import org.kie.api.task.model.Group;
import org.kie.api.task.model.OrganizationalEntity;
import org.kie.api.task.model.PeopleAssignments;
import org.kie.api.task.model.Task;
import org.kie.api.task.model.User;
import org.kie.internal.task.api.TaskModelProvider;
import org.kie.internal.task.api.model.InternalPeopleAssignments;
import org.kie.internal.task.api.model.InternalTask;
import org.kie.internal.task.api.model.InternalTaskData;
public class PeopleAssignmentHelperTest extends AbstractBaseTest {
private PeopleAssignmentHelper peopleAssignmentHelper;
@Before
public void setup() {
peopleAssignmentHelper = new PeopleAssignmentHelper();
}
@Test
public void testProcessPeopleAssignments() {
List<OrganizationalEntity> organizationalEntities = new ArrayList<OrganizationalEntity>();
String ids = "espiegelberg, drbug ";
assertTrue(organizationalEntities.isEmpty());
peopleAssignmentHelper.processPeopleAssignments(ids, organizationalEntities, true);
assertTrue(organizationalEntities.size() == 2);
assertTrue(organizationalEntities.contains(createUser("drbug")));
assertTrue(organizationalEntities.contains(createUser("espiegelberg")));
ids = null;
organizationalEntities = new ArrayList<OrganizationalEntity>();
assertTrue(organizationalEntities.isEmpty());
peopleAssignmentHelper.processPeopleAssignments(ids, organizationalEntities, true);
assertTrue(organizationalEntities.isEmpty());
ids = " ";
organizationalEntities = new ArrayList<OrganizationalEntity>();
assertTrue(organizationalEntities.isEmpty());
peopleAssignmentHelper.processPeopleAssignments(ids, organizationalEntities, true);
assertTrue(organizationalEntities.isEmpty());
ids = "Software Developer";
organizationalEntities = new ArrayList<OrganizationalEntity>();
assertTrue(organizationalEntities.isEmpty());
peopleAssignmentHelper.processPeopleAssignments(ids, organizationalEntities, false);
assertTrue(organizationalEntities.size() == 1);
assertTrue(organizationalEntities.contains(createGroup("Software Developer")));
// Test that a duplicate is not added; only 1 of the 2 passed in should be added
ids = "Software Developer,Project Manager";
peopleAssignmentHelper.processPeopleAssignments(ids, organizationalEntities, false);
assertTrue(organizationalEntities.size() == 2);
assertTrue(organizationalEntities.contains(createGroup("Software Developer")));
assertTrue(organizationalEntities.contains(createGroup("Project Manager")));
}
@Test
public void testAssignActors() {
String actorId = "espiegelberg";
Task task = TaskModelProvider.getFactory().newTask();
InternalTaskData taskData = (InternalTaskData) TaskModelProvider.getFactory().newTaskData();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId);
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
OrganizationalEntity organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals(actorId, organizationalEntity1.getId());
assertEquals(actorId, taskData.getCreatedBy().getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + ", drbug ");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(2, peopleAssignments.getPotentialOwners().size());
organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertEquals(actorId, organizationalEntity1.getId());
assertEquals(actorId, taskData.getCreatedBy().getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertEquals("drbug", organizationalEntity2.getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, "");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(0, peopleAssignments.getPotentialOwners().size());
}
@Test
public void testAssignActorsWithCustomSeparatorViaSysProp() {
System.setProperty("org.jbpm.ht.user.separator", ";");
peopleAssignmentHelper = new PeopleAssignmentHelper();
String actorId = "user1;user2";
Task task = TaskModelProvider.getFactory().newTask();
InternalTaskData taskData = (InternalTaskData) TaskModelProvider.getFactory().newTaskData();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId);
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
OrganizationalEntity organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals("user1", organizationalEntity1.getId());
assertEquals("user1", taskData.getCreatedBy().getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertTrue(organizationalEntity2 instanceof User);
assertEquals("user2", organizationalEntity2.getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + "; drbug ");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(3, peopleAssignments.getPotentialOwners().size());
organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertEquals("user1", organizationalEntity1.getId());
assertEquals("user1", taskData.getCreatedBy().getId());
organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertTrue(organizationalEntity2 instanceof User);
assertEquals("user2", organizationalEntity2.getId());
OrganizationalEntity organizationalEntity3 = peopleAssignments.getPotentialOwners().get(2);
assertEquals("drbug", organizationalEntity3.getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, "");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(0, peopleAssignments.getPotentialOwners().size());
System.clearProperty("org.jbpm.ht.user.separator");
}
@Test
public void testAssignActorsWithCustomSeparator() {
peopleAssignmentHelper = new PeopleAssignmentHelper(":");
String actorId = "user1:user2";
Task task = TaskModelProvider.getFactory().newTask();
InternalTaskData taskData = (InternalTaskData) TaskModelProvider.getFactory().newTaskData();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId);
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
OrganizationalEntity organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals("user1", organizationalEntity1.getId());
assertEquals("user1", taskData.getCreatedBy().getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertTrue(organizationalEntity2 instanceof User);
assertEquals("user2", organizationalEntity2.getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + ": drbug ");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(3, peopleAssignments.getPotentialOwners().size());
organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertEquals("user1", organizationalEntity1.getId());
assertEquals("user1", taskData.getCreatedBy().getId());
organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertTrue(organizationalEntity2 instanceof User);
assertEquals("user2", organizationalEntity2.getId());
OrganizationalEntity organizationalEntity3 = peopleAssignments.getPotentialOwners().get(2);
assertEquals("drbug", organizationalEntity3.getId());
workItem = new WorkItemImpl();
peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, "");
peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData);
assertEquals(0, peopleAssignments.getPotentialOwners().size());
}
@Test
public void testAssignBusinessAdministrators() {
String businessAdministratorId = "espiegelberg";
Task task = TaskModelProvider.getFactory().newTask();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_ID, businessAdministratorId);
peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments);
assertEquals(3, peopleAssignments.getBusinessAdministrators().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals("Administrator", organizationalEntity1.getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1);
assertTrue(organizationalEntity2 instanceof Group);
assertEquals("Administrators", organizationalEntity2.getId());
OrganizationalEntity organizationalEntity3 = peopleAssignments.getBusinessAdministrators().get(2);
assertTrue(organizationalEntity3 instanceof User);
assertEquals(businessAdministratorId, organizationalEntity3.getId());
}
@Test
public void testAssignBusinessAdministratorGroups() {
String businessAdministratorGroupId = "Super users";
Task task = TaskModelProvider.getFactory().newTask();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_GROUP_ID, businessAdministratorGroupId);
peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments);
assertEquals(3, peopleAssignments.getBusinessAdministrators().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals("Administrator", organizationalEntity1.getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1);
assertTrue(organizationalEntity2 instanceof Group);
assertEquals("Administrators", organizationalEntity2.getId());
OrganizationalEntity organizationalEntity3 = peopleAssignments.getBusinessAdministrators().get(2);
assertTrue(organizationalEntity3 instanceof Group);
assertEquals(businessAdministratorGroupId, organizationalEntity3.getId());
}
@Test
public void testAssignTaskstakeholders() {
String taskStakeholderId = "espiegelberg";
Task task = TaskModelProvider.getFactory().newTask();
InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.TASKSTAKEHOLDER_ID, taskStakeholderId);
peopleAssignmentHelper.assignTaskStakeholders(workItem, peopleAssignments);
assertEquals(1, peopleAssignments.getTaskStakeholders().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getTaskStakeholders().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals(taskStakeholderId, organizationalEntity1.getId());
}
@Test
public void testAssignGroups() {
String groupId = "Software Developers, Project Managers";
Task task = TaskModelProvider.getFactory().newTask();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.GROUP_ID, groupId);
peopleAssignmentHelper.assignGroups(workItem, peopleAssignments);
OrganizationalEntity organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0);
assertTrue(organizationalEntity1 instanceof Group);
assertEquals("Software Developers", organizationalEntity1.getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1);
assertTrue(organizationalEntity2 instanceof Group);
assertEquals("Project Managers", organizationalEntity2.getId());
}
@Test
public void testgetNullSafePeopleAssignments() {
Task task = TaskModelProvider.getFactory().newTask();
InternalPeopleAssignments peopleAssignment = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
assertNotNull(peopleAssignment);
peopleAssignment = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
assertNotNull(peopleAssignment);
((InternalTask) task).setPeopleAssignments(null);
peopleAssignment = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
assertNotNull(peopleAssignment);
assertEquals(0, peopleAssignment.getPotentialOwners().size());
assertEquals(0, peopleAssignment.getBusinessAdministrators().size());
assertEquals(0, peopleAssignment.getExcludedOwners().size());
assertEquals(0, peopleAssignment.getRecipients().size());
assertEquals(0, peopleAssignment.getTaskStakeholders().size());
}
@Test
public void testHandlePeopleAssignments() {
InternalTask task = (InternalTask) TaskModelProvider.getFactory().newTask();
InternalTaskData taskData = (InternalTaskData) TaskModelProvider.getFactory().newTaskData();
InternalPeopleAssignments peopleAssignment = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
assertNotNull(peopleAssignment);
assertEquals(0, peopleAssignment.getPotentialOwners().size());
assertEquals(0, peopleAssignment.getBusinessAdministrators().size());
assertEquals(0, peopleAssignment.getTaskStakeholders().size());
String actorId = "espiegelberg";
String taskStakeholderId = "drmary";
String businessAdministratorId = "drbug";
String businessAdministratorGroupId = "Super users";
String excludedOwnerId = "john";
String recipientId = "mary";
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId);
workItem.setParameter(PeopleAssignmentHelper.TASKSTAKEHOLDER_ID, taskStakeholderId);
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_ID, businessAdministratorId);
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_GROUP_ID, businessAdministratorGroupId);
workItem.setParameter(PeopleAssignmentHelper.EXCLUDED_OWNER_ID, excludedOwnerId);
workItem.setParameter(PeopleAssignmentHelper.RECIPIENT_ID, recipientId);
peopleAssignmentHelper.handlePeopleAssignments(workItem, task, taskData);
List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners();
assertEquals(1, potentialOwners.size());
assertEquals(actorId, potentialOwners.get(0).getId());
List<OrganizationalEntity> businessAdministrators = task.getPeopleAssignments().getBusinessAdministrators();
assertEquals(4, businessAdministrators.size());
assertEquals("Administrator", businessAdministrators.get(0).getId());
// Admin group
assertEquals("Administrators", businessAdministrators.get(1).getId());
assertEquals(businessAdministratorId, businessAdministrators.get(2).getId());
assertEquals(businessAdministratorGroupId, businessAdministrators.get(3).getId());
List<OrganizationalEntity> taskStakehoders = ((InternalPeopleAssignments) task.getPeopleAssignments()).getTaskStakeholders();
assertEquals(1, taskStakehoders.size());
assertEquals(taskStakeholderId, taskStakehoders.get(0).getId());
List<OrganizationalEntity> excludedOwners = ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners();
assertEquals(1, excludedOwners.size());
assertEquals(excludedOwnerId, excludedOwners.get(0).getId());
List<OrganizationalEntity> recipients = ((InternalPeopleAssignments) task.getPeopleAssignments()).getRecipients();
assertEquals(1, recipients.size());
assertEquals(recipientId, recipients.get(0).getId());
}
@Test
public void testHandleMultiPeopleAssignments() {
InternalTask task = (InternalTask) TaskModelProvider.getFactory().newTask();
InternalTaskData taskData = (InternalTaskData) TaskModelProvider.getFactory().newTaskData();
InternalPeopleAssignments peopleAssignment = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
assertNotNull(peopleAssignment);
assertEquals(0, peopleAssignment.getPotentialOwners().size());
assertEquals(0, peopleAssignment.getBusinessAdministrators().size());
assertEquals(0, peopleAssignment.getTaskStakeholders().size());
String actorId = "espiegelberg,john";
String taskStakeholderId = "drmary,krisv";
String businessAdministratorId = "drbug,peter";
String businessAdministratorGroupId = "Super users,Flow administrators";
String excludedOwnerId = "john,poul";
String recipientId = "mary,steve";
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId);
workItem.setParameter(PeopleAssignmentHelper.TASKSTAKEHOLDER_ID, taskStakeholderId);
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_ID, businessAdministratorId);
workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_GROUP_ID, businessAdministratorGroupId);
workItem.setParameter(PeopleAssignmentHelper.EXCLUDED_OWNER_ID, excludedOwnerId);
workItem.setParameter(PeopleAssignmentHelper.RECIPIENT_ID, recipientId);
peopleAssignmentHelper.handlePeopleAssignments(workItem, task, taskData);
List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners();
assertEquals(2, potentialOwners.size());
assertEquals("espiegelberg", potentialOwners.get(0).getId());
assertEquals("john", potentialOwners.get(1).getId());
List<OrganizationalEntity> businessAdministrators = task.getPeopleAssignments().getBusinessAdministrators();
assertEquals(6, businessAdministrators.size());
assertEquals("Administrator", businessAdministrators.get(0).getId());
//Admin group
assertEquals("Administrators", businessAdministrators.get(1).getId());
assertEquals("drbug", businessAdministrators.get(2).getId());
assertEquals("peter", businessAdministrators.get(3).getId());
assertEquals("Super users", businessAdministrators.get(4).getId());
assertEquals("Flow administrators", businessAdministrators.get(5).getId());
List<OrganizationalEntity> taskStakehoders = ((InternalPeopleAssignments) task.getPeopleAssignments()).getTaskStakeholders();
assertEquals(2, taskStakehoders.size());
assertEquals("drmary", taskStakehoders.get(0).getId());
assertEquals("krisv", taskStakehoders.get(1).getId());
List<OrganizationalEntity> excludedOwners = ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners();
assertEquals(2, excludedOwners.size());
assertEquals("john", excludedOwners.get(0).getId());
assertEquals("poul", excludedOwners.get(1).getId());
List<OrganizationalEntity> recipients = ((InternalPeopleAssignments) task.getPeopleAssignments()).getRecipients();
assertEquals(2, recipients.size());
assertEquals("mary", recipients.get(0).getId());
assertEquals("steve", recipients.get(1).getId());
}
@Test
public void testAssignExcludedOwners() {
String excludedOwnerId = "espiegelberg";
Task task = TaskModelProvider.getFactory().newTask();
InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.EXCLUDED_OWNER_ID, excludedOwnerId);
peopleAssignmentHelper.assignExcludedOwners(workItem, peopleAssignments);
assertEquals(1, peopleAssignments.getExcludedOwners().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getExcludedOwners().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals(excludedOwnerId, organizationalEntity1.getId());
}
@Test
public void testAssignRecipients() {
String recipientId = "espiegelberg";
Task task = TaskModelProvider.getFactory().newTask();
InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
workItem.setParameter(PeopleAssignmentHelper.RECIPIENT_ID, recipientId);
peopleAssignmentHelper.assignRecipients(workItem, peopleAssignments);
assertEquals(1, peopleAssignments.getRecipients().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getRecipients().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals(recipientId, organizationalEntity1.getId());
}
@Test
public void testAssignBusinessAdministratorsChangedDefaults() {
peopleAssignmentHelper = new PeopleAssignmentHelper("myadmin", "mygroup");
Task task = TaskModelProvider.getFactory().newTask();
PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task);
WorkItem workItem = new WorkItemImpl();
peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments);
assertEquals(2, peopleAssignments.getBusinessAdministrators().size());
OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0);
assertTrue(organizationalEntity1 instanceof User);
assertEquals("myadmin", organizationalEntity1.getId());
OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1);
assertTrue(organizationalEntity2 instanceof Group);
assertEquals("mygroup", organizationalEntity2.getId());
}
private User createUser(String id) {
return TaskModelProvider.getFactory().newUser(id);
}
private Group createGroup(String id) {
return TaskModelProvider.getFactory().newGroup(id);
}
}