/* * JBoss, Home of Professional Open Source * Copyright 2015, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.as.quickstarts.contacts.test; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.findby.FindByJQuery; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.as.quickstarts.contacts.test.page.ContactListPage; import org.jboss.as.quickstarts.contacts.test.page.ContactPage; import org.jboss.as.quickstarts.contacts.test.page.fragment.NavigationPageFragment; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; import java.net.URL; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * Contacts Mobile Basic quickstart functional test * * @author Oliver Kiss */ @RunAsClient @RunWith(Arquillian.class) public class ContactsMobileBasicTest { /** * Locator for contact page */ @FindByJQuery("[data-role='page']:visible") ContactPage contactPage; /** * Locator for contact list page */ @FindByJQuery("[data-role='page']:visible") ContactListPage listPage; /** * Locator for navigation panel */ @FindByJQuery("[data-role='page']:visible") NavigationPageFragment navigation; /** * Injects browser to our test. */ @Drone WebDriver browser; /** * Injects URL on which application is running. */ @ArquillianResource URL contextPath; //Test fixtures private static String FIRST_NAME_INVALID = "John&"; private static String FIRST_NAME_A = "John"; private static String FIRST_NAME_B = "Jane"; private static String LAST_NAME_INVALID = "Doe11"; private static String LAST_NAME = "Doe"; private static String PHONE_NUMBER_INVALID = "123a"; private static String PHONE_NUMBER_A = "+12105551111"; private static String PHONE_NUMBER_B = "+12105552222"; private static String PHONE_NUMBER_C = "+12105553333"; private static String EMAIL_INVALID = "doe@"; private static String EMAIL_A = "johndoe@mail.com"; private static String EMAIL_B = "janedoe@mail.com"; private static String EMAIL_C = "doe.jane@newmail.com"; private static String DATE = "1970-01-01"; private static String DATE_INVALID = "19aaa"; private static String DATE_TOO_OLD = "1700-02-04"; private static String DATE_FUTURE = "2020-01-01"; /** * Creates deployment which is sent to the container upon test's start. * * @return war file which is deployed while testing, the whole application in our case */ @Deployment(testable = false) public static WebArchive deployment() { return Deployments.contacts(); } @Before public void loadPage() { browser.get(contextPath.toString()); } @Test @InSequence(1) public void requiredFieldsValidationTest() { navigation.openAddPage(); contactPage.fillContact(new Contact(" ", "", "", "")); contactPage.submit(false); assertFalse(contactPage.isFirstNameValid()); assertFalse(contactPage.isLastNameValid()); assertFalse(contactPage.isPhoneNumberValid()); assertFalse(contactPage.isEmailValid()); assertFalse(contactPage.isBirthDateValid()); } @Test @InSequence(2) public void contactFormValidationTest() { navigation.openAddPage(); contactPage.fillContact(new Contact(FIRST_NAME_INVALID + " " + LAST_NAME_INVALID, PHONE_NUMBER_INVALID, EMAIL_INVALID, DATE_INVALID)); assertFalse(contactPage.isFirstNameValid()); assertFalse(contactPage.isLastNameValid()); assertFalse(contactPage.isPhoneNumberValid()); assertFalse(contactPage.isEmailValid()); assertFalse(contactPage.isBirthDateValid()); contactPage.submit(false); contactPage.fillContact(new Contact(FIRST_NAME_A + " " + LAST_NAME, PHONE_NUMBER_A, EMAIL_A, DATE_TOO_OLD)); assertTrue(contactPage.isFirstNameValid()); assertTrue(contactPage.isLastNameValid()); assertTrue(contactPage.isPhoneNumberValid()); assertTrue(contactPage.isEmailValid()); assertFalse(contactPage.isBirthDateValid()); contactPage.submit(false); contactPage.fillContact(new Contact(FIRST_NAME_A + " " + LAST_NAME, PHONE_NUMBER_A, EMAIL_A, DATE_FUTURE)); assertTrue(contactPage.isFirstNameValid()); assertTrue(contactPage.isLastNameValid()); assertTrue(contactPage.isPhoneNumberValid()); assertTrue(contactPage.isEmailValid()); assertFalse(contactPage.isBirthDateValid()); contactPage.submit(false); } @Test @InSequence(3) public void addContactTest() { Contact newContact = new Contact(FIRST_NAME_A + " " + LAST_NAME, PHONE_NUMBER_A, EMAIL_A, DATE); navigation.openAddPage(); contactPage.fillContact(newContact); assertTrue(contactPage.isFormValid()); contactPage.submit(true); listPage.waitForPage(); listPage.showDetails(); assertTrue(listPage.getContacts().contains(newContact)); } @Test @InSequence(4) public void duplicateEmailValidationTest() { listPage.showDetails(); String existingEmail = listPage.getContacts().get(0).getEmail(); Contact newContact = new Contact(FIRST_NAME_B + " " + LAST_NAME, PHONE_NUMBER_B, existingEmail, DATE); navigation.openAddPage(); contactPage.fillContact(newContact); assertTrue(contactPage.isFormValid()); contactPage.submit(true); contactPage.waitForPage(); assertFalse(contactPage.isEmailValid()); newContact.setEmail(EMAIL_B); contactPage.fillContact(newContact); contactPage.submit(true); listPage.waitForPage(); listPage.showDetails(); assertTrue(listPage.getContacts().contains(newContact)); } @Test @InSequence(5) public void editContactTest() { listPage.editContact(FIRST_NAME_B); contactPage.waitForPage(); Contact contact = contactPage.getContact(); contact.setPhoneNumber(PHONE_NUMBER_C); contact.setEmail(EMAIL_C); contactPage.fillContact(contact); contactPage.submit(true); listPage.waitForPage(); listPage.showDetails(); assertTrue(listPage.getContacts().contains(contact)); } }