diff --git a/functional-test/src/main/java/org/zanata/page/groups/CreateVersionGroupPage.java b/functional-test/src/main/java/org/zanata/page/groups/CreateVersionGroupPage.java index 4e4b9bd504..2b1ca764de 100644 --- a/functional-test/src/main/java/org/zanata/page/groups/CreateVersionGroupPage.java +++ b/functional-test/src/main/java/org/zanata/page/groups/CreateVersionGroupPage.java @@ -24,6 +24,10 @@ public class CreateVersionGroupPage extends BasePage { public final static String LENGTH_ERROR = "value must be shorter than or equal to 100 characters"; + public final static String VALIDATION_ERROR = + "must start and end with letter or number, and contain only " + + "letters, numbers, periods, underscores and hyphens."; + @FindBy(id = "group-form:descriptionField:description") private WebElement groupDescriptionField; diff --git a/functional-test/src/main/java/org/zanata/page/groups/VersionGroupPage.java b/functional-test/src/main/java/org/zanata/page/groups/VersionGroupPage.java index 7aa54126aa..93bb7d5deb 100644 --- a/functional-test/src/main/java/org/zanata/page/groups/VersionGroupPage.java +++ b/functional-test/src/main/java/org/zanata/page/groups/VersionGroupPage.java @@ -38,6 +38,11 @@ public VersionGroupPage(final WebDriver driver) { private final By newVersionListBy = By .id("settings-projects-form:newVersionField:newVersionItems"); + public String getGroupName() { + return getDriver().findElement(By.id("group-info")) + .findElement(By.tagName("h1")).getText(); + } + public List searchProject(final String projectName, final int expectedResultNum) { projectSearchField.sendKeys(projectName); diff --git a/functional-test/src/main/java/org/zanata/page/projectversion/CreateVersionPage.java b/functional-test/src/main/java/org/zanata/page/projectversion/CreateVersionPage.java index 1a1d8d0c84..441268931b 100644 --- a/functional-test/src/main/java/org/zanata/page/projectversion/CreateVersionPage.java +++ b/functional-test/src/main/java/org/zanata/page/projectversion/CreateVersionPage.java @@ -35,8 +35,8 @@ public class CreateVersionPage extends BasePage { public final static String VALIDATION_ERROR = - "must start and end with letter or number, " - + "and contain only letters, numbers, underscores and hyphens."; + "must start and end with letter or number, and contain only " + + "letters, numbers, periods, underscores and hyphens."; @FindBy(id = "create-version-form:project-type") private WebElement projectTypeSelection; diff --git a/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupIDValidationTest.java b/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupIDValidationTest.java index 12af8fdc59..f16ea66bb0 100644 --- a/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupIDValidationTest.java +++ b/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupIDValidationTest.java @@ -110,10 +110,6 @@ public void goToGroupPage() { @Theory public void inputValidationForID(String inputText) { - String errorMsg = - "must start and end with letter or number, and " - + "contain only letters, numbers, underscores and hyphens."; - // Yes reassign groupPage is necessary since JSF re-renders itself after // each field input and selenium is not happy with it groupPage = groupPage @@ -123,7 +119,7 @@ public void inputValidationForID(String inputText) { .saveGroupFailure(); assertThat(groupPage.getFieldErrors()) - .contains(errorMsg) + .contains(CreateVersionGroupPage.VALIDATION_ERROR) .as("Validation error is displayed for input:" + inputText); } } diff --git a/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupTest.java b/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupTest.java index 1c0f1d6021..579ae4a1e4 100644 --- a/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupTest.java +++ b/functional-test/src/test/java/org/zanata/feature/versionGroup/VersionGroupTest.java @@ -174,4 +174,24 @@ public void addANewProjectVersionToAnEmptyGroup() throws Exception { .contains("about fedora\nmaster") .as("The version group shows in the list"); } + + @Feature(summary = "The administrator can use numbers, letters, periods, " + + "underscores and hyphens to create a group", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 396261) + @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) + public void groupIdCharactersAreAcceptable() throws Exception { + String groupID = "test-_.1"; + String groupName = "TestValidIdCharacters"; + VersionGroupPage versionGroupPage = dashboardPage + .goToGroups() + .createNewGroup() + .inputGroupId(groupID) + .inputGroupName(groupName) + .saveGroup() + .goToGroup(groupName); + + assertThat(versionGroupPage.getGroupName()) + .isEqualTo(groupName) + .as("The group was created"); + } } diff --git a/zanata-model/src/main/java/org/zanata/model/validator/Slug.java b/zanata-model/src/main/java/org/zanata/model/validator/Slug.java index aa77a29121..f0c3e9d02f 100644 --- a/zanata-model/src/main/java/org/zanata/model/validator/Slug.java +++ b/zanata-model/src/main/java/org/zanata/model/validator/Slug.java @@ -30,7 +30,7 @@ /** * A slug is a short label for something, containing only letters, numbers, - * underscores or hyphens. It is typically used in urls + * periods, underscores or hyphens. It is typically used in urls * * @author asgeirf * diff --git a/zanata-war/src/main/resources/ValidationMessages.properties b/zanata-war/src/main/resources/ValidationMessages.properties index 522257c0eb..708feaae38 100644 --- a/zanata-war/src/main/resources/ValidationMessages.properties +++ b/zanata-war/src/main/resources/ValidationMessages.properties @@ -10,7 +10,7 @@ javax.validation.constraints.Pattern.message=must match {regexp} javax.validation.constraints.Range.message=must be between {min} and {max} javax.validation.constraints.Size.message=size must be between {min} and {max} javax.validation.constraints.Email.message=must be a well-formed email address -javax.validation.constraints.Slug.message=must start and end with letter or number, and contain only letters, numbers, underscores and hyphens. +javax.validation.constraints.Slug.message=must start and end with letter or number, and contain only letters, numbers, periods, underscores and hyphens. javax.validation.constraints.Url.message=must be a valid URL #javax.validation.constraints.UrlNoSlash.message=must be a valid URL (without final slash) javax.validation.constraints.NotDuplicateEmail.message=duplicate email