001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.kew.impl.peopleflow; 017 018 import org.junit.Test; 019 import org.kuali.rice.core.api.criteria.QueryByCriteria; 020 import org.kuali.rice.core.api.criteria.QueryResults; 021 import org.kuali.rice.core.api.delegation.DelegationType; 022 import org.kuali.rice.core.api.membership.MemberType; 023 import org.kuali.rice.kew.api.action.ActionRequestPolicy; 024 import org.kuali.rice.kew.impl.type.KewAttributeDefinitionBo; 025 import org.kuali.rice.kew.impl.type.KewTypeAttributeBo; 026 import org.kuali.rice.kew.impl.type.KewTypeBo; 027 import org.kuali.rice.kew.responsibility.service.ResponsibilityIdService; 028 import org.kuali.rice.kew.service.KEWServiceLocator; 029 import org.kuali.rice.kew.test.KEWTestCase; 030 import org.kuali.rice.krad.data.DataObjectService; 031 import org.kuali.rice.krad.data.KradDataServiceLocator; 032 import org.kuali.rice.krad.data.PersistenceOption; 033 034 import javax.persistence.PersistenceException; 035 036 import static org.kuali.rice.core.api.criteria.PredicateFactory.*; 037 038 import static org.junit.Assert.*; 039 040 /** 041 * Test the basic persistence of business objects related to PeopleFlows 042 * 043 * @author Kuali Rice Team (rice.collab@kuali.org) 044 */ 045 public class PeopleFlowBoTest extends KEWTestCase { 046 047 private DataObjectService dataObjectService; 048 private ResponsibilityIdService responsibilityIdService; 049 050 @org.junit.Before 051 public void setupBoService() { 052 dataObjectService = KradDataServiceLocator.getDataObjectService(); 053 responsibilityIdService = KEWServiceLocator.getResponsibilityIdService(); 054 } 055 056 // TODO - hopefully this test will eventually start failing because we actually want the save method to throw a 057 // {@link DataAccessException}, but that's not going to happen until the following jira is resolved: 058 // 059 // https://jira.kuali.org/browse/KULRICE-9798 060 @Test(expected = PersistenceException.class) 061 public void testKewTypeBoBasicPersist() { 062 KewTypeBoBuilder builder = new KewTypeBoBuilder("testType", "testNamespace"); 063 064 dataObjectService.save(builder.build(), PersistenceOption.FLUSH); 065 // try to persist the same information again, it should fail because of the unique constraint on name + namespace 066 dataObjectService.save(builder.build(), PersistenceOption.FLUSH); 067 } 068 @Test 069 public void testKewTypeBoFullPersist() { 070 KewTypeBoBuilder builder = new KewTypeBoBuilder("testType", "testNamespace").setServiceName("testService"); 071 KewTypeBo kewTypeBo = builder.build(); 072 073 for (int i=1; i<=3; i++) { 074 KewAttributeDefinitionBo attributeDefn = new KewAttributeDefinitionBo(); 075 attributeDefn.setName("attrDef"+i); 076 attributeDefn.setDescription("this is a description of attrDef" + i); 077 attributeDefn.setComponentName("componentName" + i); 078 attributeDefn.setLabel("label" + i); 079 attributeDefn.setNamespace(kewTypeBo.getNamespace()); 080 081 attributeDefn = dataObjectService.save(attributeDefn); 082 083 KewTypeAttributeBo typeAttribute = new KewTypeAttributeBo(); 084 typeAttribute.setSequenceNumber(i); 085 typeAttribute.setAttributeDefinition(attributeDefn); 086 kewTypeBo.getAttributes().add(typeAttribute); 087 typeAttribute.setType(kewTypeBo); 088 } 089 090 dataObjectService.save(kewTypeBo); 091 } 092 093 @Test 094 public void testPeopleFlowPersonMembers() { 095 PeopleFlowMemberBo peopleFlowMember = new PeopleFlowMemberBo(); 096 peopleFlowMember.setMemberType(MemberType.PRINCIPAL); 097 peopleFlowMember.setMemberId("admin"); 098 peopleFlowMember.setPriority(1); 099 peopleFlowMember.setResponsibilityId(responsibilityIdService.getNewResponsibilityId()); 100 assertNotNull(peopleFlowMember.getPerson()); 101 assertEquals("admin", peopleFlowMember.getPerson().getPrincipalName()); 102 103 PeopleFlowDelegateBo peopleFlowDelegate = new PeopleFlowDelegateBo(); 104 peopleFlowDelegate.setMemberType(MemberType.PRINCIPAL); 105 peopleFlowDelegate.setMemberId("admin"); 106 peopleFlowDelegate.setDelegationTypeCode(DelegationType.PRIMARY.getCode()); 107 peopleFlowDelegate.setResponsibilityId(responsibilityIdService.getNewResponsibilityId()); 108 assertNotNull(peopleFlowDelegate.getPerson()); 109 assertEquals("admin", peopleFlowDelegate.getPerson().getPrincipalName()); 110 } 111 112 @Test 113 public void testPeopleFlowBoPersist() { 114 testKewTypeBoFullPersist(); 115 116 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create(); 117 criteria.setPredicates(equal("name", "testType"), equal("namespace", "testNamespace")); 118 119 QueryResults<KewTypeBo> results = dataObjectService.findMatching(KewTypeBo.class, criteria.build()); 120 assertEquals(1, results.getResults().size()); 121 KewTypeBo kewTypeBo = results.getResults().get(0); 122 123 // minimal peopleflow 124 PeopleFlowBo peopleFlowBo = new PeopleFlowBo(); 125 peopleFlowBo.setDescription("description of testPeopleFlow"); 126 peopleFlowBo.setName("testPeopleFlow"); 127 peopleFlowBo.setNamespaceCode("testNamespace"); 128 peopleFlowBo.setTypeId(kewTypeBo.getId()); 129 130 peopleFlowBo = dataObjectService.save(peopleFlowBo); 131 132 // fill out peopleflow 133 KewTypeAttributeBo attribute = kewTypeBo.getAttributes().get(0); 134 135 PeopleFlowAttributeBo peopleFlowAttr = new PeopleFlowAttributeBo(); 136 peopleFlowAttr.setPeopleFlow(peopleFlowBo); 137 peopleFlowAttr.setAttributeDefinition(attribute.getAttributeDefinition()); 138 peopleFlowAttr.setPeopleFlow(peopleFlowBo); 139 peopleFlowAttr.setValue("testAttrValue"); 140 141 peopleFlowBo.getAttributeBos().add(peopleFlowAttr); 142 143 PeopleFlowMemberBo peopleFlowMember = new PeopleFlowMemberBo(); 144 peopleFlowMember.setPeopleFlow(peopleFlowBo); 145 peopleFlowMember.setMemberType(MemberType.PRINCIPAL); 146 peopleFlowMember.setMemberId("admin"); 147 peopleFlowMember.setPriority(1); 148 peopleFlowMember.setResponsibilityId(responsibilityIdService.getNewResponsibilityId()); 149 150 peopleFlowBo.getMembers().add(peopleFlowMember); 151 152 PeopleFlowDelegateBo peopleFlowDelegate1 = new PeopleFlowDelegateBo(); 153 peopleFlowDelegate1.setPeopleFlowMember(peopleFlowMember); 154 peopleFlowDelegate1.setMemberType(MemberType.GROUP); 155 peopleFlowDelegate1.setMemberId("1"); 156 peopleFlowDelegate1.setDelegationTypeCode(DelegationType.PRIMARY.getCode()); 157 peopleFlowDelegate1.setResponsibilityId(responsibilityIdService.getNewResponsibilityId()); 158 peopleFlowMember.getDelegates().add(peopleFlowDelegate1); 159 160 PeopleFlowDelegateBo peopleFlowDelegate2 = new PeopleFlowDelegateBo(); 161 peopleFlowDelegate2.setPeopleFlowMember(peopleFlowMember); 162 peopleFlowDelegate2.setMemberType(MemberType.ROLE); 163 peopleFlowDelegate2.setMemberId("2"); 164 peopleFlowDelegate2.setActionRequestPolicyCode(ActionRequestPolicy.FIRST.getCode()); 165 peopleFlowDelegate2.setDelegationTypeCode(DelegationType.SECONDARY.getCode()); 166 peopleFlowDelegate2.setResponsibilityId(responsibilityIdService.getNewResponsibilityId()); 167 peopleFlowMember.getDelegates().add(peopleFlowDelegate2); 168 169 peopleFlowBo = dataObjectService.save(peopleFlowBo); 170 171 assertNotNull(peopleFlowBo.getId()); 172 peopleFlowBo = dataObjectService.find(PeopleFlowBo.class, peopleFlowBo.getId()); 173 174 assertNotNull(peopleFlowBo); 175 assertNotNull(peopleFlowBo.getId()); 176 assertTrue(peopleFlowBo.getMembers().size() == 1); 177 178 PeopleFlowMemberBo memberBo = peopleFlowBo.getMembers().get(0); 179 assertNotNull(memberBo.getId()); 180 assertEquals(peopleFlowBo.getId(), memberBo.getPeopleFlow().getId()); 181 assertEquals("admin", memberBo.getMemberId()); 182 assertEquals(MemberType.PRINCIPAL, memberBo.getMemberType()); 183 assertNotNull(memberBo.getPerson()); 184 assertEquals("admin", memberBo.getPerson().getPrincipalName()); 185 assertEquals(peopleFlowMember.getResponsibilityId(), memberBo.getResponsibilityId()); 186 assertSame(1, memberBo.getPriority()); 187 assertTrue(memberBo.getDelegates().size() == 2); 188 189 PeopleFlowDelegateBo delegateBo1 = memberBo.getDelegates().get(0); 190 assertNotNull(delegateBo1.getId()); 191 assertEquals(memberBo.getId(), delegateBo1.getPeopleFlowMember().getId()); 192 assertEquals("1", delegateBo1.getMemberId()); 193 assertEquals(MemberType.GROUP, delegateBo1.getMemberType()); 194 assertEquals(DelegationType.PRIMARY.getCode(), delegateBo1.getDelegationTypeCode()); 195 assertEquals(peopleFlowDelegate1.getResponsibilityId(), delegateBo1.getResponsibilityId()); 196 assertNull(delegateBo1.getActionRequestPolicyCode()); 197 198 PeopleFlowDelegateBo delegateBo2 = memberBo.getDelegates().get(1); 199 assertNotNull(delegateBo2.getId()); 200 assertEquals(memberBo.getId(), delegateBo2.getPeopleFlowMember().getId()); 201 assertEquals("2", delegateBo2.getMemberId()); 202 assertEquals(MemberType.ROLE, delegateBo2.getMemberType()); 203 assertEquals(DelegationType.SECONDARY.getCode(), delegateBo2.getDelegationTypeCode()); 204 assertEquals(peopleFlowDelegate2.getResponsibilityId(), delegateBo2.getResponsibilityId()); 205 assertEquals(ActionRequestPolicy.FIRST.getCode(), delegateBo2.getActionRequestPolicyCode()); 206 } 207 208 public static KewTypeBo buildMinimalKewTypeBo() { 209 KewTypeBo kewTypeBo = new KewTypeBo(); 210 kewTypeBo.setName("TestType"); 211 kewTypeBo.setNamespace("TestNamespace"); 212 return kewTypeBo; 213 } 214 215 private static class KewTypeBoBuilder { 216 217 private boolean active = true; 218 private String name; 219 private String namespace; 220 private String serviceName; 221 222 public KewTypeBoBuilder(String name, String namespace) { 223 this.name = name; 224 this.namespace = namespace; 225 } 226 227 public KewTypeBoBuilder setServiceName(String serviceName) { 228 this.serviceName = serviceName; 229 return this; 230 } 231 232 public KewTypeBoBuilder setName(String name) { 233 this.name = name; 234 return this; 235 } 236 237 public KewTypeBoBuilder setNamespace(String namespace) { 238 this.namespace = namespace; 239 return this; 240 } 241 242 public KewTypeBoBuilder setActive(boolean active) { 243 this.active = active; 244 return this; 245 } 246 247 public KewTypeBo build() { 248 KewTypeBo kewTypeBo = new KewTypeBo(); 249 kewTypeBo.setActive(active); 250 kewTypeBo.setName(name); 251 kewTypeBo.setNamespace(namespace); 252 kewTypeBo.setServiceName(serviceName); 253 return kewTypeBo; 254 } 255 } 256 257 }