001 /** 002 * Copyright 2005-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 edu.sampleu.main; 017 018 import org.apache.commons.lang3.StringUtils; 019 import org.junit.Test; 020 import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils; 021 import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase; 022 import org.kuali.rice.testtools.selenium.WebDriverUtils; 023 import org.openqa.selenium.Keys; 024 025 /** 026 * test that checks that rules can be added to agendas 027 * 028 * @author Kuali Rice Team (rice.collab@kuali.org) 029 */ 030 public class AgendaEditorAddRuleAft extends WebDriverLegacyITBase { 031 032 public static String KRAD_PORTAL_BASE = "/kr-krad/"; 033 public static String AGENDA_EDITOR_BASE = "krmsAgendaEditor"; 034 035 public static String NEW_DATA_OBJ_PATH = "document.newMaintainableObject.dataObject."; 036 037 public static final String BOOKMARK_URL = 038 AutomatedFunctionalTestUtils.PORTAL 039 + "?channelTitle=Agenda%20Lookup&channelUrl=" 040 + WebDriverUtils.getBaseUrlString() 041 + AutomatedFunctionalTestUtils.KRAD_LOOKUP_METHOD 042 + "org.kuali.rice.krms.impl.repository.AgendaBo" 043 + AutomatedFunctionalTestUtils.SHOW_MAINTENANCE_LINKS 044 + "&returnLocation=" 045 + AutomatedFunctionalTestUtils.PORTAL_URL 046 + AutomatedFunctionalTestUtils.HIDE_RETURN_LINK; 047 048 @Override 049 protected String getBookmarkUrl() { 050 return BOOKMARK_URL; 051 } 052 053 @Override 054 protected void navigate() throws Exception { 055 waitAndClickByLinkText(AGENDA_LOOKUP_LINK_TEXT); 056 waitForPageToLoad(); 057 } 058 059 protected void testAgendaEditorAddRuleWithSimpleProposition() throws Exception { 060 String uniqId = AutomatedFunctionalTestUtils.createUniqueDtsPlusTwoRandomCharsNot9Digits(); 061 String agendaName = "AgendaEditorAddRuleAft " + uniqId; 062 String ruleName = "AgendaEditorAddRuleAft Rule " + "1" + " " + uniqId; 063 064 selectFrameIframePortlet(); 065 waitAndClickLinkContainingText("Create New"); 066 067 // add agenda information 068 waitForPageToLoad(); 069 addNewAgendaInformation(agendaName, "Kuali Rules Test", "Context1"); 070 // dynamic agenda details 071 Thread.sleep(500); // tab is happening to fast 072 unfocusElement(); 073 waitAndTypeByName(NEW_DATA_OBJ_PATH + "agenda.typeId", "Campus Agenda"); 074 unfocusElement(); 075 waitAndTypeByName(NEW_DATA_OBJ_PATH + "customAttributesMap[Campus]", "BL"); 076 waitAndClickButtonByText("Add Rule"); 077 078 // add agenda rule information 079 waitForPageToLoad(); 080 addNewAgendaRuleInformation("Validation Rule", "", ruleName); 081 waitAndClickButtonByExactText("Add"); // add proposition button 082 addRulePropositionInfo("0", "Campus must have students", "", "Bloomington Campus Size", ">", "1"); 083 addNewRuleActionInformation("KrmsActionResolverType", "test", "test"); 084 waitAndClickButtonByText("Add Rule"); 085 086 // validate rule exists 087 waitForPageToLoad(); 088 assertTextPresent(ruleName); 089 waitAndClickLinkContainingText("Cancel"); 090 passed(); 091 } 092 093 094 protected void addNewAgendaInformation(String agendaName, String agendaNamespace, String agendaContext) throws Exception { 095 waitAndSelectByName(NEW_DATA_OBJ_PATH + "namespace", agendaNamespace); 096 waitAndTypeByName(NEW_DATA_OBJ_PATH + "agenda.name", agendaName); 097 waitAndTypeByName(NEW_DATA_OBJ_PATH + "contextName", agendaContext); 098 } 099 100 protected void addNewAgendaRuleInformation(String ruleType, String ruleTypeCode, String ruleName) throws Exception { 101 waitAndSelectByName(NEW_DATA_OBJ_PATH + "agendaItemLine.rule.typeId", ruleType); 102 103 if (StringUtils.isNotBlank(ruleTypeCode)) { 104 waitAndSelectByName(NEW_DATA_OBJ_PATH + "customRuleAttributesMap[ruleTypeCode]", ruleTypeCode); 105 } 106 107 // validate that Type selected is Validation Rule 108 assertTrue("Expected ruleTypeCode dropdown value not found ",isElementPresentByXpath( 109 "//option[@selected='selected' and @value='1002']")); 110 111 waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLine.rule.name", ruleName); 112 } 113 114 protected void addRulePropositionInfo(String childIndex, String description, String category, String propTerm, 115 String propComparison, String propositionValue) throws Exception { 116 String propTreeRootPath = NEW_DATA_OBJ_PATH + "agendaItemLine.rule.propositionTree.rootElement."; 117 String propTreeChildPath = propTreeRootPath + "children[" + childIndex + "]."; 118 String propositionPath = propTreeChildPath + "data.proposition."; 119 120 if (StringUtils.isNoneBlank(description)) { 121 waitAndTypeByName(propositionPath + "description", description); 122 } 123 124 if (StringUtils.isNoneBlank(category)) { 125 waitAndSelectByName(propositionPath + "categoryId", category); 126 } 127 128 if (StringUtils.isNoneBlank(propTerm)) { 129 waitAndSelectByName(propositionPath + "parameters[0].value", propTerm); 130 } 131 132 if (StringUtils.isNoneBlank(propComparison)) { 133 waitAndSelectByName(propositionPath + "parameters[2].value", propComparison); 134 unfocusElement(); 135 Thread.sleep(1500); // need time for next input to be reloaded 136 } 137 138 if (StringUtils.isNoneBlank(propositionValue)) { 139 waitAndTypeByName(propositionPath + "parameters[1].value", propositionValue); 140 } 141 } 142 143 protected void addNewRuleActionInformation(String actionType, String actionName, 144 String actionDescription) throws Exception { 145 // select action elements 146 waitAndSelectByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.typeId", actionType); 147 waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.name", actionName); 148 waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.description", actionDescription); 149 } 150 151 152 protected void unfocusElement() { 153 driver.switchTo().activeElement().sendKeys(Keys.TAB); 154 } 155 156 /** 157 * test that a rule can be added to an agenda 158 */ 159 @Test 160 public void testAgendaEditorAddRuleNav() throws Exception { 161 testAgendaEditorAddRuleWithSimpleProposition(); 162 } 163 164 } 165