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.junit.Assert;
019    import org.junit.Test;
020    import org.kuali.rice.krad.uif.UifConstants;
021    import org.openqa.selenium.By;
022    import org.openqa.selenium.WebElement;
023    
024    /**
025     * @author Kuali Rice Team (rice.collab@kuali.org)
026     */
027    public class DemoLibraryDataFieldSmokeTest extends DemoLibraryBase {
028    
029        /**
030         * /kr-krad/kradsampleapp?viewId=Demo-DataField-View&methodToCall=start
031         */
032        public static final String BOOKMARK_URL = "/kr-krad/kradsampleapp?viewId=Demo-DataField-View&methodToCall=start";
033    
034        @Override
035        public String getBookmarkUrl() {
036            return BOOKMARK_URL;
037        }
038    
039        @Override
040        protected void navigate() throws Exception {
041            navigateToLibraryDemo("Fields", "Data Field");
042        }
043    
044        protected void testDataFieldDefault() throws Exception {
045            WebElement exampleDiv = navigateToExample("Demo-DataField-Example1");
046            WebElement field = exampleDiv.findElement(By.cssSelector("div[data-label='DataField 1']"));
047    
048            String fieldId = field.getAttribute("id");
049            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
050    
051            assertIsVisible("#" + fieldId);
052            assertIsVisible("label[for='" + controlId + "']");
053    
054            WebElement label = field.findElement(By.cssSelector("label[for='" + controlId + "']"));
055            if(!label.getText().contains("DataField 1:")){
056                fail("Label text does not match");
057            }
058    
059            assertIsVisible("#" + controlId);
060    
061            assertTextPresent("1001", "#" + controlId, "DataField value not correct");
062        }
063    
064        protected void testDataFieldLabelTop() throws Exception {
065            WebElement exampleDiv = navigateToExample("Demo-DataField-Example2");
066            WebElement field = exampleDiv.findElement(By.cssSelector("div[data-label='DataField 1']"));
067    
068            String fieldId = field.getAttribute("id");
069            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
070    
071            assertIsVisible("#" + fieldId);
072            assertIsVisible("label[for='" + controlId + "']");
073    
074            WebElement label = field.findElement(By.cssSelector("label[for='" + controlId + "']"));
075            if(!label.getText().contains("DataField 1:")){
076                fail("Label text does not match");
077            }
078    
079            WebElement labelspan = field.findElement(By.cssSelector("span[data-label_for='" + fieldId + "']"));
080            // top and bottom add the uif-labelBlock class
081            if(!labelspan.getAttribute("class").contains("uif-labelBlock")){
082                fail("Label span does not contain the appropriate class expected");
083            }
084    
085            assertIsVisible("#" + controlId);
086        }
087    
088        protected void testDataFieldLabelRight() throws Exception {
089            WebElement exampleDiv = navigateToExample("Demo-DataField-Example3");
090            WebElement field = findElement(By.cssSelector("div[data-label='DataField 1']"), exampleDiv);
091    
092            String fieldId = field.getAttribute("id");
093            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
094    
095            assertIsVisible("#" + fieldId);
096            assertIsVisible("label[for='" + controlId + "']");
097    
098            WebElement label = findElement(By.cssSelector("[for='" + controlId + "']"), field);
099            if(!label.getText().contains("DataField 1")){
100                fail("Label text does not match");
101            }
102    
103            assertIsVisible("#" + controlId);
104    
105            // validate that the label comes after the value
106            findElement(By.cssSelector("span[id='" + controlId + "'] + span[data-label_for='" + fieldId + "']"), exampleDiv);
107        }
108    
109        protected void testDataFieldDefaultValue() throws Exception {
110            String valueText = textValueUnderTest("Demo-DataField-Example4", "DataField 2");
111            Assert.assertEquals("2012", valueText);
112        }
113    
114        protected void testDataFieldAppendProperty() throws Exception {
115            String valueText = textValueUnderTest("Demo-DataField-Example5", "DataField 1");
116            Assert.assertTrue(valueText.endsWith("ID Val"));
117        }
118    
119        protected void testDataFieldReplaceProperty() throws Exception {
120            String valueText = textValueUnderTest("Demo-DataField-Example6", "DataField 1");
121            Assert.assertEquals("ID Val", valueText);
122        }
123    
124        protected void testDataFieldReplacePropertyWithField() throws Exception {
125            String valueText = textValueUnderTest("Demo-DataField-Example7", "DataField 1");
126            Assert.assertEquals("My Book Title", valueText);
127        }
128    
129        protected void testDataFieldAppendPropertyWithField() throws Exception {
130            String valueText = textValueUnderTest("Demo-DataField-Example8", "DataField 1");
131            Assert.assertEquals("1001 *-* My Book Title", valueText);
132        }
133    
134        private String textValueUnderTest(String example, String testLabel) throws Exception {
135            WebElement exampleDiv = navigateToExample(example);
136            WebElement field = findElement(By.cssSelector("div[data-label='" + testLabel + "']"), exampleDiv);
137    
138            String fieldId = field.getAttribute("id");
139            String controlId = fieldId + UifConstants.IdSuffixes.CONTROL;
140    
141            assertIsVisible("#" + fieldId);
142            assertIsVisible("label[for='" + controlId + "']");
143    
144            WebElement label = findElement(By.cssSelector("[for='" + controlId + "']"), field);
145            if(!label.getText().contains(testLabel)){
146                fail("Label text does not match");
147            }
148    
149            assertIsVisible("#" + controlId);
150    
151            return findElement(By.id(controlId), field).getText();
152        }
153    
154        protected void testDataFieldExamples() throws Exception{
155            testDataFieldDefault();
156            testDataFieldLabelTop();
157            testDataFieldLabelRight();
158            testDataFieldDefaultValue();
159            testDataFieldAppendProperty();
160            testDataFieldReplaceProperty();
161            testDataFieldReplacePropertyWithField();
162            testDataFieldAppendPropertyWithField();
163        }
164    
165        @Test
166        public void testDataFieldExamplesBookmark() throws Exception {
167            testDataFieldExamples();
168            passed();
169        }
170    
171        @Test
172        public void testDataFieldExamplesNav() throws Exception {
173            testDataFieldExamples();
174            passed();
175        }
176    
177        @Test
178        public void testDataFieldDefaultBookmark() throws Exception {
179            testDataFieldDefault();
180            passed();
181        }
182    
183        @Test
184        public void testDataFieldDefaultNav() throws Exception {
185            testDataFieldDefault();
186            passed();
187        }
188    
189        @Test
190        public void testDataFieldLabelTopBookmark() throws Exception {
191            testDataFieldLabelTop();
192            passed();
193        }
194    
195        @Test
196        public void testDataFieldLabelTopNav() throws Exception {
197            testDataFieldLabelTop();
198            passed();
199        }
200    
201        @Test
202        public void testDataFieldLabelRightBookmark() throws Exception {
203            testDataFieldLabelRight();
204            passed();
205        }
206    
207        @Test
208        public void testDataFieldLabelRightNav() throws Exception {
209            testDataFieldLabelRight();
210            passed();
211        }
212    
213        @Test
214        public void testDataFieldDefaultValueBookmark() throws Exception {
215            testDataFieldDefaultValue();
216            passed();
217        }
218    
219        @Test
220        public void testDataFieldDefaultValueNav() throws Exception {
221            testDataFieldDefaultValue();
222            passed();
223        }
224    
225        @Test
226        public void testDataFieldAppendPropertyBookmark() throws Exception {
227            testDataFieldAppendProperty();
228            passed();
229        }
230    
231        @Test
232        public void testDataFieldAppendPropertyNav() throws Exception {
233            testDataFieldAppendProperty();
234            passed();
235        }
236    
237        @Test
238        public void testDataFieldReplacePropertyBookmark() throws Exception {
239            testDataFieldReplaceProperty();
240            passed();
241        }
242    
243        @Test
244        public void testDataFieldReplacePropertyNav() throws Exception {
245            testDataFieldReplaceProperty();
246            passed();
247        }
248    
249        @Test
250        public void testDataFieldReplacePropertyWithFieldBookmark() throws Exception {
251            testDataFieldReplacePropertyWithField();
252            passed();
253        }
254    
255        @Test
256        public void testDataFieldReplacePropertyWithFieldNav() throws Exception {
257            testDataFieldReplacePropertyWithField();
258            passed();
259        }
260    
261        @Test
262        public void testDataFieldAppendPropertyWithFieldBookmark() throws Exception {
263            testDataFieldAppendPropertyWithField();
264            passed();
265        }
266    
267        @Test
268        public void testDataFieldAppendPropertyWithFieldNav() throws Exception {
269            testDataFieldAppendPropertyWithField();
270            passed();
271        }
272    }