001 /**
002 * Copyright 2004-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.hr.core.kfs;
017
018 import static org.junit.Assert.assertNotNull;
019 import static org.junit.Assert.assertTrue;
020
021 import java.util.HashMap;
022 import java.util.Map;
023 import java.util.Map.Entry;
024
025 import org.junit.Test;
026 import org.kuali.hr.KPMEWebTestCase;
027 import org.kuali.hr.util.HtmlUnitUtil;
028 import org.kuali.kpme.core.kfs.coa.businessobject.Account;
029 import org.kuali.kpme.core.kfs.coa.businessobject.Organization;
030 import org.kuali.kpme.core.util.HrTestConstants;
031 import org.kuali.rice.krad.service.KRADServiceLocator;
032
033 import com.gargoylesoftware.htmlunit.html.HtmlInput;
034 import com.gargoylesoftware.htmlunit.html.HtmlPage;
035
036 public class OrganizationMaintTest extends KPMEWebTestCase {
037 //TODO: find constant in outside scope, or define one outside of this scope.
038 private static final String NEW_MAINT_DOC_PREFIX = "document.newMaintainableObject.";
039 private String newUrl;
040 private String lookupUrl;
041 private Map<String,String> requiredFields;
042
043 @Override
044 public void setUp() throws Exception {
045 super.setUp();
046 before();
047 }
048
049 @Override
050 public void tearDown() throws Exception {
051 after();
052 super.tearDown();
053 }
054
055 private void setDefaultTestInputValues() {
056 requiredFields = new HashMap<String,String>();
057 requiredFields.put("active", "on");
058 requiredFields.put("chartOfAccountsCode", "UA");
059 requiredFields.put("organizationCode", "A-ORG-CD");
060 requiredFields.put("organizationName", "ANOTHER ORGANIZATION");
061 }
062
063 private void before() {
064
065 newUrl = HrTestConstants.Urls.ORGANIZATION_MAINT_NEW_URL;
066 lookupUrl = HrTestConstants.Urls.ORGANIZATION_MAINT_URL;
067
068 requiredFields = new HashMap<String,String>();
069 requiredFields.put("chartOfAccountsCode", "Chart Code (Chart) is a required field.");
070 requiredFields.put("organizationCode", "Organization Code (Org) is a required field.");
071 requiredFields.put("organizationName", "Organization Name (Org Name) is a required field.");
072 }
073
074 private void after() {
075 requiredFields.clear();
076 }
077
078 @Test
079 public void testRequiredFields() throws Exception {
080 HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
081 assertNotNull("maintenance page is null", maintPage);
082
083 HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
084 assertNotNull("maintenance page does not contain document description", docDescription);
085
086 docDescription.setValueAttribute("testing submission");
087
088 HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
089 assertNotNull("no result page returned after submit", resultPage);
090
091 String resultPageAsText = resultPage.asText();
092 for(Entry<String,String> requiredField : requiredFields.entrySet()) {
093 assertTrue("page does not contain error message for required field: '" + requiredField.getKey() + "'",
094 resultPageAsText.contains(requiredField.getValue()));
095 }
096 }
097
098 @Test
099 public void testLookup() throws Exception {
100 HtmlPage lookupPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), lookupUrl);
101 assertNotNull("lookup page is null", lookupPage);
102
103 lookupPage = HtmlUnitUtil.clickInputContainingText(lookupPage, "search");
104 assertNotNull("lookup result page is null", lookupPage);
105
106 assertTrue("lookup result page should contain one record", lookupPage.asText().contains("ORG-CODE"));
107 }
108
109 @Test
110 public void testInValidChart() throws Exception {
111 /**
112 * TODO: submit sub-object code whose object COA and account COA codes
113 * match the COA specified on this sub-object, but the account is open.
114 *
115 * This test was changed from asserting a successful submission to asserting a non-successful
116 * insertion. Test data was added that marked the account used in this test as closed. Validation
117 * fails for closed accounts.
118 *
119 */
120 HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
121 assertNotNull("maintenance page is null", maintPage);
122
123 HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
124 assertNotNull("maintenance page does not contain document description", docDescription);
125
126 setDefaultTestInputValues();
127 for(Entry<String,String> entry : requiredFields.entrySet()) {
128 HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + entry.getKey(), entry.getValue());
129 }
130 docDescription.setValueAttribute("testing submission");
131 // use a non-existent chart
132 HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + "chartOfAccountsCode","BP");
133
134 HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
135 assertTrue("page should contain active account existence error", resultPage.asText().contains("No active chart exists for this code"));
136 }
137
138 @Test
139 public void testValidChart() throws Exception {
140
141 HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
142 assertNotNull("maintenance page is null", maintPage);
143
144 HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
145 assertNotNull("maintenance page does not contain document description", docDescription);
146
147 setDefaultTestInputValues();
148 for(Entry<String,String> entry : requiredFields.entrySet()) {
149 HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + entry.getKey(), entry.getValue());
150 }
151 docDescription.setValueAttribute("testing submission");
152
153 HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
154 assertTrue("page should contain active account existence error", !resultPage.asText().contains("error(s)"));
155
156 Map<String,String> keys = new HashMap<String,String>();
157 keys.put("chartOfAccountsCode", "UA");
158 keys.put("organizationCode", "A-ORG-CD");
159
160 Organization organization = (Organization) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(Organization.class, keys);
161 assertNotNull("newly created sub-object code should exist", organization);
162 //clean up after assertion.
163 KRADServiceLocator.getBusinessObjectService().delete(organization);
164 }
165
166 }