1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.datadictionary;
17
18 import org.junit.After;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.kuali.rice.kim.document.IdentityManagementGroupDocument;
22 import org.kuali.rice.kim.document.IdentityManagementKimDocument;
23 import org.kuali.rice.kim.document.IdentityManagementPersonDocument;
24 import org.kuali.rice.krad.bo.AdHocRoutePerson;
25 import org.kuali.rice.krad.bo.AdHocRouteRecipient;
26 import org.kuali.rice.krad.bo.AdHocRouteWorkgroup;
27 import org.kuali.rice.krad.bo.BusinessObject;
28 import org.kuali.rice.krad.datadictionary.exception.ClassValidationException;
29 import org.kuali.rice.krad.document.Document;
30 import org.kuali.rice.krad.document.DocumentBase;
31 import org.kuali.rice.krad.maintenance.MaintenanceDocumentBase;
32 import org.kuali.rice.krad.document.TransactionalDocumentBase;
33 import org.kuali.rice.krad.impls.RiceTestTransactionalDocument2;
34 import org.kuali.rice.krad.impls.RiceTestTransactionalDocument2Parent;
35 import org.kuali.rice.krad.test.document.AccountRequestDocument;
36 import org.kuali.rice.krad.test.document.bo.AccountType2;
37 import org.kuali.rice.krad.test.document.bo.AccountType2Parent;
38 import org.kuali.test.KRADTestCase;
39
40 import static org.junit.Assert.*;
41
42
43
44
45
46
47 public class BaseBOClassAndBaseDocumentClassTest extends KRADTestCase {
48
49 DataDictionary dd = null;
50
51
52
53
54 @Before
55 public void setUp() throws Exception {
56 super.setUp();
57
58 dd = new DataDictionary();
59
60 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifControlDefinitions.xml");
61 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifConfigurationDefinitions.xml");
62 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifRiceDefinitions.xml");
63 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifFieldDefinitions.xml");
64 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifLookupDefinitions.xml");
65 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifInquiryDefinitions.xml");
66 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifGroupDefinitions.xml");
67 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifHeaderFooterDefinitions.xml");
68 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifLayoutManagerDefinitions.xml");
69 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifViewPageDefinitions.xml");
70 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifWidgetDefinitions.xml");
71 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifMaintenanceDefinitions.xml");
72 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/uif/UifDocumentDefinitions.xml");
73
74 dd.addConfigFileLocation("file:" + getUserDir() + "/../../impl/src/main/resources/org/kuali/rice/krad/bo/datadictionary");
75 dd.addConfigFileLocation("classpath:org/kuali/rice/kns/bo/datadictionary/DataDictionaryBaseTypes.xml");
76 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/bo/datadictionary/EmploymentStatus.xml");
77 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/bo/datadictionary/EmploymentType.xml");
78 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/impl/identity/PersonImpl.xml");
79 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/bo/datadictionary/KimBaseBeans.xml");
80 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/impl/group/Group.xml");
81 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/impl/role/RoleBo.xml");
82 dd.addConfigFileLocation("classpath:org/kuali/rice/kim/impl/type/KimType.xml");
83 dd.addConfigFileLocation("classpath:org/kuali/rice/krad/test/document/");
84 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/campus/Campus.xml");
85 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/campus/CampusType.xml");
86 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/country/Country.xml");
87 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/state/State.xml");
88 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/county/County.xml");
89 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../location/web/src/main/resources/org/kuali/rice/location/web/postalcode/PostalCode.xml");
90 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../core-service/web/src/main/resources/org/kuali/rice/coreservice/web/parameter/Parameter.xml");
91 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../core-service/web/src/main/resources/org/kuali/rice/coreservice/web/parameter/ParameterType.xml");
92 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../core-service/web/src/main/resources/org/kuali/rice/coreservice/web/namespace/Namespace.xml");
93 dd.addConfigFileLocation("file:" + getBaseDir() + "/../../core-service/web/src/main/resources/org/kuali/rice/coreservice/web/component/Component.xml");
94 dd.parseDataDictionaryConfigurationFiles( false );
95 }
96
97
98
99
100 @After
101 public void tearDown() throws Exception {
102 super.tearDown();
103 dd = null;
104 }
105
106
107
108
109
110
111 @Test
112 public void testValidAndInvalidDDEntries() throws Exception {
113
114 assertExpectedOutcomeOfBOEntryConstruction(AdHocRoutePerson.class, DocumentBase.class, false);
115 assertExpectedOutcomeOfDocEntryConstruction(TransactionalDocumentBase.class, MaintenanceDocumentBase.class, false);
116 assertExpectedOutcomeOfBOEntryConstruction(TransactionalDocumentBase.class, AdHocRouteRecipient.class, false);
117 assertExpectedOutcomeOfDocEntryConstruction(AccountRequestDocument.class, IdentityManagementKimDocument.class, false);
118
119
120 assertExpectedOutcomeOfBOEntryConstruction(AdHocRoutePerson.class, AdHocRouteRecipient.class, true);
121 assertExpectedOutcomeOfDocEntryConstruction(TransactionalDocumentBase.class, DocumentBase.class, true);
122 assertExpectedOutcomeOfBOEntryConstruction(AdHocRouteWorkgroup.class, AdHocRouteRecipient.class, true);
123 assertExpectedOutcomeOfDocEntryConstruction(IdentityManagementPersonDocument.class, IdentityManagementKimDocument.class, true);
124
125
126 assertExpectedOutcomeOfBOEntryConstruction(AdHocRouteRecipient.class, AdHocRoutePerson.class, false);
127 assertExpectedOutcomeOfDocEntryConstruction(IdentityManagementKimDocument.class, IdentityManagementGroupDocument.class, false);
128
129
130
131 assertExpectedOutcomeOfBOEntryConstruction(AdHocRoutePerson.class, AdHocRoutePerson.class, true);
132 assertExpectedOutcomeOfDocEntryConstruction(MaintenanceDocumentBase.class, MaintenanceDocumentBase.class, true);
133 }
134
135
136
137
138
139
140 @Test
141 public void testRetrieveDDEntriesByBaseClass() throws Exception {
142
143 String[] baseClassNames = {"AccountType2Parent", "AccountType2Parent"};
144 String[] actualClassNames = {"AccountType2", "AccountType2"};
145 for (int i = 0; i < baseClassNames.length; i++) {
146
147 assertBusinessObjectEntryIsAccountType2(dd.getBusinessObjectEntry(baseClassNames[i]));
148
149 assertBusinessObjectEntryIsAccountType2(dd.getBusinessObjectEntry(actualClassNames[i]));
150 }
151
152
153 baseClassNames = new String[] {"org.kuali.rice.krad.impls.RiceTestTransactionalDocument2Parent", "org.kuali.rice.krad.impls.RiceTestTransactionalDocument2Parent"};
154 actualClassNames = new String[] {"org.kuali.rice.krad.impls.RiceTestTransactionalDocument2", "org.kuali.rice.krad.impls.RiceTestTransactionalDocument2"};
155 for (int i = 0; i < baseClassNames.length; i++) {
156
157 assertDocumentEntryIsRiceTestTransactionalDocument2(dd.getDocumentEntry(baseClassNames[i]));
158
159 assertDocumentEntryIsRiceTestTransactionalDocument2(dd.getDocumentEntry(actualClassNames[i]));
160 }
161
162
163
164
165 DataDictionaryEntry ddEntry = dd.getDictionaryObjectEntry("AccountType2");
166 assertNotNull("The AccountType2 DD entry from the entriesByJstlKey map should not be null", ddEntry);
167 assertTrue("The DD entry should have been a BusinessObjectEntry", ddEntry instanceof BusinessObjectEntry);
168 assertBusinessObjectEntryIsAccountType2((BusinessObjectEntry) ddEntry);
169 }
170
171
172
173
174
175
176
177
178
179 private void assertExpectedOutcomeOfBOEntryConstruction(Class<? extends BusinessObject> boClass,
180 Class<? extends BusinessObject> boBaseClass, boolean shouldSucceed) throws Exception {
181
182 BusinessObjectEntry boEntry = new BusinessObjectEntry();
183 boEntry.setBusinessObjectClass(boClass);
184 boEntry.setBaseBusinessObjectClass(boBaseClass);
185 boEntry.setObjectLabel(boClass.getSimpleName());
186
187 try {
188 boEntry.completeValidation();
189
190 if (!shouldSucceed) {
191 fail("The BO entry should have thrown a ClassValidationException during the validation process");
192 }
193 }
194 catch (ClassValidationException e) {
195
196 if (shouldSucceed) {
197 fail("The BO entry should not have thrown a ClassValidationException during the validation process");
198 }
199 }
200 }
201
202
203
204
205
206
207
208
209
210 private void assertExpectedOutcomeOfDocEntryConstruction(Class<? extends Document> docClass,
211 Class<? extends Document> docBaseClass, boolean shouldSucceed) throws Exception {
212
213 DocumentEntry docEntry = new TransactionalDocumentEntry();
214 docEntry.setDocumentClass(docClass);
215 docEntry.setBaseDocumentClass(docBaseClass);
216
217 try {
218 docEntry.completeValidation();
219
220 if (!shouldSucceed) {
221 fail("The doc entry should have thrown a ClassValidationException during the validation process");
222 }
223 }
224 catch (ClassValidationException e) {
225
226 if (shouldSucceed) {
227 fail("The doc entry should not have thrown a ClassValidationException during the validation process");
228 }
229 }
230 }
231
232
233
234
235
236
237
238 private void assertBusinessObjectEntryIsAccountType2(BusinessObjectEntry boEntry) throws Exception {
239 assertNotNull("The AccountType2 DD entry should not be null", boEntry);
240 assertEquals("The DD entry does not represent the AccountType2 entry", AccountType2.class, boEntry.getBusinessObjectClass());
241 assertEquals("The DD entry does not have the expected base class", AccountType2Parent.class, boEntry.getBaseBusinessObjectClass());
242 assertEquals("The DD entry does not have the expected title attribute", "accountTypeCode2", boEntry.getTitleAttribute());
243 assertEquals("The DD entry does not have the expected object label", "Account Type 2", boEntry.getObjectLabel());
244 }
245
246
247
248
249
250
251
252 private void assertDocumentEntryIsRiceTestTransactionalDocument2(DocumentEntry docEntry) throws Exception {
253 assertNotNull("The RiceTestTransactionalDocument2 DD entry should not be null", docEntry);
254 assertEquals("The DD entry does not represent the RiceTestTransactionalDocument2 entry",
255 RiceTestTransactionalDocument2.class, docEntry.getDocumentClass());
256 assertEquals("The DD entry does not have the expected base class", RiceTestTransactionalDocument2Parent.class, docEntry.getBaseDocumentClass());
257 }
258 }