Java tutorial
/* * Copyright (C) 2009-2016 Slava Semushin <slava.semushin@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package ru.mystamps.web.tests.cases; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.fest.assertions.api.Assertions.assertThat; import ru.mystamps.web.Url; import ru.mystamps.web.tests.WebDriverFactory; import ru.mystamps.web.tests.page.AddCategoryPage; import ru.mystamps.web.tests.page.AddSeriesPage; import static ru.mystamps.web.tests.TranslationUtils.tr; import static ru.mystamps.web.tests.fest.PageWithFormAssert.assertThat; import static ru.mystamps.web.validation.ValidationRules.CATEGORY_NAME_MAX_LENGTH; import static ru.mystamps.web.validation.ValidationRules.CATEGORY_NAME_MIN_LENGTH; public class WhenAdminAddCategory extends WhenAnyUserAtAnyPageWithForm<AddCategoryPage> { private static final String TEST_CATEGORY_NAME_EN = "Space"; private static final String TEST_CATEGORY_NAME_RU = "??"; @Value("${valid_admin_login}") private String validAdminLogin; @Value("${valid_admin_password}") private String validAdminPassword; @Value("${valid_category_name_en}") private String existingCategoryNameEn; @Value("${valid_category_name_ru}") private String existingCategoryNameRu; public WhenAdminAddCategory() { super(AddCategoryPage.class); hasTitle(tr("t_create_category")); hasHeader(StringUtils.capitalize(tr("t_create_category"))); } @BeforeClass public void login() { page.login(validAdminLogin, validAdminPassword); } @BeforeMethod public void openPage() { page.open(); } @AfterClass(alwaysRun = true) public void tearDown() { page.logout(); } @Test(groups = "std") public void shouldHaveStandardStructure() { checkStandardStructure(); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldNotBeTooShort() { page.addCategory("ee", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("value.too-short", CATEGORY_NAME_MIN_LENGTH)); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldNotBeTooShort() { page.addCategory(TEST_CATEGORY_NAME_EN, "??"); assertThat(page).field("nameRu").hasError(tr("value.too-short", CATEGORY_NAME_MIN_LENGTH)); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldNotBeTooLong() { String longCategoryName = StringUtils.repeat("e", CATEGORY_NAME_MAX_LENGTH + 1); page.addCategory(longCategoryName, TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("value.too-long", CATEGORY_NAME_MAX_LENGTH)); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldNotBeTooLong() { String longCategoryName = StringUtils.repeat("?", CATEGORY_NAME_MAX_LENGTH + 1); page.addCategory(TEST_CATEGORY_NAME_EN, longCategoryName); assertThat(page).field("nameRu").hasError(tr("value.too-long", CATEGORY_NAME_MAX_LENGTH)); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldBeUnique() { page.addCategory(existingCategoryNameEn, TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("ru.mystamps.web.validation.jsr303.UniqueCategoryName.message")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldBeUnique() { page.addCategory(TEST_CATEGORY_NAME_EN, existingCategoryNameRu); assertThat(page).field("nameRu") .hasError(tr("ru.mystamps.web.validation.jsr303.UniqueCategoryName.message")); } @Test(groups = "valid", dependsOnGroups = "std") public void categoryNameEnWithAllowedCharactersShouldBeAccepted() { page.addCategory("Valid-Name Category", "InvalidRussianCategory"); assertThat(page).field("name").hasNoError(); } @Test(groups = "valid", dependsOnGroups = "std") public void categoryNameRuWithAllowedCharactersShouldBeAccepted() { page.addCategory("??????", "? ?"); assertThat(page).field("nameRu").hasNoError(); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnWithForbiddenCharactersShouldBeRejected() { page.addCategory("S0m3+CategoryN_ame", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("category-name-en.invalid")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuWithForbiddenCharactersShouldBeRejected() { page.addCategory(TEST_CATEGORY_NAME_EN, "?123"); assertThat(page).field("nameRu").hasError(tr("category-name-ru.invalid")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldNotStartsFromHyphen() { page.addCategory("-test", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("value.hyphen")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldNotStartsFromHyphen() { page.addCategory(TEST_CATEGORY_NAME_EN, "-?"); assertThat(page).field("nameRu").hasError(tr("value.hyphen")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldNotEndsWithHyphen() { page.addCategory("test-", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("value.hyphen")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldNotEndsWithHyphen() { page.addCategory(TEST_CATEGORY_NAME_EN, "?-"); assertThat(page).field("nameRu").hasError(tr("value.hyphen")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameEnShouldNotContainRepeatedHyphens() { page.addCategory("te--st", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasError(tr("value.repeating_hyphen")); } @Test(groups = "invalid", dependsOnGroups = "std") public void categoryNameRuShouldNotContainRepeatedHyphens() { page.addCategory(TEST_CATEGORY_NAME_EN, "--?"); assertThat(page).field("nameRu").hasError(tr("value.repeating_hyphen")); } @Test(groups = "misc", dependsOnGroups = "std") public void categoryNameEnShouldBeStripedFromLeadingAndTrailingSpaces() { page.addCategory(" t3st ", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasValue("t3st"); } @Test(groups = "misc", dependsOnGroups = "std") public void categoryNameRuShouldBeStripedFromLeadingAndTrailingSpaces() { page.addCategory(TEST_CATEGORY_NAME_EN, " 3? "); assertThat(page).field("nameRu").hasValue("3?"); } @Test(groups = "misc", dependsOnGroups = "std") public void categoryNameEnShouldReplaceRepeatedSpacesByOne() { page.addCategory("t3 st", TEST_CATEGORY_NAME_RU); assertThat(page).field("name").hasValue("t3 st"); } @Test(groups = "misc", dependsOnGroups = "std") public void categoryNameRuShouldReplaceRepeatedSpacesByOne() { page.addCategory(TEST_CATEGORY_NAME_EN, "3 ?"); assertThat(page).field("nameRu").hasValue("3 ?"); } @Test(groups = "logic", dependsOnGroups = { "std", "invalid", "valid", "misc" }) public void shouldBeRedirectedToPageWithInfoAboutCategoryAfterCreation() { page.addCategory(TEST_CATEGORY_NAME_EN, TEST_CATEGORY_NAME_RU); String expectedUrl = Url.INFO_CATEGORY_PAGE.replace("{slug}", TEST_CATEGORY_NAME_EN.toLowerCase()); assertThat(page.getCurrentUrl()).isEqualTo(expectedUrl); assertThat(page.getHeader()).isEqualTo(TEST_CATEGORY_NAME_EN); } @Test(groups = "logic", dependsOnMethods = "shouldBeRedirectedToPageWithInfoAboutCategoryAfterCreation") public void categoryShouldBeAvailableForChoosingAtPageWithSeries() { page.open(Url.ADD_SERIES_PAGE); AddSeriesPage seriesPage = new AddSeriesPage(WebDriverFactory.getDriver()); assertThat(seriesPage.getCategoryFieldValues()).contains(TEST_CATEGORY_NAME_EN); } @Override protected void checkServerResponseCode() { // Ignore this check because server always returns 401 for anonymous user and our test suite // lack ability to check response code after authentication. } @Override protected void shouldHaveUserBar() { // Ignore this check because when user authenticated there is no links for login/register. } }