1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.service;
17
18 import org.junit.Test;
19 import org.kuali.rice.core.api.parameter.Parameter;
20 import org.kuali.rice.core.framework.services.CoreFrameworkServiceLocator;
21 import org.kuali.rice.core.impl.parameter.ParameterBo;
22 import org.kuali.rice.core.impl.parameter.ParameterId;
23 import org.kuali.rice.core.impl.parameter.ParameterTypeBo;
24 import org.kuali.rice.core.framework.persistence.jpa.metadata.MetadataManager;
25 import org.kuali.rice.krad.test.document.bo.Account;
26 import org.kuali.rice.krad.test.document.bo.AccountExtension;
27 import org.kuali.rice.location.impl.country.CountryBo;
28 import org.kuali.rice.location.impl.state.StateBo;
29 import org.kuali.rice.location.impl.state.StateId;
30 import org.kuali.rice.test.BaselineTestCase;
31 import org.kuali.rice.test.data.PerTestUnitTestData;
32 import org.kuali.rice.test.data.UnitTestData;
33 import org.kuali.rice.test.data.UnitTestFile;
34 import org.kuali.rice.test.data.UnitTestSql;
35 import org.kuali.test.KRADTestCase;
36
37 import java.util.Collection;
38 import java.util.HashMap;
39 import java.util.Map;
40
41 import static org.junit.Assert.*;
42
43
44
45
46
47
48
49 @PerTestUnitTestData(
50 value = @UnitTestData(
51 order = {UnitTestData.Type.SQL_STATEMENTS, UnitTestData.Type.SQL_FILES},
52 sqlStatements = {
53 @UnitTestSql("delete from trv_acct where acct_fo_id between 101 and 301")
54 ,@UnitTestSql("delete from trv_acct_fo where acct_fo_id between 101 and 301")
55 },
56 sqlFiles = {
57 @UnitTestFile(filename = "classpath:testAccountManagers.sql", delimiter = ";")
58 , @UnitTestFile(filename = "classpath:testAccounts.sql", delimiter = ";")
59 }
60 ),
61 tearDown = @UnitTestData(
62 sqlStatements = {
63 @UnitTestSql("delete from trv_acct where acct_fo_id between 101 and 301")
64 ,@UnitTestSql("delete from trv_acct_fo where acct_fo_id between 101 and 301")
65 }
66 )
67 )
68 @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
69 public class MetadataManagerTest extends KRADTestCase {
70
71
72
73 @Test
74 public void testPKMapToObject() {
75 Map<String, Object> pkMap = new HashMap<String, Object>();
76 Object pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
77 assertNull("An empty map should return a null key", pkValue);
78
79 pkMap.put("code", "AN");
80 pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
81 assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
82 assertEquals("Single pkValue should be \"AN\"", "AN", pkValue);
83
84 pkMap.put("name", "ANDORRA");
85 boolean exceptionThrown = false;
86 try {
87 pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
88 } catch (IllegalArgumentException iae) {
89 exceptionThrown = true;
90 }
91 assertTrue("Multiple keys did not lead to exception", exceptionThrown);
92
93 pkMap.clear();
94
95 pkMap.put("countryCode", "US");
96 pkMap.put("code", "WV");
97 pkValue = MetadataManager.convertPrimaryKeyMapToObject(StateBo.class, pkMap);
98 org.junit.Assert.assertEquals("Composite pkValue for State should have class of StateId", StateId.class, pkValue.getClass());
99 StateId stateId = (StateId)pkValue;
100 assertEquals("Country code was not correctly set", "US", stateId.getCountryCode());
101 assertEquals("State code was not correctly set", "WV", stateId.getCode());
102
103 pkMap.put("name", "WEST VIRGINIA");
104 exceptionThrown = false;
105 try {
106 pkValue = MetadataManager.convertPrimaryKeyMapToObject(StateBo.class, pkMap);
107 } catch (Exception e) {
108 exceptionThrown = true;
109 }
110 assertTrue("Non primary key field caused exception", exceptionThrown);
111 }
112
113
114
115
116
117 @Test
118 public void testPKObjectForEntity() {
119 ParameterTypeBo parameterType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(ParameterTypeBo.class, "CONFG");
120 assertNotNull("ParameterType should not be null", parameterType);
121
122 Object pkValue = MetadataManager.getEntityPrimaryKeyObject(parameterType);
123 assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
124 assertEquals("Single pkValue should be \"CONFG\"", "CONFG", pkValue);
125
126 Parameter parameter = CoreFrameworkServiceLocator.getParameterService().getParameter("KR-NS", "Lookup", "MULTIPLE_VALUE_RESULTS_PER_PAGE");
127 assertNotNull("State should not be null", parameter);
128
129 pkValue = MetadataManager.getEntityPrimaryKeyObject(ParameterBo.from(parameter));
130 org.junit.Assert.assertEquals("Composite pkValue for Parameter should have class of ParameterId", ParameterId.class, pkValue.getClass());
131 ParameterId parameterId = (ParameterId)pkValue;
132 assertEquals("namespace code was not correctly set", "KR-NS", parameterId.getNamespaceCode());
133 assertEquals("parameter detail type code was not correctly set", "Lookup", parameterId.getComponentCode());
134 assertEquals("parameter name was not correctly set", "MULTIPLE_VALUE_RESULTS_PER_PAGE", parameterId.getName());
135 assertEquals("parameterApplicationNamespaceCode was not correctly set", "KUALI", parameterId.getApplicationId());
136 }
137
138
139
140
141 @Test
142 public void testPKObjectForExtension() {
143 final Account account = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(Account.class, "b101");
144 assertNotNull("Account should not be null", account);
145 final AccountExtension accountExtension = (AccountExtension)account.getExtension();
146
147 final Object pkValue = MetadataManager.getPersistableBusinessObjectPrimaryKeyObjectWithValuesForExtension(account, accountExtension);
148 assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
149 assertEquals("Single pkValue should be \"b101\"", "b101", pkValue);
150 }
151 }