package org.jboss.seam.example.test.webdriver.seambay;
import static junit.framework.Assert.assertTrue;
import org.jboss.seam.example.common.test.webdriver.AjaxWebDriverTest;
import org.jboss.seam.example.common.test.webdriver.AjaxWebElement;
import org.openqa.selenium.By;
import org.testng.annotations.Test;
/**
* Tests Web Services of Seambay example. Uses WebDriver to test, browser is
* chosen according to parameter passed
*
* @author kpiwko
*
*/
public class WebServicesTest extends AjaxWebDriverTest
{
protected static final By HERE_LINK = By.partialLinkText("here");
protected static final String SERVICE_PAGE_URL = "test.seam";
protected static final By INVOKE_SERVICE_BUTTON = By.xpath("//button[contains(@onclick,'sendRequest')]");
protected static final By REQUEST_AREA = By.id("serviceRequest");
protected static final By RESPONSE_AREA = By.id("serviceResponse");
protected static final By LOGIN_LINK = By.partialLinkText("Login");
protected static final By LIST_CATEGORIES_LINK = By.partialLinkText("List Categories");
protected static final By CREATE_NEW_AUCTION_LINK = By.partialLinkText("Create new auction");
protected static final By UPDATE_AUCTION_DETAILS_LINK = By.partialLinkText("Update auction details");
protected static final By SET_AUCTION_DURATION_LINK = By.partialLinkText("Set auction duration");
protected static final By SET_STARTING_PRICE_LINK = By.partialLinkText("Set starting price");
protected static final By GET_AUCTION_DETAILS_LINK = By.partialLinkText("Get the auction details");
protected static final By CONFIRM_AUCTION_LINK = By.partialLinkText("Confirm auction");
protected static final By FIND_AUCTIONS_LINK = By.partialLinkText("Find Auctions");
protected static final By LOGOUT_LINK = By.partialLinkText("Logout");
/* login parameters */
protected static final By LOGIN_INPUT_USERNAME = By.id("username");
protected static final By LOGIN_INPUT_PASSWORD = By.id("password");
/* create new auction parameters */
protected static final By AUCTION_TITLE = By.id("title");
protected static final By AUCTION_DESCRIPTION = By.id("description");
protected static final By AUCTION_CATEGORY_ID = By.id("categoryId");
/* parameters for other tests */
protected static final By SEARCH_TERM = By.id("searchTerm");
protected static final By AUCTION_DURATION = By.id("duration");
protected static final By STARTING_PRICE = By.id("price");
/* responses */
protected static final String LIST_CATEGORIES_RESPONSE = "<ns2:listCategoriesResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"><return><categoryId>1</categoryId><name>Antiques</name></return><return><categoryId>2</categoryId><name>Art</name></return><return><categoryId>3</categoryId><name>Books</name></return><return><categoryId>4</categoryId><name>Cameras and Photography</name></return><return><categoryId>5</categoryId><name>Cars and Boats</name></return><return><categoryId>6</categoryId><name>Cell Phones</name></return><return><categoryId>7</categoryId><name>Clothing and Shoes</name></return><return><categoryId>8</categoryId><name>Computers</name></return><return><categoryId>9</categoryId><name>Music</name></return><return><categoryId>10</categoryId><name>Electronics</name></return><return><categoryId>11</categoryId><name>Home and Garden</name></return><return><categoryId>12</categoryId><name>Musical Instruments</name></return><return><categoryId>13</categoryId><name>Sporting goods</name></return><return><categoryId>14</categoryId><name>Toys</name></return><return><categoryId>15</categoryId><name>Video Games</name></return><return><categoryId>1001</categoryId><name>Furniture</name><parent><categoryId>1</categoryId><name>Antiques</name></parent></return><return><categoryId>1002</categoryId><name>Silverware</name><parent><categoryId>1</categoryId><name>Antiques</name></parent></return><return><categoryId>2001</categoryId><name>Paintings</name><parent><categoryId>2</categoryId><name>Art</name></parent></return><return><categoryId>2002</categoryId><name>Prints</name><parent><categoryId>2</categoryId><name>Art</name></parent></return><return><categoryId>2003</categoryId><name>Sculptures</name><parent><categoryId>2</categoryId><name>Art</name></parent></return><return><categoryId>3001</categoryId><name>Fiction</name><parent><categoryId>3</categoryId><name>Books</name></parent></return><return><categoryId>3002</categoryId><name>Non Fiction</name><parent><categoryId>3</categoryId><name>Books</name></parent></return><return><categoryId>3003</categoryId><name>Comic Books</name><parent><categoryId>3</categoryId><name>Books</name></parent></return><return><categoryId>3004</categoryId><name>Children</name><parent><categoryId>3</categoryId><name>Books</name></parent></return><return><categoryId>4001</categoryId><name>Digital Cameras</name><parent><categoryId>4</categoryId><name>Cameras and Photography</name></parent></return><return><categoryId>4002</categoryId><name>Memory Cards</name><parent><categoryId>4</categoryId><name>Cameras and Photography</name></parent></return><return><categoryId>4003</categoryId><name>Film Cameras</name><parent><categoryId>4</categoryId><name>Cameras and Photography</name></parent></return><return><categoryId>4004</categoryId><name>Video Cameras</name><parent><categoryId>4</categoryId><name>Cameras and Photography</name></parent></return><return><categoryId>5001</categoryId><name>Cars</name><parent><categoryId>5</categoryId><name>Cars and Boats</name></parent></return><return><categoryId>5002</categoryId><name>Motorcycles</name><parent><categoryId>5</categoryId><name>Cars and Boats</name></parent></return><return><categoryId>5003</categoryId><name>Car Parts</name><parent><categoryId>5</categoryId><name>Cars and Boats</name></parent></return><return><categoryId>6001</categoryId><name>Mobile Phones</name><parent><categoryId>6</categoryId><name>Cell Phones</name></parent></return><return><categoryId>6002</categoryId><name>Mobile Accessories</name><parent><categoryId>6</categoryId><name>Cell Phones</name></parent></return><return><categoryId>6003</categoryId><name>Prepaid cards</name><parent><categoryId>6</categoryId><name>Cell Phones</name></parent></return><return><categoryId>7001</categoryId><name>Women</name><parent><categoryId>7</categoryId><name>Clothing and Shoes</name></parent></return><return><categoryId>7002</categoryId><name>Men</name><parent><categoryId>7</categoryId><name>Clothing and Shoes</name></parent></return><return><categoryId>7003</categoryId><name>Girls</name><parent><categoryId>7</categoryId><name>Clothing and Shoes</name></parent></return><return><categoryId>7004</categoryId><name>Boys</name><parent><categoryId>7</categoryId><name>Clothing and Shoes</name></parent></return><return><categoryId>7005</categoryId><name>Babies</name><parent><categoryId>7</categoryId><name>Clothing and Shoes</name></parent></return><return><categoryId>8001</categoryId><name>Notebooks</name><parent><categoryId>8</categoryId><name>Computers</name></parent></return><return><categoryId>8002</categoryId><name>Desktop PCs</name><parent><categoryId>8</categoryId><name>Computers</name></parent></return><return><categoryId>8003</categoryId><name>Servers</name><parent><categoryId>8</categoryId><name>Computers</name></parent></return><return><categoryId>8004</categoryId><name>Hardware</name><parent><categoryId>8</categoryId><name>Computers</name></parent></return><return><categoryId>8005</categoryId><name>Software</name><parent><categoryId>8</categoryId><name>Computers</name></parent></return><return><categoryId>9001</categoryId><name>CDs</name><parent><categoryId>9</categoryId><name>Music</name></parent></return><return><categoryId>9002</categoryId><name>Records</name><parent><categoryId>9</categoryId><name>Music</name></parent></return><return><categoryId>10001</categoryId><name>Home Audio</name><parent><categoryId>10</categoryId><name>Electronics</name></parent></return><return><categoryId>10002</categoryId><name>MP3 Players</name><parent><categoryId>10</categoryId><name>Electronics</name></parent></return><return><categoryId>10003</categoryId><name>Television</name><parent><categoryId>10</categoryId><name>Electronics</name></parent></return><return><categoryId>10004</categoryId><name>Home theatre</name><parent><categoryId>10</categoryId><name>Electronics</name></parent></return><return><categoryId>11001</categoryId><name>Kitchen</name><parent><categoryId>11</categoryId><name>Home and Garden</name></parent></return><return><categoryId>11002</categoryId><name>Real Estate</name><parent><categoryId>11</categoryId><name>Home and Garden</name></parent></return><return><categoryId>11003</categoryId><name>Furniture</name><parent><categoryId>11</categoryId><name>Home and Garden</name></parent></return><return><categoryId>12001</categoryId><name>Guitars</name><parent><categoryId>12</categoryId><name>Musical Instruments</name></parent></return><return><categoryId>12002</categoryId><name>Pianos and Keyboards</name><parent><categoryId>12</categoryId><name>Musical Instruments</name></parent></return><return><categoryId>12003</categoryId><name>Percussion</name><parent><categoryId>12</categoryId><name>Musical Instruments</name></parent></return><return><categoryId>12004</categoryId><name>Orchestral</name><parent><categoryId>12</categoryId><name>Musical Instruments</name></parent></return><return><categoryId>13001</categoryId><name>Golf</name><parent><categoryId>13</categoryId><name>Sporting goods</name></parent></return><return><categoryId>13002</categoryId><name>Fishing</name><parent><categoryId>13</categoryId><name>Sporting goods</name></parent></return><return><categoryId>13003</categoryId><name>Tennis</name><parent><categoryId>13</categoryId><name>Sporting goods</name></parent></return><return><categoryId>14001</categoryId><name>Remote control</name><parent><categoryId>14</categoryId><name>Toys</name></parent></return><return><categoryId>14002</categoryId><name>Cars and trucks</name><parent><categoryId>14</categoryId><name>Toys</name></parent></return><return><categoryId>14003</categoryId><name>Dolls</name><parent><categoryId>14</categoryId><name>Toys</name></parent></return><return><categoryId>14004</categoryId><name>Educational</name><parent><categoryId>14</categoryId><name>Toys</name></parent></return><return><categoryId>15001</categoryId><name>PC</name><parent><categoryId>15</categoryId><name>Video Games</name></parent></return><return><categoryId>15002</categoryId><name>Nintendo Wii</name><parent><categoryId>15</categoryId><name>Video Games</name></parent></return><return><categoryId>15003</categoryId><name>Sony Playstation 3</name><parent><categoryId>15</categoryId><name>Video Games</name></parent></return><return><categoryId>15004</categoryId><name>XBox 360</name><parent><categoryId>15</categoryId><name>Video Games</name></parent></return></ns2:listCategoriesResponse>";
protected static final String LOGIN_RIGHT_RESPONSE = "<return>true</return>";
protected static final String CREATE_NEW_AUCTION_RESPONSE = "<ns2:createAuctionResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"";
protected static final String FIND_AUCTIONS_RESPONSE = "<description>You can buy an animal here</description>";
protected static final String UPDATE_AUCTION_RESPONSE = "<ns2:updateAuctionDetailsResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"";
protected static final String SET_DURATION_RESPONSE = "<ns2:setAuctionDurationResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"";
protected static final String SET_STARTING_PRICE_RESPONSE = "<ns2:setAuctionPriceResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"";
protected static final String AUCTION_DETAILS_PRICE_RESPONSE = "<ns2:getNewAuctionDetailsResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"><return><account><accountId>1</accountId><feedbackPercent>0.0</feedbackPercent><feedbackScore>0</feedbackScore><location>Sydney, NSW, Australia</location>";
protected static final String LOGOUT_RESPONSE = "<ns2:logoutResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"><return>true</return></ns2:logoutResponse>";
protected static final String CONFIRMATION_RESPONSE = "<ns2:confirmAuctionResponse xmlns:ns2=\"http://seambay.example.seam.jboss.org/\"";
@Test
public void testGoToWSPage()
{
driver.get(serverURL + contextPath);
driver.findElement(HERE_LINK).click();
assertTrue("URL contains web services page", driver.getCurrentUrl().contains(SERVICE_PAGE_URL));
}
@Test(dependsOnMethods = {
"testGoToWSPage"
})
public void testLoginService()
{
loginService();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
// the same as Selenium, must use getValue to retrieve text inside
// <textarea></textarea>
assertTrue("Response area should contain \"true\"", response.getValue().contains(LOGIN_RIGHT_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService"
})
public void listCategoriesTest()
{
loginService();
driver.findElement(LIST_CATEGORIES_LINK).clickAndWait();
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain a list of categories.", response.getValue().contains(LIST_CATEGORIES_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService"
})
public void testCreateNewAuction()
{
loginService();
createNewAuctionService();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about creating the auction.", response.getValue().contains(CREATE_NEW_AUCTION_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void findAuctionsTest()
{
String searchTerm = "Animals";
loginService();
createNewAuctionService();
confirmAuctionService();
driver.findElement(FIND_AUCTIONS_LINK).clickAndWait();
driver.findElement(SEARCH_TERM).clearAndSendKeys(searchTerm);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about finding auction.", response.getValue().contains(FIND_AUCTIONS_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void updateAuctionTest()
{
String title = "Animals";
String description = "Another description";
String categoryId = "5";
loginService();
createNewAuctionService();
driver.findElement(UPDATE_AUCTION_DETAILS_LINK).clickAndWait();
driver.findElement(AUCTION_TITLE).clearAndSendKeys(title);
driver.findElement(AUCTION_DESCRIPTION).clearAndSendKeys(description);
driver.findElement(AUCTION_CATEGORY_ID).clearAndSendKeys(categoryId);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about updating the auction.", response.getValue().contains(UPDATE_AUCTION_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void setAuctionDurationTest()
{
String duration = "20";
loginService();
createNewAuctionService();
driver.findElement(SET_AUCTION_DURATION_LINK).clickAndWait();
driver.findElement(AUCTION_DURATION).clearAndSendKeys(duration);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about setting duration.", response.getValue().contains(SET_DURATION_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void setStartingPriceTest()
{
String price = "1000";
loginService();
createNewAuctionService();
driver.findElement(SET_STARTING_PRICE_LINK).clickAndWait();
driver.findElement(STARTING_PRICE).clearAndSendKeys(price);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about setting starting price.", response.getValue().contains(SET_STARTING_PRICE_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void getAuctionDetailsTest()
{
loginService();
createNewAuctionService();
driver.findElement(GET_AUCTION_DETAILS_LINK).clickAndWait();
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain auction details.", response.getValue().contains(AUCTION_DETAILS_PRICE_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService"
})
public void logOutTest()
{
loginService();
driver.findElement(LOGOUT_LINK).clickAndWait();
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain logout confirmation.", response.getValue().contains(LOGOUT_RESPONSE));
}
@Test(dependsOnMethods = {
"testLoginService", "testCreateNewAuction"
})
public void confirmAuctionTest()
{
loginService();
createNewAuctionService();
confirmAuctionService();
AjaxWebElement response = driver.findElement(RESPONSE_AREA);
assertTrue("Response area should contain information about confirmation.", response.getValue().contains(CONFIRMATION_RESPONSE));
}
/**
* Goes to web services page and logs user in
*/
protected void loginService()
{
String username = "demo";
String password = "demo";
driver.get(serverURL + contextPath);
driver.findElement(HERE_LINK).click();
driver.findElement(By.partialLinkText("Login")).clickAndWait();
driver.findElement(LOGIN_INPUT_USERNAME).clearAndSendKeys(username);
driver.findElement(LOGIN_INPUT_PASSWORD).clearAndSendKeys(password);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
}
protected void confirmAuctionService()
{
driver.findElement(CONFIRM_AUCTION_LINK).clickAndWait();
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
}
protected void createNewAuctionService()
{
String title = "Animals";
String description = "You can buy an animal here";
String categoryId = "6";
driver.findElement(CREATE_NEW_AUCTION_LINK).clickAndWait();
driver.findElement(AUCTION_TITLE).clearAndSendKeys(title);
driver.findElement(AUCTION_DESCRIPTION).clearAndSendKeys(description);
driver.findElement(AUCTION_CATEGORY_ID).clearAndSendKeys(categoryId);
driver.findElement(INVOKE_SERVICE_BUTTON).clickAndWait();
}
}