/*
* Vige, Home of Professional Open Source
* Copyright 2010, Vige, 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 it.vige.magazzino.ftest;
import static it.vige.magazzino.test.mock.ArticleMock.article0;
import static it.vige.magazzino.test.mock.ArticleMock.article1;
import static it.vige.magazzino.test.mock.ArticleMock.article2;
import static it.vige.magazzino.test.mock.ArticleMock.article4;
import static it.vige.magazzino.test.mock.ArticleMock.articles;
import static org.jboss.test.selenium.guard.request.RequestTypeGuardFactory.waitXhr;
import static org.jboss.test.selenium.locator.LocatorFactory.jq;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import it.vige.magazzino.model.Article;
import it.vige.magazzino.test.operation.ArticleOperation;
import org.jboss.test.selenium.locator.JQueryLocator;
import org.jboss.test.selenium.locator.option.OptionValueLocator;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* This class tests articles functionality of the example.
*
* @author <a href="http://www.vige.it">Luca Stancapiano</a>
*/
public class ArticleTest extends AbstractTest {
public static final JQueryLocator MENU_FIND = jq("[href^='/magazzino/search/search_article']");
public static final JQueryLocator MENU_INSERT = jq("[href^='/magazzino/article']");
public static final JQueryLocator SEARCH_NO_RESULTS = jq("[id='articleSelectionForm:noArticleMsg']");
public static final JQueryLocator SEARCH_RESULT_TABLE_FIRST_ROW_LINK = jq("[id='articleSelectionForm:articles:0:view']");
public static final JQueryLocator BUTTON_UPDATE_PROCEED = jq("[id='articleUpdater']");
public static final JQueryLocator BUTTON_INSERT_PROCEED = jq("[id='articleRegister']");
public static final JQueryLocator BUTTON_CANCEL = jq("[id='cancel']");
public static final JQueryLocator COUNT_ARTICLES = jq("[id='articleSelectionForm:articles'] tbody tr");
public static final JQueryLocator ARTICLES_TABLE_FIRST_ROW_NAME = jq("table[id='articleSelectionForm:articles'] tbody tr:first td:first");
public static final JQueryLocator ARTICLES_TABLE_FIRST_ROW_DELETE = jq("[id='articleSelectionForm:articles:0:delete']");
public static final JQueryLocator ARTICLES_MESSAGE = jq("[id='messages'] li");
public static final JQueryLocator ARTICLES_MESSAGE1 = jq("[id='code:message1']");
public static final JQueryLocator ARTICLES_MESSAGE2 = jq("[id='rate:message1']");
public static final JQueryLocator DETAILS_BAR_CODE = jq("[id='barCode:input']");
public static final JQueryLocator DETAILS_CODE = jq("[id='code:input']");
public static final JQueryLocator DETAILS_DESCRIPTION = jq("[id='description:input']");
public static final JQueryLocator DETAILS_UM = jq("[id='um:input']");
public static final JQueryLocator DETAILS_MIS = jq("[id='mis:input']");
public static final JQueryLocator DETAILS_CAT_MERC = jq("[id='catMerc:input']");
public static final JQueryLocator DETAILS_IMPONIBLE = jq("[id='imponible:input']");
public static final JQueryLocator DETAILS_PRIZE = jq("[id='prize:input']");
public static final JQueryLocator DETAILS_COST = jq("[id='cost:input']");
public static final JQueryLocator DETAILS_PROVIDER = jq("[id='provider:input']");
public static final JQueryLocator DETAILS_RATE = jq("[id='rate:input']");
public static final JQueryLocator DETAILS_CA = jq("[id='ca:input']");
public static final JQueryLocator DETAILS_SC1 = jq("[id='sc1:input']");
public static final JQueryLocator DETAILS_SC2 = jq("[id='sc2:input']");
public static final JQueryLocator DETAILS_SC3 = jq("[id='sc3:input']");
public static final JQueryLocator DETAILS_QTMIN = jq("[id='qtmin:input']");
public static final JQueryLocator DETAILS_QTMAX = jq("[id='qtmax:input']");
public static final JQueryLocator DETAILS_PACK = jq("[id='pack:input']");
public static final JQueryLocator DETAILS_HEALTH = jq("[id='health:input']");
public static final JQueryLocator DETAILS_VOLUME = jq("[id='volume:input']");
public static final JQueryLocator DETAILS_MAKING = jq("[id='making:input']");
public static final JQueryLocator DETAILS_NOTES = jq("[id='notes:input']");
public static final JQueryLocator SEARCH_PAGE_SIZE = jq("[id='pageSize']");
@BeforeMethod
public void setUp() {
selenium.open(contextPath);
selenium.waitForPageToLoad();
}
/**
* Tests the articles search - with both existing and non-existing queries.
*/
@Test
public void testSearch() {
selenium.click(MENU_FIND);
selenium.waitForPageToLoad();
enterSearchQuery("provider");
assertFalse(selenium.isElementPresent(SEARCH_NO_RESULTS));
assertEquals(5, selenium.getCount(COUNT_ARTICLES));
enterSearchQuery("nonExistingArticle");
assertTrue(selenium.isElementPresent(SEARCH_NO_RESULTS));
assertEquals(0, selenium.getCount(COUNT_ARTICLES));
}
@Test
public void testSearchPageSize() {
int[] values = { 5, 10, 20 };
selenium.click(MENU_FIND);
selenium.waitForPageToLoad();
selenium.type(SEARCH_QUERY, "provider");
for (int pageSize : values) {
selenium.select(SEARCH_PAGE_SIZE,
new OptionValueLocator(String.valueOf(pageSize)));
waitXhr(selenium).keyUp(SEARCH_QUERY, " ");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (articles.length > pageSize)
assertEquals(selenium.getCount(COUNT_ARTICLES), pageSize);
else
assertEquals(selenium.getCount(COUNT_ARTICLES), articles.length);
}
}
@Test
public void testInsertDeleteNewArticle() {
ArticleOperation articleOperation = new ArticleOperation();
selenium.click(MENU_INSERT);
selenium.waitForPageToLoad();
String catMerc = "newName";
String rate = "012345678";
String pack = "1111111111";
Article article = articleOperation.create("99999999", "", "", "", "",
catMerc, "", "", "", "", rate, "", "", "", "", "", "", pack,
"", "", "", "");
populateArticleFields(article);
selenium.click(BUTTON_INSERT_PROCEED);
selenium.waitForPageToLoad();
String message = selenium.getText(ARTICLES_MESSAGE);
assertTrue(message, message.contains(article.getCodeArticle()));
// cancel article
selenium.click(BUTTON_CANCEL);
selenium.click(BUTTON_INSERT_PROCEED);
selenium.waitForPageToLoad();
String message1 = selenium.getText(ARTICLES_MESSAGE1);
assertTrue(message1, message1.contains(article.getCodeArticle()));
article.setRate("");
article.setCodeArticle("99999991");
populateArticleFields(article);
selenium.click(BUTTON_INSERT_PROCEED);
selenium.waitForPageToLoad();
String message2 = selenium.getText(ARTICLES_MESSAGE2);
assertFalse(message2, message2.contains(article.getCodeArticle()));
selenium.click(MENU_FIND);
selenium.waitForPageToLoad();
enterSearchQuery(catMerc);
selenium.click(ARTICLES_TABLE_FIRST_ROW_DELETE);
selenium.waitForPageToLoad();
message = selenium.getText(ARTICLES_MESSAGE);
assertTrue(message, message.contains("99999999"));
}
@Test
public void testMultiSearchingUpdate() {
Article[] articles = new Article[] { article0, article1, article2,
article4 };
int articlesCount = selenium.getCount(COUNT_ARTICLES);
// make 4 articles
for (Article article : articles) {
searchUpdateArticle(article, "7777777");
}
selenium.click(MENU_FIND);
selenium.waitForPageToLoad();
enterSearchQuery("7777777");
assertEquals(articlesCount, selenium.getCount(COUNT_ARTICLES));
}
protected void searchUpdateArticle(Article article, String newPack) {
if (!selenium.isElementPresent(SEARCH_QUERY)) {
selenium.open(contextPath);
selenium.waitForPageToLoad();
selenium.click(MENU_FIND);
selenium.waitForPageToLoad();
}
enterSearchQuery(article.getDescription());
selenium.click(SEARCH_RESULT_TABLE_FIRST_ROW_LINK);
selenium.waitForPageToLoad();
// article page
populateArticleFields(newPack);
selenium.click(BUTTON_UPDATE_PROCEED);
selenium.waitForPageToLoad();
// main page
assertTrue("Update success.",
selenium.isTextPresent("You have been successfully updated"));
// article page
populateArticleFields(article.getPack());
selenium.click(BUTTON_UPDATE_PROCEED);
selenium.waitForPageToLoad();
// main page
assertTrue("Update success.",
selenium.isTextPresent("You have been successfully updated"));
}
protected void populateArticleFields(String pack) {
selenium.type(DETAILS_PACK, pack);
}
protected void populateArticleFields(String pack, String rate) {
populateArticleFields(pack);
selenium.type(DETAILS_RATE, rate);
}
protected void populateArticleFields(Article article) {
populateArticleFields(article.getPack(), article.getRate());
selenium.type(DETAILS_CODE, article.getCodeArticle());
selenium.type(DETAILS_BAR_CODE, article.getBarCode());
selenium.type(DETAILS_DESCRIPTION, article.getDescription());
selenium.type(DETAILS_UM, article.getUm());
selenium.type(DETAILS_MIS, article.getMis());
selenium.type(DETAILS_CAT_MERC, article.getCatMerc());
selenium.type(DETAILS_IMPONIBLE, article.getImponible());
selenium.type(DETAILS_PRIZE, article.getPrize());
selenium.type(DETAILS_COST, article.getCost());
selenium.type(DETAILS_PROVIDER, article.getProvider());
selenium.type(DETAILS_MAKING, article.getMaking());
selenium.type(DETAILS_CA, article.getCa());
selenium.type(DETAILS_SC1, article.getSc1());
selenium.type(DETAILS_SC2, article.getSc2());
selenium.type(DETAILS_SC3, article.getSc3());
selenium.type(DETAILS_QTMIN, article.getQtmin());
selenium.type(DETAILS_QTMAX, article.getQtmax());
selenium.type(DETAILS_HEALTH, article.getHealth());
selenium.type(DETAILS_VOLUME, article.getVolume());
selenium.type(DETAILS_NOTES, article.getNotes());
}
}