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