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.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.ObjectCode;
029    import org.kuali.kpme.core.util.HrTestConstants;
030    import org.kuali.rice.krad.service.KRADServiceLocator;
031    
032    import com.gargoylesoftware.htmlunit.html.HtmlInput;
033    import com.gargoylesoftware.htmlunit.html.HtmlPage;
034    
035    public class ObjectCodeMaintTest extends KPMEWebTestCase {
036            
037            private static final String NEW_MAINT_DOC_PREFIX = "document.newMaintainableObject.";
038            private String newUrl;
039            private String lookupUrl;
040            private Map<String,String> requiredFields;
041    
042            @Override
043            public void setUp() throws Exception {
044                    super.setUp();
045                    before();
046            }
047    
048            @Override
049            public void tearDown() throws Exception {
050                    after();
051                    super.tearDown();
052            }
053            
054            private void setDefaultTestInputValues() {
055                    requiredFields = new HashMap<String,String>();
056                    requiredFields.put("active", "on");
057                    requiredFields.put("universityFiscalYear", "2013");
058                    requiredFields.put("chartOfAccountsCode", "UA");
059                    requiredFields.put("financialObjectCode", "3000");
060                    requiredFields.put("financialObjectCodeName", "Regular Earnings");
061                    requiredFields.put("financialObjectCodeShortName", "Reg Earns");
062            }
063            
064            private void before() {
065                    
066                    newUrl = HrTestConstants.Urls.OBJECT_CODE_MAINT_NEW_URL;
067                    lookupUrl = HrTestConstants.Urls.OBJECT_CODE_MAINT_URL;
068                    
069                    requiredFields = new HashMap<String,String>();
070                    requiredFields.put("universityFiscalYear", "Fiscal Year (FY) is a required field.");
071                    requiredFields.put("chartOfAccountsCode", "Chart of Accounts Code (ChartOfAccountsCode) is a required field.");
072                    requiredFields.put("financialObjectCode", "Object Code (Object) is a required field.");
073                    requiredFields.put("financialObjectCodeName", "Object Code Name (ObjCodeName) is a required field.");
074                    requiredFields.put("financialObjectCodeShortName", "Object Code Short Name (ObjCodeShortName) is a required field.");
075            }
076            
077            private void after() {
078                    requiredFields.clear();
079            }
080            
081            @Test
082            public void testRequiredFields() throws Exception {
083                    HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
084                    assertNotNull("maintenance page is null", maintPage);
085                    
086                    HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
087                    assertNotNull("maintenance page does not contain document description", docDescription);
088                    
089                    docDescription.setValueAttribute("testing submission");
090                    
091                    HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
092                    assertNotNull("no result page returned after submit", resultPage);
093                    
094                    String resultPageAsText = resultPage.asText();
095                    for(Entry<String,String> requiredField : requiredFields.entrySet()) {
096                            assertTrue("page does not contain error message for required field: '" + requiredField.getKey() + "'",
097                                            resultPageAsText.contains(requiredField.getValue()));
098                    }
099            }
100            
101            @Test
102            public void testLookup() throws Exception {
103                    HtmlPage lookupPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), lookupUrl);
104                    assertNotNull("lookup page is null", lookupPage);
105                    
106                    HtmlUnitUtil.setFieldValue(lookupPage, "universityFiscalYear", "2013");
107                    
108                    lookupPage = HtmlUnitUtil.clickInputContainingText(lookupPage, "search");
109                    assertNotNull("lookup result page is null", lookupPage);
110                    
111                    String lookupPageAsText = lookupPage.asText();
112                    assertTrue("lookup result page should contain three records",
113                                    lookupPageAsText.contains("9000") && lookupPageAsText.contains("1000") && lookupPageAsText.contains("2000"));
114                    
115            }
116            
117            @Test
118            public void testInValidChart() throws Exception {
119                    /**
120                     * TODO: submit sub-object code whose object COA and account COA codes
121                     * match the COA specified on this sub-object, but the account is open.
122                     * 
123                     * This test was changed from asserting a successful submission to asserting a non-successful
124                     * insertion. Test data was added that marked the account used in this test as closed. Validation
125                     * fails for closed accounts.
126                     * 
127                     */
128                    HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
129                    assertNotNull("maintenance page is null", maintPage);
130                    
131                    HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
132                    assertNotNull("maintenance page does not contain document description", docDescription);
133                    
134                    setDefaultTestInputValues();
135                    for(Entry<String,String> entry : requiredFields.entrySet()) {
136                            HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + entry.getKey(), entry.getValue());
137                    }
138                    docDescription.setValueAttribute("testing submission");
139                    // use a non-existent chart
140                    HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + "chartOfAccountsCode","BP");
141    
142                    HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
143    
144                    assertTrue("page should contain active chart existence error", resultPage.asText().contains("No active chart exists for this code"));
145            }
146            
147            @Test
148            public void testValidChart() throws Exception {
149    
150                    HtmlPage maintPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), newUrl);
151                    assertNotNull("maintenance page is null", maintPage);
152                    
153                    HtmlInput docDescription = HtmlUnitUtil.getInputContainingText(maintPage, "* Document Description");
154                    assertNotNull("maintenance page does not contain document description", docDescription);
155                    
156                    setDefaultTestInputValues();
157                    for(Entry<String,String> entry : requiredFields.entrySet()) {
158                            HtmlUnitUtil.setFieldValue(maintPage, NEW_MAINT_DOC_PREFIX + entry.getKey(), entry.getValue());
159                    }
160                    docDescription.setValueAttribute("testing submission");
161    
162                    HtmlPage resultPage = HtmlUnitUtil.clickInputContainingText(maintPage, "submit");
163                    assertTrue("page should contain active account existence error", !resultPage.asText().contains("error(s)"));
164                    
165                    Map<String,String> keys = new HashMap<String,String>();
166                    keys.put("chartOfAccountsCode", "UA");
167                    keys.put("universityFiscalYear", "2013");
168                    keys.put("financialObjectCode", "3000");
169                    
170                    ObjectCode objectCode = (ObjectCode) KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(ObjectCode.class, keys);
171                    assertNotNull("newly created sub-object code should exist", objectCode);
172                    //clean up after assertion.
173                    KRADServiceLocator.getBusinessObjectService().delete(objectCode);
174            }
175    
176    }