/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.seam.example.dvd.test.selenium;
import static org.testng.AssertJUnit.*;
import java.text.MessageFormat;
import java.util.Date;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.Wait;
/**
* This class tests the registration functionality of dvdstore example
*
* @author jbalunas
* @author jharting
*
*/
public class RegistrationTest extends SeleniumDvdTest {
// suffix is needed to allow test to be run repeatedly
private String suffix = Long.toString(new Date().getTime() % 10000000);
@Override
@BeforeMethod
public void setUp() {
browser = startBrowser();
browser.open(CONTEXT_PATH + getProperty("HOME_PAGE"));
new Wait() {
@Override
public boolean until() {
return browser.isElementPresent(getProperty("REGISTRATION"));
}
}.wait("Unable to load home page.");
browser.click(getProperty("REGISTRATION"));
browser.waitForPageToLoad(TIMEOUT);
assertTrue("Unable to load registration page.", browser.getLocation()
.contains(getProperty("REGISTRATION_FIRST_PAGE_URL")));
}
/**
* Tries to register user
*/
@Test
public void basicRegistrationTest() {
Person person = new Person("Street 123", "012-3456-7890",
"Visa", "City", "john@example.com", "John", "Doe",
"password", "0123456789", "US", "john" + suffix, "password",
"01234");
fillFirstPage(person);
assertTrue("Unable to load account page.", browser.getLocation()
.contains(getProperty("REGISTRATION_SECOND_PAGE_URL")));
fillSecondPage(person);
assertTrue("Unable to load card page.", browser.getLocation().contains(
getProperty("REGISTRATION_THIRD_PAGE_URL")));
fillThirdPage(person);
assertTrue("Unable to load confirmation page.", browser.getLocation()
.contains(getProperty("REGISTRATION_CONFIRMATION_PAGE_URL")));
assertTrue("Registration failed.", browser.isTextPresent(MessageFormat
.format(getProperty("REGISTRATION_CONFIRMATION_MESSAGE"),
person.getUsername())));
assertTrue("User should be logged in after succesful registration.",
isLoggedIn(browser));
}
/**
* Tests whether validation of input fields works fine.
*/
@Test
public void firstPageInvalidValuesTest() {
Person person = new Person("t", "t", "t");
fillFirstPage(person);
assertTrue("Navigation failed.", browser.getLocation().contains(
getProperty("REGISTRATION_FIRST_PAGE_URL")));
assertEquals("Error messages expected.", 2, browser
.getXpathCount(getProperty("REGISTRATION_LENGTH_MESSAGE")));
}
/**
* Tests password verification.
*/
@Test
public void verifyPasswordTest() {
Person person = new Person("tester", "password", "password1");
fillFirstPage(person);
assertTrue("Navigation failed.", browser.getLocation().contains(
getProperty("REGISTRATION_FIRST_PAGE_URL")));
assertTrue("Password verify message expected.", browser
.isElementPresent(getProperty("REGISTRATION_VERIFY_MESSAGE")));
}
/**
* Tries to register user that already exists. Test assumes that user1 is
* already registered.
*/
@Test
public void duplicateUserTest() {
Person person = new Person("user1", "password", "password");
fillFirstPage(person);
assertTrue("Navigation failed.", browser.getLocation().contains(
getProperty("REGISTRATION_FIRST_PAGE_URL")));
assertTrue(
"Duplicate user error message expected.",
browser
.isElementPresent(getProperty("REGISTRATION_DUPLICATE_USER_MESSAGE")));
}
private void fillFirstPage(Person person) {
browser
.type(getProperty("REGISTRATION_USERNAME"), person
.getUsername());
browser
.type(getProperty("REGISTRATION_PASSWORD"), person
.getPassword());
browser.type(getProperty("REGISTRATION_VERIFY"), person.getVerify());
browser.click(getProperty("REGISTRATION_FIRST_SUBMIT"));
browser.waitForPageToLoad(TIMEOUT);
}
private void fillSecondPage(Person person) {
browser.type(getProperty("REGISTRATION_FIRST_NAME"), person
.getUsername());
browser.type(getProperty("REGISTRATION_LAST_NAME"), person
.getLastName());
browser.type(getProperty("REGISTRATION_ADDRESS"), person.getAddress());
browser
.type(getProperty("REGISTRATION_ADDRESS2"), person
.getAddress2());
browser.type(getProperty("REGISTRATION_CITY"), person.getCity());
browser.type(getProperty("REGISTRATION_STATE"), person.getState());
browser.type(getProperty("REGISTRATION_ZIP"), person.getZip());
browser.type(getProperty("REGISTRATION_EMAIL"), person.getEmail());
browser.type(getProperty("REGISTRATION_PHONE"), person.getPhone());
browser.click(getProperty("REGISTRATION_SECOND_SUBMIT"));
browser.waitForPageToLoad(TIMEOUT);
}
private void fillThirdPage(Person person) {
browser.select(getProperty("REGISTRATION_CARD_TYPE_SELECT"), person
.getCardType());
browser.type(getProperty("REGISTRATION_CARD_NUMBER"), person
.getCardNumber());
fillThirdPage();
}
private void fillThirdPage() {
browser.click(getProperty("REGISTRATION_THIRD_SUBMIT"));
browser.waitForPageToLoad(TIMEOUT);
}
}