[SYNCOPE-1053] Providing UserTO and UserPatch pending approval as part of the workflow form
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0b96dfc4 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0b96dfc4 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0b96dfc4 Branch: refs/heads/master Commit: 0b96dfc4708f42dbd1fd881284522c5f77c3ae68 Parents: 419ad61 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Thu May 25 17:15:44 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Thu May 25 17:16:16 2017 +0200 ---------------------------------------------------------------------- .../syncope/common/lib/to/WorkflowFormTO.java | 21 +++++++++++ .../activiti/ActivitiUserWorkflowAdapter.java | 14 +++++--- .../syncope/fit/core/UserWorkflowITCase.java | 37 ++++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/0b96dfc4/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java index 1748435..a73a8cc 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormTO.java @@ -31,6 +31,7 @@ import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.apache.syncope.common.lib.AbstractBaseBean; +import org.apache.syncope.common.lib.patch.UserPatch; @XmlRootElement(name = "workflowForm") @XmlType @@ -50,6 +51,10 @@ public class WorkflowFormTO extends AbstractBaseBean { private String owner; + private UserTO userTO; + + private UserPatch userPatch; + private final List<WorkflowFormPropertyTO> properties = new ArrayList<>(); public String getUsername() { @@ -114,6 +119,22 @@ public class WorkflowFormTO extends AbstractBaseBean { this.owner = owner; } + public UserTO getUserTO() { + return userTO; + } + + public void setUserTO(final UserTO userTO) { + this.userTO = userTO; + } + + public UserPatch getUserPatch() { + return userPatch; + } + + public void setUserPatch(final UserPatch userPatch) { + this.userPatch = userPatch; + } + @XmlElementWrapper(name = "workflowFormProperties") @XmlElement(name = "workflowFormProperty") @JsonProperty("workflowFormProperties") http://git-wip-us.apache.org/repos/asf/syncope/blob/0b96dfc4/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java index 732d6dd..66dd5e2 100644 --- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java +++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java @@ -478,10 +478,10 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { } protected WorkflowFormTO getFormTO(final Task task, final TaskFormData fd) { - final WorkflowFormTO formTO = + WorkflowFormTO formTO = getFormTO(task.getProcessInstanceId(), task.getId(), fd.getFormKey(), fd.getFormProperties()); - BeanUtils.copyProperties(task, formTO); + return formTO; } @@ -496,11 +496,11 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { } } - final WorkflowFormTO formTO = getHistoricFormTO( + WorkflowFormTO formTO = getHistoricFormTO( task.getProcessInstanceId(), task.getId(), task.getFormKey(), props); BeanUtils.copyProperties(task, formTO); - final HistoricActivityInstance historicActivityInstance = engine.getHistoryService(). + HistoricActivityInstance historicActivityInstance = engine.getHistoryService(). createHistoricActivityInstanceQuery(). executionId(task.getExecutionId()).activityType("userTask").activityName(task.getName()).singleResult(); @@ -529,6 +529,9 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { formTO.setTaskId(taskId); formTO.setKey(formKey); + formTO.setUserTO(engine.getRuntimeService().getVariable(processInstanceId, USER_TO, UserTO.class)); + formTO.setUserPatch(engine.getRuntimeService().getVariable(processInstanceId, USER_PATCH, UserPatch.class)); + for (HistoricFormPropertyEntity prop : props) { WorkflowFormPropertyTO propertyTO = new WorkflowFormPropertyTO(); propertyTO.setId(prop.getPropertyId()); @@ -558,6 +561,9 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter { formTO.setTaskId(taskId); formTO.setKey(formKey); + formTO.setUserTO(engine.getRuntimeService().getVariable(processInstanceId, USER_TO, UserTO.class)); + formTO.setUserPatch(engine.getRuntimeService().getVariable(processInstanceId, USER_PATCH, UserPatch.class)); + for (FormProperty fProp : properties) { WorkflowFormPropertyTO propertyTO = new WorkflowFormPropertyTO(); BeanUtils.copyProperties(fProp, propertyTO, PROPERTY_IGNORE_PROPS); http://git-wip-us.apache.org/repos/asf/syncope/blob/0b96dfc4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java index 31a3e3d..896b922 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java @@ -31,7 +31,10 @@ import java.util.Collections; import java.util.List; import java.util.Map; import javax.sql.DataSource; +import javax.ws.rs.core.Response; +import org.apache.syncope.client.lib.SyncopeClient; import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.patch.MembershipPatch; import org.apache.syncope.common.lib.patch.PasswordPatch; import org.apache.syncope.common.lib.patch.StringPatchItem; import org.apache.syncope.common.lib.patch.UserPatch; @@ -42,6 +45,7 @@ import org.apache.syncope.common.lib.to.WorkflowFormPropertyTO; import org.apache.syncope.common.lib.to.WorkflowFormTO; import org.apache.syncope.common.lib.types.ClientExceptionType; import org.apache.syncope.common.lib.types.PatchOperation; +import org.apache.syncope.common.rest.api.service.UserSelfService; import org.apache.syncope.common.rest.api.service.UserWorkflowService; import org.apache.syncope.fit.AbstractITCase; import org.junit.Assume; @@ -215,6 +219,39 @@ public class UserWorkflowITCase extends AbstractITCase { } @Test + public void updateApproval() { + Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService)); + + // read forms *before* any operation + List<WorkflowFormTO> forms = userWorkflowService.getForms(); + assertNotNull(forms); + int preForms = forms.size(); + + UserTO created = createUser(UserITCase.getUniqueSampleTO("updateappro...@syncope.apache.org")).getEntity(); + assertNotNull(created); + + UserPatch patch = new UserPatch(); + patch.setKey(created.getKey()); + patch.getMemberships().add(new MembershipPatch.Builder().group("b1f7c12d-ec83-441f-a50e-1691daaedf3b").build()); + + SyncopeClient client = clientFactory.create(created.getUsername(), "password123"); + Response response = client.getService(UserSelfService.class).update(patch); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + forms = userWorkflowService.getForms(); + assertNotNull(forms); + assertEquals(preForms + 1, forms.size()); + + WorkflowFormTO form = userWorkflowService.getFormForUser(created.getKey()); + assertNotNull(form); + assertNotNull(form.getTaskId()); + assertNull(form.getOwner()); + assertNotNull(form.getUserTO()); + assertNotNull(form.getUserPatch()); + assertEquals(patch, form.getUserPatch()); + } + + @Test public void issueSYNCOPE15() { Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));