View Javadoc
1   /**
2    * Copyright 2005-2016 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package edu.sampleu.main;
17  
18  import org.apache.commons.lang3.StringUtils;
19  import org.junit.Test;
20  import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils;
21  import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
22  import org.kuali.rice.testtools.selenium.WebDriverUtils;
23  
24  /**
25   * test that checks that rules can be added to agendas
26   *
27   * @author Kuali Rice Team (rice.collab@kuali.org)
28   */
29  public class AgendaEditorAddRuleAft extends WebDriverLegacyITBase {
30  
31      public static String KRAD_PORTAL_BASE = "/kr-krad/";
32      public static String AGENDA_EDITOR_BASE = "krmsAgendaEditor";
33  
34      public static String NEW_DATA_OBJ_PATH = "document.newMaintainableObject.dataObject.";
35  
36      public static final String BOOKMARK_URL =
37              AutomatedFunctionalTestUtils.PORTAL
38                      + "?channelTitle=Agenda%20Lookup&channelUrl="
39                      + WebDriverUtils.getBaseUrlString()
40                      + AutomatedFunctionalTestUtils.KRAD_LOOKUP_METHOD
41                      + "org.kuali.rice.krms.impl.repository.AgendaBo"
42                      + AutomatedFunctionalTestUtils.SHOW_MAINTENANCE_LINKS
43                      + "&returnLocation="
44                      + AutomatedFunctionalTestUtils.PORTAL_URL
45                      + AutomatedFunctionalTestUtils.HIDE_RETURN_LINK;
46  
47      @Override
48      protected String getBookmarkUrl() {
49          return BOOKMARK_URL;
50      }
51  
52      @Override
53      protected void navigate() throws Exception {
54          waitAndClickByLinkText(AGENDA_LOOKUP_LINK_TEXT);
55          waitForPageToLoad();
56      }
57  
58      protected void testAgendaEditorAddRuleWithSimpleProposition() throws Exception {
59          String uniqId = AutomatedFunctionalTestUtils.createUniqueDtsPlusTwoRandomCharsNot9Digits();
60          String agendaName = "AgendaEditorAddRuleAft " + uniqId;
61          String ruleName = "AgendaEditorAddRuleAft Rule " + "1" + " " + uniqId;
62  
63          selectFrameIframePortlet();
64          waitAndClickLinkContainingText("Create New");
65  
66          // add agenda information
67          String docId = waitForAgendaDocId();
68          addNewAgendaInformation(agendaName, "Kuali Rules Test", "Context1");
69          // dynamic agenda details
70          Thread.sleep(500); // tab is happening to fast
71          unfocusElement();
72          unfocusElement();
73          waitAndTypeByName(NEW_DATA_OBJ_PATH + "agenda.typeId", "Campus Agenda");
74          unfocusElement();
75          waitAndTypeByName(NEW_DATA_OBJ_PATH + "customAttributesMap[Campus]", "BL");
76          waitAndClickButtonByText("Add Rule");
77  
78          // add agenda rule information
79          waitForPageToLoad();
80          addNewAgendaRuleInformation("Validation Rule", "", ruleName);
81          waitAndClickButtonByExactText("Add"); // add proposition button
82          addRulePropositionInfo("0", "Campus must have students", "", "Bloomington Campus Size", ">", "1");
83          addNewRuleActionInformation("KrmsActionResolverType", "test", "test");
84          waitAndClickButtonByText("Add Rule");
85  
86          // validate rule exists
87          waitForTextPresent(ruleName);
88          waitAndClickSubmitByText();
89          waitAndClickConfirmSubmitOk();
90          waitForTextPresent("Document was successfully submitted", WebDriverUtils.configuredImplicityWait() * 2);
91          assertDocSearch(docId, "FINAL");
92          passed();
93      }
94  
95  
96      protected void addNewAgendaInformation(String agendaName, String agendaNamespace, String agendaContext) throws Exception {
97          waitAndSelectByName(NEW_DATA_OBJ_PATH + "namespace", agendaNamespace);
98          waitAndTypeByName(NEW_DATA_OBJ_PATH + "agenda.name", agendaName);
99          waitAndTypeByName(NEW_DATA_OBJ_PATH + "contextName", agendaContext);
100     }
101 
102     protected void addNewAgendaRuleInformation(String ruleType, String ruleTypeCode, String ruleName) throws Exception {
103         waitAndSelectByName(NEW_DATA_OBJ_PATH + "agendaItemLine.rule.typeId", ruleType);
104 
105         if (StringUtils.isNotBlank(ruleTypeCode)) {
106             waitAndSelectByName(NEW_DATA_OBJ_PATH + "customRuleAttributesMap[ruleTypeCode]", ruleTypeCode);
107         }
108 
109         // validate that Type selected is Validation Rule
110         assertTrue("Expected ruleTypeCode dropdown value not found ",isElementPresentByXpath(
111                 "//option[@selected='selected' and @value='1002']"));
112 
113         waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLine.rule.name", ruleName);
114     }
115 
116     protected void addRulePropositionInfo(String childIndex, String description, String category, String propTerm,
117             String propComparison, String propositionValue) throws Exception {
118         String propTreeRootPath = NEW_DATA_OBJ_PATH + "agendaItemLine.rule.propositionTree.rootElement.";
119         String propTreeChildPath = propTreeRootPath + "children[" + childIndex + "].";
120         String propositionPath = propTreeChildPath + "data.proposition.";
121 
122         if (StringUtils.isNoneBlank(description)) {
123             waitAndTypeByName(propositionPath + "description", description);
124         }
125 
126         if (StringUtils.isNoneBlank(category)) {
127             waitAndSelectByName(propositionPath + "categoryId", category);
128         }
129 
130         if (StringUtils.isNoneBlank(propTerm)) {
131             waitAndSelectByName(propositionPath + "parameters[0].value", propTerm);
132         }
133 
134         if (StringUtils.isNoneBlank(propComparison)) {
135             waitAndSelectByName(propositionPath + "parameters[2].value", propComparison);
136             unfocusElement();
137             Thread.sleep(8000); // need time for next input to be reloaded
138         }
139 
140         if (StringUtils.isNoneBlank(propositionValue)) {
141             waitAndTypeByName(propositionPath + "parameters[1].value", propositionValue);
142         }
143     }
144 
145     protected void addNewRuleActionInformation(String actionType, String actionName,
146             String actionDescription) throws Exception {
147         // select action elements
148         waitAndSelectByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.typeId", actionType);
149         waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.name", actionName);
150         waitAndTypeByName(NEW_DATA_OBJ_PATH + "agendaItemLineRuleAction.description", actionDescription);
151     }
152 
153 
154     protected void unfocusElement() {
155         typeTab();
156     }
157 
158     /**
159      * test that a rule can be added to an agenda
160      */
161     @Test
162     public void testAgendaEditorAddRuleNav() throws Exception {
163         testAgendaEditorAddRuleWithSimpleProposition();
164     }
165 
166 }
167