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.shareddata.impl.country.CountryBo;
28  import org.kuali.rice.shareddata.impl.state.StateBo;
29  import org.kuali.rice.shareddata.impl.state.StateId;
30  import org.kuali.test.KRADTestCase;
31  
32  import java.util.HashMap;
33  import java.util.Map;
34  
35  import static org.junit.Assert.*;
36  
37  
38  
39  
40  
41  
42  
43  public class MetadataManagerTest extends KRADTestCase {
44  	
45  
46  
47  	@Test
48  	public void testPKMapToObject() {
49  		Map<String, Object> pkMap = new HashMap<String, Object>();
50  		Object pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
51  		assertNull("An empty map should return a null key", pkValue);
52  		
53  		pkMap.put("code", "AN");
54  		pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
55  		assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
56  		assertEquals("Single pkValue should be \"AN\"", "AN", pkValue);
57  		
58  		pkMap.put("name", "ANDORRA");
59  		boolean exceptionThrown = false;
60  		try {
61  			pkValue = MetadataManager.convertPrimaryKeyMapToObject(CountryBo.class, pkMap);
62  		} catch (IllegalArgumentException iae) {
63  			exceptionThrown = true;
64  		}
65  		assertTrue("Multiple keys did not lead to exception", exceptionThrown);
66  		
67  		pkMap.clear();
68  		
69  		pkMap.put("countryCode", "US");
70  		pkMap.put("code", "WV");
71  		pkValue = MetadataManager.convertPrimaryKeyMapToObject(StateBo.class, pkMap);
72  		org.junit.Assert.assertEquals("Composite pkValue for State should have class of StateId", StateId.class, pkValue.getClass());
73  		StateId stateId = (StateId)pkValue;
74  		assertEquals("Country code was not correctly set", "US", stateId.getCountryCode());
75  		assertEquals("State code was not correctly set", "WV", stateId.getCode());
76  		
77  		pkMap.put("name", "WEST VIRGINIA");
78  		exceptionThrown = false;
79  		try {
80  			pkValue = MetadataManager.convertPrimaryKeyMapToObject(StateBo.class, pkMap);
81  		} catch (Exception e) {
82  			exceptionThrown = true;
83  		}
84  		assertTrue("Non primary key field caused exception", exceptionThrown);
85  	}
86  	
87  	
88  
89  
90  
91  	@Test
92  	public void testPKObjectForEntity() {
93  		ParameterTypeBo parameterType = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(ParameterTypeBo.class, "CONFG");
94  		assertNotNull("ParameterType should not be null", parameterType);
95  		
96  		Object pkValue = MetadataManager.getEntityPrimaryKeyObject(parameterType);
97  		assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
98  		assertEquals("Single pkValue should be \"CONFG\"", "CONFG", pkValue);
99  		
100 		Parameter parameter = CoreFrameworkServiceLocator.getParameterService().getParameter("KR-NS", "Lookup", "MULTIPLE_VALUE_RESULTS_PER_PAGE");
101 		assertNotNull("State should not be null", parameter);
102 		
103 		pkValue = MetadataManager.getEntityPrimaryKeyObject(ParameterBo.from(parameter));
104 		org.junit.Assert.assertEquals("Composite pkValue for Parameter should have class of ParameterId", ParameterId.class, pkValue.getClass());
105 		ParameterId parameterId = (ParameterId)pkValue;
106 		assertEquals("namespace code was not correctly set", "KR-NS", parameterId.getNamespaceCode());
107 		assertEquals("parameter detail type code was not correctly set", "Lookup", parameterId.getComponentCode());
108 		assertEquals("parameter name was not correctly set", "MULTIPLE_VALUE_RESULTS_PER_PAGE", parameterId.getName());
109 		assertEquals("parameterApplicationNamespaceCode was not correctly set", "KUALI", parameterId.getApplicationId());
110 	}
111 	
112 	
113 
114 
115 	@Test
116 	public void testPKObjectForExtension() {
117 		final Account account = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(Account.class, "a1");
118 		assertNotNull("Account should not be null", account);
119 		final AccountExtension accountExtension = (AccountExtension)account.getExtension();
120 		
121 		final Object pkValue = MetadataManager.getPersistableBusinessObjectPrimaryKeyObjectWithValuesForExtension(account, accountExtension);
122 		assertEquals("Single pkValue should be of class String", String.class, pkValue.getClass());
123 		assertEquals("Single pkValue should be \"a1\"", "a1", pkValue);
124 	}
125 }