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 */ 016package edu.sampleu.main; 017 018import org.apache.commons.io.FileUtils; 019import org.junit.Rule; 020import org.junit.Test; 021import org.junit.rules.TemporaryFolder; 022import org.kuali.rice.krad.uif.UifPropertyPaths; 023import org.kuali.rice.krad.util.KRADConstants; 024import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils; 025import org.kuali.rice.testtools.selenium.WebDriverUtils; 026import org.openqa.selenium.By; 027 028import java.io.File; 029 030/** 031 * Tests the Notes and Attachments in the People Flow screen. 032 * 033 * @author Kuali Rice Team (rice.collab@kuali.org) 034 */ 035public class PeopleFlowCreateNewNotesAndAttachmentsAft extends PeopleFlowCreateNewAftBase { 036 037 /** 038 * WebDriverUtils.getBaseUrlString() + "/kr-krad/peopleFlowMaintenance?" + 039 * "viewTypeName=MAINTENANCE&returnLocation=" + AutomatedFunctionalTestUtils.PORTAL_URL_ENCODED + "&methodToCall=start&" + 040 * "dataObjectClassName=org.kuali.rice.kew.impl.peopleflow.PeopleFlowBo" 041 */ 042 public static final String BOOKMARK_URL = WebDriverUtils.getBaseUrlString() + "/kr-krad/peopleFlowMaintenance?" + 043 "viewTypeName=MAINTENANCE&returnLocation=" + AutomatedFunctionalTestUtils.PORTAL_URL_ENCODED + "&methodToCall=start&" + 044 "dataObjectClassName=org.kuali.rice.kew.impl.peopleflow.PeopleFlowBo"; 045 046 /** 047 * Provider of the temporary folder. 048 */ 049 @Rule 050 public TemporaryFolder temporaryFolder = new TemporaryFolder(); 051 052 private static final String NOTES_AND_ATTACHMENTS_PREFIX = UifPropertyPaths.NEW_COLLECTION_LINES 053 + "['" 054 + KRADConstants.DOCUMENT_PROPERTY_NAME 055 + "." 056 + KRADConstants.NOTES_PROPERTY_NAME 057 + "']"; 058 059 @Override 060 public String getBookmarkUrl() { 061 return BOOKMARK_URL; 062 } 063 064 /** 065 * Tests adding both the required note and an optional attachment. 066 * 067 * @throws Exception when an error is encountered in the test 068 */ 069 @Test 070 public void testPeopleFlowCreateNewNotesAndAttachments_DefaultAttachmentBookmark() throws Exception { 071 testDefaultAttachement(); 072 } 073 074 /** 075 * Tests adding both the required note and an optional attachment. 076 * 077 * @throws Exception when an error is encountered in the test 078 */ 079 @Test 080 public void testPeopleFlowCreateNewNotesAndAttachments_DefaultAttachmentNav() throws Exception { 081 navigateToCreateNew(); 082 083 testDefaultAttachement(); 084 } 085 086 protected void testDefaultAttachement() throws Exception { 087 navigateToNotesAndAttachments(); 088 waitAndTypeByName(NOTES_AND_ATTACHMENTS_PREFIX + "." + KRADConstants.NOTE_TEXT_PROPERTY_NAME, 089 "Attachment_Note"); 090 waitAndAddAttachment("attachment.txt", "Testing123"); 091 waitAndClick(By.cssSelector("button[title='Add a Note']")); 092 093 waitForTextPresent("Attachment_Note"); 094 assertTextPresent("attachment.txt"); 095 assertTextNotPresent("Note Text is a required field."); 096 passed(); 097 } 098 099 /** 100 * Tests adding just the required note. 101 * 102 * @throws Exception when an error is encountered in the test 103 */ 104 @Test 105 public void testPeopleFlowCreateNewNotesAndAttachments_DefaultNoAttachmentBookmark() throws Exception { 106 testDefaultNoAttachment(); 107 } 108 109 /** 110 * Tests adding just the required note. 111 * 112 * @throws Exception when an error is encountered in the test 113 */ 114 @Test 115 public void testPeopleFlowCreateNewNotesAndAttachments_DefaultNoAttachmentNav() throws Exception { 116 navigateToCreateNew(); 117 118 testDefaultNoAttachment(); 119 } 120 121 protected void testDefaultNoAttachment() throws InterruptedException { 122 navigateToNotesAndAttachments(); 123 waitAndTypeByName(NOTES_AND_ATTACHMENTS_PREFIX + "." + KRADConstants.NOTE_TEXT_PROPERTY_NAME, 124 "Attachment_Note"); 125 waitAndClick(By.cssSelector("button[title='Add a Note']")); 126 127 waitForTextPresent("Attachment_Note"); 128 assertTextNotPresent("Note Text is a required field"); 129 passed(); 130 } 131 132 /** 133 * Tests adding just the optional attachment, which should result in an error. 134 * 135 * @throws Exception when an error is encountered in the test 136 */ 137 @Test 138 public void testPeopleFlowCreateNewNotesAndAttachments_NoNoteTextBookmark() throws Exception { 139 testNoNoteText(); 140 } 141 142 /** 143 * Tests adding just the optional attachment, which should result in an error. 144 * 145 * @throws Exception when an error is encountered in the test 146 */ 147 @Test 148 public void testPeopleFlowCreateNewNotesAndAttachments_NoNoteTextNav() throws Exception { 149 navigateToCreateNew(); 150 151 testNoNoteText(); 152 } 153 154 protected void testNoNoteText() throws Exception { 155 navigateToNotesAndAttachments(); 156 waitAndAddAttachment("attachment.txt", "Testing123"); 157 waitAndClick(By.cssSelector("button[title='Add a Note']")); 158 159 waitForTextPresent("Note Text is a required field"); 160 assertTextNotPresent("attachment.txt"); 161 passed(); 162 } 163 164 protected void navigateToCreateNew() throws Exception { 165 selectFrameIframePortlet(); 166 waitAndClickByLinkText("Create New"); 167 } 168 169 private void navigateToNotesAndAttachments() throws InterruptedException { 170 waitForElementPresent( 171 "div[data-header_for='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span"); 172 173 waitAndClickByLinkText("Notes and Attachments (0)"); 174 } 175 176 private void waitAndAddAttachment(String fileName, String content) throws Exception { 177 File file = temporaryFolder.newFile(fileName); 178 FileUtils.writeStringToFile(file, content); 179 String path = file.getAbsolutePath().toString(); 180 waitAndTypeByName("attachmentFile", path); 181 } 182}