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