001    /*
002     * Copyright 2005-2013 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    
017    package edu.sampleu.krad.compview;
018    
019    import com.thoughtworks.selenium.SeleneseTestBase;
020    import org.junit.Test;
021    import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
022    
023    /**
024     * @author Kuali Rice Team (rice.collab@kuali.org)
025     */
026    public class ConstraintsAft extends WebDriverLegacyITBase {
027    
028        /**
029         * /kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page3
030         */
031        public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page3";
032    
033        @Override
034        protected String getBookmarkUrl() {
035            return BOOKMARK_URL;
036        }
037    
038        @Override
039        protected void navigate() throws Exception {
040            waitAndClickKRAD();
041            waitAndClickByXpath(KITCHEN_SINK_XPATH);
042            switchToWindow(KUALI_UIF_COMPONENTS_WINDOW_XPATH);
043            waitAndClickByXpath("//ul[@class='nav nav-list']/li[5]/a");
044            waitAndClickByXpath("//a[@id='UifCompView-Navigation3']");
045        }
046    
047        protected void testConstraints() throws Exception {
048            checkForIncidentReport("testConstraints");
049    
050            // TODO break out into smaller methods, especially if a test flaps. https://jira.kuali.org/browse/KULRICE-9711
051            fireEvent("field10", "focus");
052            waitAndTypeByName("field10", "2");
053            fireEvent("field10", "blur");
054            assertAttributeClassRegexMatches("field10", REGEX_ERROR);
055    
056            fireEvent("field10", "focus");
057            clearTextByName("field10");
058            waitAndTypeByName("field10", "51");
059            fireEvent("field10", "blur");
060            assertAttributeClassRegexMatches("field10", REGEX_ERROR);
061    
062            fireEvent("field10", "focus");
063            clearTextByName("field10");
064            waitAndTypeByName("field10", "25");
065            fireEvent("field10", "blur");
066            assertAttributeClassRegexMatches("field10", REGEX_VALID);
067    
068            waitAndTypeByName("field14", "A");
069            fireEvent("field14", "blur");
070    
071            assertAttributeClassRegexMatches("field14", REGEX_ERROR);
072            clearTextByName("field11");
073            waitAndTypeByName("field11", "A");
074            fireEvent("field11", "blur");
075            assertAttributeClassRegexMatches("field11", REGEX_VALID);
076            assertAttributeClassRegexMatches("field14", REGEX_VALID);
077    
078            clearTextByName("field11");
079            waitAndTypeByName("field11", "");
080            fireEvent("field11", "blur");
081            assertAttributeClassRegexMatches("field14", REGEX_ERROR);
082    
083            clearTextByName("field12");
084            waitAndTypeByName("field12", "A");
085            fireEvent("field12", "blur");
086            assertAttributeClassRegexMatches("field14", REGEX_ERROR);
087    
088            clearTextByName("field13");
089            waitAndTypeByName("field13", "A");
090            fireEvent("field13", "blur");
091            assertAttributeClassRegexMatches("field13", REGEX_VALID);
092            assertAttributeClassRegexMatches("field14", REGEX_VALID);
093    
094            clearTextByName("field11");
095            waitAndTypeByName("field11", "A");
096            fireEvent("field11", "blur");
097            assertAttributeClassRegexMatches("field11", REGEX_VALID);
098            assertAttributeClassRegexMatches("field14", REGEX_VALID);
099    
100            waitAndTypeByName("field18", "A");
101            fireEvent("field18", "blur");
102            assertAttributeClassRegexMatches("field18", REGEX_ERROR);
103    
104            waitAndTypeByName("field15", "A");
105            fireEvent("field15", "blur");
106            assertAttributeClassRegexMatches("field15", REGEX_VALID);
107            assertAttributeClassRegexMatches("field18", REGEX_VALID);
108    
109            clearTextByName("field15");
110            waitAndTypeByName("field15", "");
111            fireEvent("field15", "blur");
112            assertAttributeClassRegexMatches("field18", REGEX_ERROR);
113    
114            clearTextByName("field16");
115            waitAndTypeByName("field16", "A");
116            fireEvent("field16", "blur");
117            assertAttributeClassRegexMatches("field18", REGEX_ERROR);
118    
119            clearTextByName("field17");
120            waitAndTypeByName("field17", "A");
121            fireEvent("field17", "blur");
122            assertAttributeClassRegexMatches("field17", REGEX_VALID);
123            assertAttributeClassRegexMatches("field18", REGEX_VALID);
124    
125            clearTextByName("field15");
126            waitAndTypeByName("field15", "A");
127            fireEvent("field15", "blur");
128            assertAttributeClassRegexMatches("field18", REGEX_ERROR);
129    
130            waitAndTypeByName("field23", "A");
131            fireEvent("field23", "blur");
132            assertAttributeClassRegexMatches("field23", REGEX_ERROR);
133    
134            clearTextByName("field19");
135            waitAndTypeByName("field19", "A");
136            fireEvent("field19", "blur");
137            assertAttributeClassRegexMatches("field23", REGEX_VALID);
138    
139            clearTextByName("field19");
140            waitAndTypeByName("field19", "");
141            fireEvent("field19", "blur");
142            waitAndTypeByName("field20", "B");
143            fireEvent("field20", "blur");
144            assertAttributeClassRegexMatches("field23", REGEX_VALID);
145    
146            clearTextByName("field20");
147            waitAndTypeByName("field20", "");
148            fireEvent("field20", "blur");
149            assertAttributeClassRegexMatches("field23", REGEX_ERROR);
150    
151            clearTextByName("field21");
152            waitAndTypeByName("field21", "C");
153            fireEvent("field21", "blur");
154            assertAttributeClassRegexMatches("field23", REGEX_ERROR);
155    
156            clearTextByName("field22");
157            waitAndTypeByName("field22", "D");
158            fireEvent("field22", "blur");
159            assertAttributeClassRegexMatches("field23", REGEX_VALID);
160    
161            clearTextByName("field19");
162            waitAndTypeByName("field19", "D");
163            fireEvent("field19", "blur");
164            assertAttributeClassRegexMatches("field23", REGEX_VALID);
165    
166            clearTextByName("field20");
167            waitAndTypeByName("field20", "D");
168            fireEvent("field20", "blur");
169            assertAttributeClassRegexMatches("field23", REGEX_VALID);
170    
171            checkByXpath("//*[@name='field24' and @value='case1']");
172            clearTextByName("field25");
173            waitAndTypeByName("field25", "");
174            fireEvent("field25", "blur");
175            assertAttributeClassRegexMatches("field25", REGEX_ERROR);
176    
177            checkByXpath("//*[@name='field24' and @value='case4']");
178            fireEvent("field24", "blur");
179    
180            for (int second = 0;; second++) {
181                if (second >= waitSeconds) {
182                    SeleneseTestBase.fail("timeout");
183                }
184                try {
185                    if (waitAndGetAttributeByName("field25", "class").matches(REGEX_VALID)) {
186                        break;
187                    }
188                } catch (Exception e) {}
189                Thread.sleep(1000);
190            }
191    
192            assertAttributeClassRegexMatches("field25", REGEX_VALID);
193    
194            checkByXpath("//*[@name='field24' and @value='case1']");
195            fireEvent("field24", "blur");
196            clearTextByName("field25");
197            waitAndTypeByName("field25", "$100");
198            fireEvent("field25", "blur");
199    
200            for (int second = 0;; second++) {
201                if (second >= waitSeconds) {
202                    SeleneseTestBase.fail("timeout");
203                }
204                try {
205                    if (waitAndGetAttributeByName("field25", "class").matches(REGEX_VALID)) {
206                        break;
207                    }
208                } catch (Exception e) {}
209                Thread.sleep(1000);
210            }
211    
212            assertAttributeClassRegexMatches("field25", REGEX_VALID);
213    
214            checkByXpath("//*[@name='field24' and @value='case2']");
215            fireEvent("field24", "blur");
216    
217            for (int second = 0;; second++) {
218                if (second >= waitSeconds) {
219                    SeleneseTestBase.fail("timeout");
220                }
221                try {
222                    if (waitAndGetAttributeByName("field25", "class").matches(REGEX_ERROR)) {
223                        break;
224                    }
225                } catch (Exception e) {}
226                Thread.sleep(1000);
227            }
228    
229            assertAttributeClassRegexMatches("field25", REGEX_ERROR);
230    
231            clearTextByName("field25");
232            waitAndTypeByName("field25", "A100");
233            fireEvent("field25", "blur");
234            assertAttributeClassRegexMatches("field25", REGEX_VALID);
235    
236            checkByXpath("//*[@name='field24' and @value='case3']");
237            fireEvent("field24", "blur");
238            clearTextByName("field26");
239            waitAndTypeByName("field26", "6000");
240            fireEvent("field26", "blur");
241    
242            for (int second = 0;; second++) {
243                if (second >= waitSeconds) {
244                    SeleneseTestBase.fail("timeout");
245                }
246                try {
247                    if (waitAndGetAttributeByName("field26", "class").matches(REGEX_ERROR)) {
248                        break;
249                    }
250                } catch (Exception e) {}
251                Thread.sleep(1000);
252            }
253    
254            assertAttributeClassRegexMatches("field26", REGEX_ERROR);
255    
256            clearTextByName("field26");
257            waitAndTypeByName("field26", "501");
258            fireEvent("field26", "blur");
259            assertAttributeClassRegexMatches("field26", REGEX_ERROR);
260    
261            clearTextByName("field26");
262            waitAndTypeByName("field26", "499");
263            fireEvent("field26", "blur");
264            assertAttributeClassRegexMatches("field26", REGEX_VALID);
265    
266            clearTextByName("field26");
267            waitAndTypeByName("field26", "6000");
268            fireEvent("field26", "blur");
269            checkByXpath("//*[@name='field24' and @value='case3']");
270            fireEvent("field24", "blur");
271    
272            for (int second = 0;; second++) {
273                if (second >= waitSeconds) {
274                    SeleneseTestBase.fail("timeout");
275                }
276                try {
277                    if (waitAndGetAttributeByName("field26", "class").matches(REGEX_ERROR)) {
278                        break;
279                    }
280                } catch (Exception e) {}
281                Thread.sleep(1000);
282            }
283    
284            assertAttributeClassRegexMatches("field26", REGEX_ERROR);
285    
286            checkByXpath("//*[@name='field24' and @value='case4']");
287            clearTextByName("field27");
288            waitAndTypeByName("field27", "A");
289            fireEvent("field27", "blur");
290            clearTextByName("field28");
291            waitAndTypeByName("field28", "");
292            fireEvent("field28", "blur");
293    
294            for (int second = 0;; second++) {
295                if (second >= waitSeconds) {
296                    SeleneseTestBase.fail("timeout");
297                }
298                try {
299                    if (waitAndGetAttributeByName("field28", "class").matches(REGEX_ERROR)) {
300                        break;
301                    }
302                } catch (Exception e) {}
303                Thread.sleep(1000);
304            }
305    
306            assertAttributeClassRegexMatches("field28", REGEX_ERROR);
307    
308            checkByXpath("//*[@name='field24' and @value='case3']");
309            fireEvent("field24", "blur");
310    
311            for (int second = 0;; second++) {
312                if (second >= waitSeconds) {
313                    SeleneseTestBase.fail("timeout");
314                }
315                try {
316                    if (waitAndGetAttributeByName("field28", "class").matches(REGEX_VALID)) {
317                        break;
318                    }
319                } catch (Exception e) {}
320                Thread.sleep(1000);
321            }
322    
323            assertAttributeClassRegexMatches("field28", REGEX_VALID);
324    
325            clearTextByName("field28");
326            waitAndTypeByName("field28", "B");
327            fireEvent("field28", "blur");
328            checkByXpath("//*[@name='field24' and @value='case4']");
329            fireEvent("field24", "blur");
330    
331            for (int second = 0;; second++) {
332                if (second >= waitSeconds) {
333                    SeleneseTestBase.fail("timeout");
334                }
335                try {
336                    if (waitAndGetAttributeByName("field28", "class").matches(REGEX_VALID)) {
337                        break;
338                    }
339                } catch (Exception e) {}
340                Thread.sleep(1000);
341            }
342    
343            assertAttributeClassRegexMatches("field28", REGEX_VALID);
344    
345            clearTextByName("field31");
346            waitAndTypeByName("field31", "B");
347            clearTextByName("field32");
348            waitAndTypeByName("field32", "B");
349            waitAndTypeByName("field33", "");
350            fireEvent("field33", "blur");
351            assertAttributeClassRegexMatches("field33", REGEX_ERROR);
352    
353            clearTextByName("field33");
354            waitAndTypeByName("field33", "B");
355            fireEvent("field33", "blur");
356            assertAttributeClassRegexMatches("field33", REGEX_VALID);
357    
358            clearTextByName("field32");
359            waitAndTypeByName("field32", "A");
360            clearTextByName("field33");
361            waitAndTypeByName("field33", "");
362            fireEvent("field33", "blur");
363            assertAttributeClassRegexMatches("field33", REGEX_VALID);
364        }
365    
366        @Test
367        public void testConstraintsBookmark() throws Exception {
368            testConstraints();
369            passed();
370        }
371    
372        @Test
373        public void testConstraintsNav() throws Exception {
374            testConstraints();
375            passed();
376        }
377    }