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    package edu.samplu.krad.demo.uif.library;
017    
018    import org.kuali.rice.testtools.selenium.JiraAwareFailureUtil;
019    import org.junit.Assert;
020    import org.junit.Rule;
021    import org.junit.Test;
022    import org.junit.rules.ExpectedException;
023    import org.kuali.rice.krad.uif.UifConstants;
024    import org.openqa.selenium.By;
025    import org.openqa.selenium.WebElement;
026    
027    /**
028     * @author Kuali Rice Team (rice.collab@kuali.org)
029     */
030    public class DemoLibraryFieldsDataSmokeTest extends DemoLibraryBase {
031    
032        /**
033         * /kr-krad/kradsampleapp?viewId=Demo-DataField-View&methodToCall=start
034         */
035        public static final String BOOKMARK_URL = "/kr-krad/kradsampleapp?viewId=Demo-DataField-View&methodToCall=start";
036        public static final String DIV_DATA_LABEL_DATA_FIELD_1 = "div[data-label='DataField 1']";
037    
038        @Rule
039        public ExpectedException exception = ExpectedException.none();
040    
041        @Override
042        public String getBookmarkUrl() {
043            return BOOKMARK_URL;
044        }
045    
046        @Override
047        protected void navigate() throws Exception {
048            navigateToLibraryDemo("Fields", "Data Field");
049        }
050    
051        protected void testDataFieldDefault() throws Exception {
052            WebElement exampleDiv = navigateToExample("Demo-DataField-Example1");
053            WebElement field = findElement(By.cssSelector(DIV_DATA_LABEL_DATA_FIELD_1), exampleDiv);
054    
055            String fieldId = field.getAttribute("id");
056            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
057    
058            assertIsVisible("#" + fieldId);
059            assertIsVisible("label[for='" + controlId + "']");
060            WebElement label = findElement(By.cssSelector("label[for='" + controlId + "']"), field);
061            if (!label.getText().contains("DataField 1:")) {
062                fail("Label text does not match");
063            }
064    
065            assertIsVisible("#" + controlId);
066            assertTextPresent("1001", "#" + controlId, "DataField value not correct");
067    
068            // validate that the value comes after the label
069            findElement(By.cssSelector("span[data-label_for='" + fieldId + "'] + span[id='" + controlId + "']"),
070                    exampleDiv);
071        }
072    
073        protected void testDataFieldLabelTop() throws Exception {
074            WebElement exampleDiv = navigateToExample("Demo-DataField-Example2");
075            WebElement field = findElement(By.cssSelector(DIV_DATA_LABEL_DATA_FIELD_1), exampleDiv);
076    
077            String fieldId = field.getAttribute("id");
078            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
079    
080            assertIsVisible("#" + fieldId);
081            assertIsVisible("label[for='" + controlId + "']");
082            WebElement label = findElement(By.cssSelector("label[for='" + controlId + "']"), field);
083            if (!label.getText().contains("DataField 1:")) {
084                fail("Label text does not match");
085            }
086    
087            WebElement labelSpan = findElement(By.cssSelector("span[data-label_for='" + fieldId + "']"), field);
088            // top and bottom add the uif-labelBlock class
089            if (!labelSpan.getAttribute("class").contains("uif-labelBlock")) {
090                fail("Label span does not contain the appropriate class expected");
091            }
092        }
093    
094        protected void testDataFieldLabelRight() throws Exception {
095            WebElement exampleDiv = navigateToExample("Demo-DataField-Example3");
096            WebElement field = findElement(By.cssSelector(DIV_DATA_LABEL_DATA_FIELD_1), exampleDiv);
097    
098            String fieldId = field.getAttribute("id");
099            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
100    
101            assertIsVisible("#" + controlId);
102            assertTextPresent("1001", "#" + controlId, "DataField value not correct");
103    
104            assertIsVisible("#" + fieldId);
105            assertIsVisible("label[for='" + controlId + "']");
106            WebElement label = findElement(By.cssSelector("[for='" + controlId + "']"), field);
107            if (!label.getText().contains("DataField 1")) {
108                fail("Label text does not match");
109            }
110    
111            // validate that the label comes after the value
112            findElement(By.cssSelector("span[id='" + controlId + "'] + span[data-label_for='" + fieldId + "']"),
113                    exampleDiv);
114        }
115    
116        protected void testDataFieldDefaultValue() throws Exception {
117            String valueText = textValueUnderTest("Demo-DataField-Example4", "DataField 2");
118            if(!"2012".equals(valueText)) {
119                JiraAwareFailureUtil.fail("Fields Data Field Default Value 2012 not displayed", this);
120            }
121        }
122    
123        protected void testDataFieldAppendProperty() throws Exception {
124            String valueText = textValueUnderTest("Demo-DataField-Example5", "DataField 1");
125            Assert.assertTrue(valueText.endsWith("ID Val"));
126        }
127    
128        protected void testDataFieldReplaceProperty() throws Exception {
129            String valueText = textValueUnderTest("Demo-DataField-Example6", "DataField 1");
130            Assert.assertEquals("ID Val", valueText);
131        }
132    
133        protected void testDataFieldReplacePropertyWithField() throws Exception {
134            String valueText = textValueUnderTest("Demo-DataField-Example7", "DataField 1");
135            Assert.assertEquals("My Book Title", valueText);
136        }
137    
138        protected void testDataFieldAppendPropertyWithField() throws Exception {
139            String valueText = textValueUnderTest("Demo-DataField-Example8", "DataField 1");
140            Assert.assertEquals("1001 *-* My Book Title", valueText);
141        }
142    
143        protected void testDataFieldApplyFullMask() throws Exception {
144            String valueText = textValueUnderTest("Demo-DataField-Example9", "DataField 1");
145            Assert.assertEquals("*********", valueText);
146        }
147    
148        protected void testDataFieldApplyPartialMask() throws Exception {
149            String valueText = textValueUnderTest("Demo-DataField-Example10", "DataField 1");
150            Assert.assertEquals("**01", valueText);
151        }
152    
153        protected void testDataFieldHideProperty() throws Exception {
154            WebElement exampleDiv = navigateToExample("Demo-DataField-Example11");
155    
156            if (findElements(By.cssSelector(DIV_DATA_LABEL_DATA_FIELD_1), exampleDiv).size() > 0) {
157                failableFail(DIV_DATA_LABEL_DATA_FIELD_1 + " not hidden");
158            }
159        }
160    
161        private String textValueUnderTest(String example, String testLabel) throws Exception {
162            WebElement exampleDiv = navigateToExample(example);
163            WebElement field = findElement(By.cssSelector("div[data-label='" + testLabel + "']"), exampleDiv);
164    
165            String fieldId = field.getAttribute("id");
166            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
167    
168            assertIsVisible("#" + fieldId);
169            assertIsVisible("label[for='" + controlId + "']");
170            WebElement label = findElement(By.cssSelector("[for='" + controlId + "']"), field);
171            if (!label.getText().contains(testLabel)) {
172                fail("Label text does not match");
173            }
174    
175            assertIsVisible("#" + controlId);
176    
177            return findElement(By.id(controlId), field).getText();
178        }
179    
180        protected void testDataFieldExamples() throws Exception {
181            testDataFieldDefault();
182            testDataFieldLabelTop();
183            testDataFieldLabelRight();
184            testDataFieldDefaultValue();
185            testDataFieldAppendProperty();
186            testDataFieldReplaceProperty();
187            testDataFieldReplacePropertyWithField();
188            testDataFieldAppendPropertyWithField();
189            testDataFieldApplyFullMask();
190            testDataFieldApplyPartialMask();
191            testDataFieldHideProperty();
192        }
193    
194        @Test
195        public void testDataFieldExamplesBookmark() throws Exception {
196            testDataFieldExamples();
197            passed();
198        }
199    
200        @Test
201        public void testDataFieldExamplesNav() throws Exception {
202            testDataFieldExamples();
203            passed();
204        }
205    
206        @Test
207        public void testDataFieldDefaultBookmark() throws Exception {
208            testDataFieldDefault();
209            passed();
210        }
211    
212        @Test
213        public void testDataFieldDefaultNav() throws Exception {
214            testDataFieldDefault();
215            passed();
216        }
217    
218        @Test
219        public void testDataFieldLabelTopBookmark() throws Exception {
220            testDataFieldLabelTop();
221            passed();
222        }
223    
224        @Test
225        public void testDataFieldLabelTopNav() throws Exception {
226            testDataFieldLabelTop();
227            passed();
228        }
229    
230        @Test
231        public void testDataFieldLabelRightBookmark() throws Exception {
232            testDataFieldLabelRight();
233            passed();
234        }
235    
236        @Test
237        public void testDataFieldLabelRightNav() throws Exception {
238            testDataFieldLabelRight();
239            passed();
240        }
241    
242        @Test
243        public void testDataFieldDefaultValueBookmark() throws Exception {
244            testDataFieldDefaultValue();
245            passed();
246        }
247    
248        @Test
249        public void testDataFieldDefaultValueNav() throws Exception {
250            testDataFieldDefaultValue();
251            passed();
252        }
253    
254        @Test
255        public void testDataFieldAppendPropertyBookmark() throws Exception {
256            testDataFieldAppendProperty();
257            passed();
258        }
259    
260        @Test
261        public void testDataFieldAppendPropertyNav() throws Exception {
262            testDataFieldAppendProperty();
263            passed();
264        }
265    
266        @Test
267        public void testDataFieldReplacePropertyBookmark() throws Exception {
268            testDataFieldReplaceProperty();
269            passed();
270        }
271    
272        @Test
273        public void testDataFieldReplacePropertyNav() throws Exception {
274            testDataFieldReplaceProperty();
275            passed();
276        }
277    
278        @Test
279        public void testDataFieldReplacePropertyWithFieldBookmark() throws Exception {
280            testDataFieldReplacePropertyWithField();
281            passed();
282        }
283    
284        @Test
285        public void testDataFieldReplacePropertyWithFieldNav() throws Exception {
286            testDataFieldReplacePropertyWithField();
287            passed();
288        }
289    
290        @Test
291        public void testDataFieldAppendPropertyWithFieldBookmark() throws Exception {
292            testDataFieldAppendPropertyWithField();
293            passed();
294        }
295    
296        @Test
297        public void testDataFieldAppendPropertyWithFieldNav() throws Exception {
298            testDataFieldAppendPropertyWithField();
299            passed();
300        }
301    
302        @Test
303        public void testDataFieldApplyFullMaskBookmark() throws Exception {
304            testDataFieldApplyFullMask();
305            passed();
306        }
307    
308        @Test
309        public void testDataFieldApplyFullMaskNav() throws Exception {
310            testDataFieldApplyFullMask();
311            passed();
312        }
313    
314        @Test
315        public void testDataFieldApplyPartialMaskBookmark() throws Exception {
316            testDataFieldApplyPartialMask();
317            passed();
318        }
319    
320        @Test
321        public void testDataFieldApplyPartialMaskNav() throws Exception {
322            testDataFieldApplyPartialMask();
323            passed();
324        }
325    
326        @Test
327        public void testDataFieldHidePropertyBookmark() throws Exception {
328            testDataFieldHideProperty();
329            passed();
330        }
331    
332        @Test
333        public void testDataFieldHidePropertyNav() throws Exception {
334            testDataFieldHideProperty();
335            passed();
336        }
337    }