From 569e138801a41ede863fda55ccdd83d7fb9d1983 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Mon, 10 Nov 2014 15:49:45 +1000 Subject: [PATCH] Add file tests, clean up and simplify Squashed commit of the following: commit 14710083caa38a3830271950233b8c86d12a48e1 Author: Damian Jansen Date: Mon Nov 10 12:35:03 2014 +1000 Move apikey to constant, and html file data to static var commit 37edef8882204c2d6b6061fc95c5053ba299cae7 Author: Damian Jansen Date: Thu Sep 4 15:39:20 2014 +1000 Add file tests, clean up and simplify - Test html, idml, dtd, odg/p/s/t File type upload - Use ZanataRestCaller rather than manually creating projects, versions - Remove unused imports - Add a null pointer check on opening files --- functional-test/pom.xml | 1 + .../main/java/org/zanata/util/Constants.java | 3 +- .../org/zanata/util/TestFileGenerator.java | 8 +- .../clientserver/ProjectMaintainerTest.java | 11 ++- ...ploadTest.java => FileTypeUploadTest.java} | 71 +++++++++++--- .../document/HTMLDocumentTypeTest.java | 89 ++++-------------- .../document/SubtitleDocumentTypeTest.java | 2 +- .../feature/misc/RateLimitRestAndUITest.java | 4 +- .../feature/project/EditPermissionsTest.java | 34 ++++--- .../feature/project/EditProjectAboutTest.java | 6 +- .../projectversion/VersionFilteringTest.java | 28 ++---- .../zanata/feature/testharness/TestPlan.java | 4 +- .../src/test/resources/setup.properties | 2 +- .../src/test/resources/upload-idml.idml | Bin 0 -> 37902 bytes .../src/test/resources/upload-odg.odg | Bin 0 -> 9287 bytes .../src/test/resources/upload-odp.odp | Bin 0 -> 10765 bytes .../src/test/resources/upload-ods.ods | Bin 0 -> 13042 bytes .../src/test/resources/upload-odt.odt | Bin 0 -> 9034 bytes 18 files changed, 132 insertions(+), 131 deletions(-) rename functional-test/src/test/java/org/zanata/feature/document/{DocTypeUploadTest.java => FileTypeUploadTest.java} (66%) create mode 100644 functional-test/src/test/resources/upload-idml.idml create mode 100644 functional-test/src/test/resources/upload-odg.odg create mode 100644 functional-test/src/test/resources/upload-odp.odp create mode 100644 functional-test/src/test/resources/upload-ods.ods create mode 100644 functional-test/src/test/resources/upload-odt.odt diff --git a/functional-test/pom.xml b/functional-test/pom.xml index cf6664425f..ea475d03b4 100644 --- a/functional-test/pom.xml +++ b/functional-test/pom.xml @@ -43,6 +43,7 @@ zanata-test-${project.version} http://${cargo.host}:${cargo.servlet.port}/${context.path}/ b6d7044e9ee3b2447c28fb7c50d86d98 + d83882201764f7d339e97c4b087f0806 ${project.build.testOutputDirectory}/sample-projects ${project.build.directory}/browser_console.log diff --git a/functional-test/src/main/java/org/zanata/util/Constants.java b/functional-test/src/main/java/org/zanata/util/Constants.java index 9f469b807a..3dc77ca113 100644 --- a/functional-test/src/main/java/org/zanata/util/Constants.java +++ b/functional-test/src/main/java/org/zanata/util/Constants.java @@ -30,7 +30,8 @@ public enum Constants { propFile("setup.properties"), zanataInstance("zanata.instance.url"), projectsLink("Projects"), webDriverType("webdriver.type"), chrome, firefox, htmlUnit, sampleProjects("zanata.sample.projects.basedir"), zanataApiKey( - "zanata.apikey"), webDriverWait("webdriver.wait"); + "zanata.apikey"), zanataTranslatorKey("zanata.translatorkey"), + webDriverWait("webdriver.wait"); public static final int FIFTY_SEC = 50000; private String value; diff --git a/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java b/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java index bb965d02ab..8ce60a7528 100644 --- a/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java +++ b/functional-test/src/main/java/org/zanata/util/TestFileGenerator.java @@ -238,9 +238,11 @@ private static class ZanataXml { } public File openTestFile(String filename) { - URL url = Thread.currentThread().getContextClassLoader() - .getResource(filename); - File testFile = new File(url.getPath()); + File testFile; + URL url = Thread.currentThread() + .getContextClassLoader().getResource(filename); + Preconditions.checkNotNull(url, "File %s url is null", filename); + testFile = new File(url.getPath()); Preconditions.checkArgument(testFile.exists(), "%s not found", testFile); return testFile; } diff --git a/functional-test/src/test/java/org/zanata/feature/clientserver/ProjectMaintainerTest.java b/functional-test/src/test/java/org/zanata/feature/clientserver/ProjectMaintainerTest.java index 1474011239..7ce8a77a1c 100644 --- a/functional-test/src/test/java/org/zanata/feature/clientserver/ProjectMaintainerTest.java +++ b/functional-test/src/test/java/org/zanata/feature/clientserver/ProjectMaintainerTest.java @@ -33,6 +33,8 @@ import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.projectversion.VersionLanguagesPage; import org.zanata.rest.dto.resource.TranslationsResource; +import org.zanata.util.Constants; +import org.zanata.util.PropertiesHolder; import org.zanata.util.SampleProjectRule; import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.BasicWorkFlow; @@ -96,7 +98,8 @@ public void pushTransAndCopyTransTest() { // translator creates the project and become maintainer ZanataRestCaller restCaller = new ZanataRestCaller("translator", - "d83882201764f7d339e97c4b087f0806"); + PropertiesHolder.getProperty( + Constants.zanataTranslatorKey.value())); restCaller.createProjectAndVersion("plurals", "master", "podir"); List output = client.callWithTimeout(projectRootPath, @@ -147,9 +150,9 @@ public void pushTransAndCopyTransTest() { tcmsTestPlanIds = 5316, tcmsTestCaseIds = 136564) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void projectMaintainerPullTest() throws IOException { - ZanataRestCaller restCaller = - new ZanataRestCaller("translator", - "d83882201764f7d339e97c4b087f0806"); + ZanataRestCaller restCaller = new ZanataRestCaller("translator", + PropertiesHolder + .getProperty(Constants.zanataTranslatorKey.value())); File workDir = Files.createTempDir(); String projectSlug = "pull-test"; String iterationSlug = "master"; diff --git a/functional-test/src/test/java/org/zanata/feature/document/DocTypeUploadTest.java b/functional-test/src/test/java/org/zanata/feature/document/FileTypeUploadTest.java similarity index 66% rename from functional-test/src/test/java/org/zanata/feature/document/DocTypeUploadTest.java rename to functional-test/src/test/java/org/zanata/feature/document/FileTypeUploadTest.java index 555f24aca2..1f3d9c0f60 100644 --- a/functional-test/src/test/java/org/zanata/feature/document/DocTypeUploadTest.java +++ b/functional-test/src/test/java/org/zanata/feature/document/FileTypeUploadTest.java @@ -21,13 +21,15 @@ package org.zanata.feature.document; import lombok.extern.slf4j.Slf4j; -import org.junit.BeforeClass; +import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.experimental.categories.Category; import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.TestPlan.BasicAcceptanceTest; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.feature.testharness.ZanataTestCase; @@ -36,6 +38,7 @@ import org.zanata.util.CleanDocumentStorageRule; import org.zanata.util.SampleProjectRule; import org.zanata.util.TestFileGenerator; +import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.LoginWorkFlow; import org.zanata.workflow.ProjectWorkFlow; @@ -50,24 +53,34 @@ @Slf4j @RunWith(Theories.class) @Category(DetailedTest.class) -public class DocTypeUploadTest extends ZanataTestCase { +public class FileTypeUploadTest extends ZanataTestCase { - @ClassRule - public static SampleProjectRule sampleProjectRule = new SampleProjectRule(); + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); @ClassRule public static CleanDocumentStorageRule documentStorageRule = new CleanDocumentStorageRule(); - @BeforeClass - public static void beforeClass() { + @Before + public void before() { + new ZanataRestCaller().createProjectAndVersion("doctype-test", + "doctype-upload", "File"); new LoginWorkFlow().signIn("admin", "admin"); - new ProjectWorkFlow().createNewProjectVersion( - "about fedora", "doctype-upload", "File") - .logout(); } private static String testString = "Test text 1"; + private static String htmlString = ""+testString+""+ + " "; + @DataPoint + public static File TXT_FILE = new TestFileGenerator() + .generateTestFileWithContent( "testtxtfile", ".txt", testString); + + @DataPoint + public static File DTD_FILE = new TestFileGenerator() + .generateTestFileWithContent( + "testdtdfile", ".dtd", + ""); @DataPoint public static File SRT_FILE = new TestFileGenerator() @@ -97,16 +110,46 @@ public static void beforeClass() { "00:04:35.03,00:04:38.82" + sep() + testString); + @DataPoint + public static File HTM_FILE = new TestFileGenerator() + .generateTestFileWithContent("testhtmfile", ".htm", htmlString); + + @DataPoint + public static File HTML_FILE = new TestFileGenerator() + .generateTestFileWithContent("testhtmlfile", ".html", htmlString); + + @DataPoint + public static File IDML_FILE = new TestFileGenerator() + .openTestFile("upload-idml.idml"); + + @DataPoint + public static File ODT_FILE = new TestFileGenerator() + .openTestFile("upload-odt.odt"); + + @DataPoint + public static File ODS_FILE = new TestFileGenerator() + .openTestFile("upload-ods.ods"); + + @DataPoint + public static File ODG_FILE = new TestFileGenerator() + .openTestFile("upload-odg.odg"); + + @DataPoint + public static File ODP_FILE = new TestFileGenerator() + .openTestFile("upload-odp.odp"); + @Theory @Category(BasicAcceptanceTest.class) - public void uploadFile(File testFile) throws Exception { + @Feature(bugzilla = 980670, + summary = "The administrator can upload raw files for translation", + tcmsTestCaseIds = { 377743 }, + tcmsTestPlanIds = { 5316 } ) + public void uploadFileTypeDocument(File testFile) throws Exception { String testFileName = testFile.getName(); log.info("[uploadFile] "+testFileName); - VersionDocumentsPage versionDocumentsPage = new LoginWorkFlow() - .signIn("admin", "admin") - .goToProjects() - .goToProject("about fedora") + VersionDocumentsPage versionDocumentsPage = new ProjectWorkFlow() + .goToProjectByName("doctype-test") .gotoVersion("doctype-upload") .gotoSettingsTab() .gotoSettingsDocumentsTab() diff --git a/functional-test/src/test/java/org/zanata/feature/document/HTMLDocumentTypeTest.java b/functional-test/src/test/java/org/zanata/feature/document/HTMLDocumentTypeTest.java index e6f3abb8af..9f818fa78e 100644 --- a/functional-test/src/test/java/org/zanata/feature/document/HTMLDocumentTypeTest.java +++ b/functional-test/src/test/java/org/zanata/feature/document/HTMLDocumentTypeTest.java @@ -22,8 +22,9 @@ import java.io.File; -import org.junit.BeforeClass; -import org.junit.ClassRule; + +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.zanata.feature.Feature; @@ -32,10 +33,12 @@ import org.zanata.page.projectversion.VersionDocumentsPage; import org.zanata.page.projectversion.versionsettings.VersionDocumentsTab; import org.zanata.page.webtrans.EditorPage; +import org.zanata.util.Constants; +import org.zanata.util.PropertiesHolder; import org.zanata.util.SampleProjectRule; import org.zanata.util.TestFileGenerator; +import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.LoginWorkFlow; -import org.zanata.page.projects.projectsettings.ProjectPermissionsTab; import org.zanata.workflow.ProjectWorkFlow; import static org.assertj.core.api.Assertions.assertThat; @@ -47,71 +50,19 @@ @Category(DetailedTest.class) public class HTMLDocumentTypeTest extends ZanataTestCase { - @ClassRule - public static SampleProjectRule sampleProjectRule = new SampleProjectRule(); + @Rule + public SampleProjectRule sampleProjectRule = new SampleProjectRule(); private TestFileGenerator testFileGenerator = new TestFileGenerator(); - @BeforeClass - public static void beforeClass() { - ProjectPermissionsTab projectPermissionsTab = new LoginWorkFlow() - .signIn("admin", "admin") - .goToProjects() - .goToProject("about fedora") - .gotoSettingsTab() - .gotoSettingsPermissionsTab() - .enterSearchMaintainer("translator") - .selectSearchMaintainer("translator"); - projectPermissionsTab.expectNotification( - "Maintainer \"translator\" has been added to project."); - projectPermissionsTab = projectPermissionsTab.clickRemoveOn("admin"); - projectPermissionsTab.expectNotification("Maintainer \"Administrator\" " + - "has been removed from project."); - new ProjectWorkFlow().createNewProjectVersion( - "about fedora", "html-upload", "File") - .logout(); - } - - @Feature(bugzilla = 980670, - summary = "Administrator can upload a HTML file for translation", - tcmsTestCaseIds = { 377743 }, - tcmsTestPlanIds = { 5316 } ) - @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void uploadHTMLFileAsAdministrator() throws Exception { - File htmlfile = testFileGenerator.generateTestFileWithContent( - "testhtmlfile", ".html", - "Test content" + - "
This is Bold text"); - String testFileName = htmlfile.getName(); - VersionDocumentsTab versionDocumentsTab = new LoginWorkFlow() - .signIn("admin", "admin") - .goToProjects() - .goToProject("about fedora") - .gotoVersion("html-upload") - .gotoSettingsTab() - .gotoSettingsDocumentsTab() - .pressUploadFileButton() - .enterFilePath(htmlfile.getAbsolutePath()) - .submitUpload() - .clickUploadDone(); - - VersionDocumentsPage versionDocumentsPage = - versionDocumentsTab.gotoDocumentTab(); - - assertThat(versionDocumentsPage. - sourceDocumentsContains(htmlfile.getName())) - .as("Document shows in table"); - - EditorPage editorPage = versionDocumentsPage - .gotoLanguageTab() - .translate("pl", testFileName); - - assertThat(editorPage.getMessageSourceAtRowIndex(0)) - .isEqualTo("Test content") - .as("The first translation source is correct"); - assertThat(editorPage.getMessageSourceAtRowIndex(1)) - .isEqualTo("This is Bold text") - .as("The second translation source is correct"); + @Before + public void before() { + System.out.println(PropertiesHolder + .getProperty(Constants.zanataTranslatorKey.value())); + new ZanataRestCaller("translator", PropertiesHolder.getProperty( + Constants.zanataTranslatorKey.value())) + .createProjectAndVersion("html-project", "html-upload", "file"); + new LoginWorkFlow().signIn("translator", "translator"); } @Feature(bugzilla = 980670, @@ -123,13 +74,11 @@ public void uploadHTMLFileAsMaintainer() throws Exception { File htmlfile = testFileGenerator.generateTestFileWithContent( "testhtmlfile", ".html", "Test content" + - "
This is Bold text" + "
This is Bold text" ); String testFileName = htmlfile.getName(); - VersionDocumentsTab versionDocumentsTab = new LoginWorkFlow() - .signIn("translator", "translator") - .goToProjects() - .goToProject("about fedora") + VersionDocumentsTab versionDocumentsTab = new ProjectWorkFlow() + .goToProjectByName("html-project") .gotoVersion("html-upload") .gotoSettingsTab() .gotoSettingsDocumentsTab() diff --git a/functional-test/src/test/java/org/zanata/feature/document/SubtitleDocumentTypeTest.java b/functional-test/src/test/java/org/zanata/feature/document/SubtitleDocumentTypeTest.java index 44d54c7368..4de16bf1e9 100644 --- a/functional-test/src/test/java/org/zanata/feature/document/SubtitleDocumentTypeTest.java +++ b/functional-test/src/test/java/org/zanata/feature/document/SubtitleDocumentTypeTest.java @@ -41,7 +41,7 @@ /** * Covers more detailed testing of the subtitle formats - * @see DocTypeUploadTest + * @see FileTypeUploadTest * @author Damian Jansen * djansen@redhat.com */ diff --git a/functional-test/src/test/java/org/zanata/feature/misc/RateLimitRestAndUITest.java b/functional-test/src/test/java/org/zanata/feature/misc/RateLimitRestAndUITest.java index b59776a034..4526d6e203 100644 --- a/functional-test/src/test/java/org/zanata/feature/misc/RateLimitRestAndUITest.java +++ b/functional-test/src/test/java/org/zanata/feature/misc/RateLimitRestAndUITest.java @@ -70,8 +70,8 @@ public class RateLimitRestAndUITest extends ZanataTestCase { public AddUsersRule addUsersRule = new AddUsersRule(); private static final String TRANSLATOR = "translator"; - private static final String TRANSLATOR_API = - "d83882201764f7d339e97c4b087f0806"; + private static final String TRANSLATOR_API = Constants.zanataTranslatorKey + .value(); private String maxConcurrentPathParam = "c/max.concurrent.req.per.apikey"; private String maxActivePathParam = "c/max.active.req.per.apikey"; diff --git a/functional-test/src/test/java/org/zanata/feature/project/EditPermissionsTest.java b/functional-test/src/test/java/org/zanata/feature/project/EditPermissionsTest.java index 49a764efb0..f17ec80662 100644 --- a/functional-test/src/test/java/org/zanata/feature/project/EditPermissionsTest.java +++ b/functional-test/src/test/java/org/zanata/feature/project/EditPermissionsTest.java @@ -34,7 +34,10 @@ import org.zanata.page.projects.ProjectMaintainersPage; import org.zanata.page.projects.projectsettings.ProjectPermissionsTab; import org.zanata.page.projects.ProjectVersionsPage; +import org.zanata.util.Constants; +import org.zanata.util.PropertiesHolder; import org.zanata.util.SampleProjectRule; +import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.LoginWorkFlow; import org.zanata.workflow.ProjectWorkFlow; @@ -115,6 +118,10 @@ public void addMaintainerAsAdmin() throws Exception { tcmsTestPlanIds = 5316, tcmsTestCaseIds = 199006) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void addMaintainerAsMaintainer() throws Exception { + new ZanataRestCaller("translator", PropertiesHolder + .getProperty(Constants.zanataTranslatorKey.value())) + .createProjectAndVersion("addmaintainer", "addmaintainer", "file"); + assertThat(new LoginWorkFlow() .signIn("translator", "translator") .loggedInAs()) @@ -122,7 +129,7 @@ public void addMaintainerAsMaintainer() throws Exception { .as("Translator has signed in"); ProjectPermissionsTab projectPermissionsTab = new ProjectWorkFlow() - .createNewSimpleProject("addmaintainer", "addmaintainer") + .goToProjectByName("addmaintainer") .gotoSettingsTab() .gotoSettingsPermissionsTab() .enterSearchMaintainer("glossarist") @@ -157,18 +164,16 @@ public void addMaintainerAsMaintainer() throws Exception { tcmsTestPlanIds = 5316, tcmsTestCaseIds = 321234) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void removeMaintainer() throws Exception { + new ZanataRestCaller("translator", PropertiesHolder.getProperty( + Constants.zanataTranslatorKey.value())) + .createProjectAndVersion("removemaintainer", "removemaintainer", + "file"); assertThat(new LoginWorkFlow() .signIn("translator", "translator") .loggedInAs()) .isEqualTo("translator") .as("Translator has signed in"); - assertThat(new ProjectWorkFlow() - .createNewSimpleProject("removemaintainer", "removemaintainer") - .getProjectName()) - .isEqualTo("removemaintainer") - .as("The project is created"); - assertThat(new ProjectWorkFlow() .addMaintainer("removemaintainer", "glossarist") .getSettingsMaintainersList()) @@ -193,21 +198,20 @@ public void removeMaintainer() throws Exception { @Feature(summary = "The maintainer can remove themselves as maintainer " + "from a project", tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) - @Ignore("Exception thrown on removing self") + @Ignore("rhbz1151935") @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void removeSelfAsMaintainer() throws Exception { + new ZanataRestCaller("translator", PropertiesHolder.getProperty( + Constants.zanataTranslatorKey.value())) + .createProjectAndVersion( + "removemaintainer", "removemaintainer", "file"); + assertThat(new LoginWorkFlow() .signIn("translator", "translator") .loggedInAs()) .isEqualTo("translator") .as("Translator has signed in"); - assertThat(new ProjectWorkFlow() - .createNewSimpleProject("removemaintainer", "removemaintainer") - .getProjectName()) - .isEqualTo("removemaintainer") - .as("The project is created"); - ProjectPermissionsTab projectPermissionsTab = new ProjectWorkFlow() .addMaintainer("removemaintainer", "admin"); @@ -219,6 +223,8 @@ public void removeSelfAsMaintainer() throws Exception { ProjectBasePage projectBasePage = projectPermissionsTab .clickRemoveOnSelf("translator"); projectBasePage.slightPause(); + projectBasePage.expectNotification("Maintainer \"translator\" has " + + "been removed from project."); ProjectVersionsPage projectVersionsPage = projectBasePage .goToHomePage() .goToProjects() diff --git a/functional-test/src/test/java/org/zanata/feature/project/EditProjectAboutTest.java b/functional-test/src/test/java/org/zanata/feature/project/EditProjectAboutTest.java index 9198a7f287..ea709d5de0 100644 --- a/functional-test/src/test/java/org/zanata/feature/project/EditProjectAboutTest.java +++ b/functional-test/src/test/java/org/zanata/feature/project/EditProjectAboutTest.java @@ -30,6 +30,7 @@ import org.zanata.page.projects.ProjectAboutPage; import org.zanata.page.projects.projectsettings.ProjectAboutTab; import org.zanata.util.SampleProjectRule; +import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.LoginWorkFlow; import org.zanata.workflow.ProjectWorkFlow; @@ -49,6 +50,9 @@ public class EditProjectAboutTest extends ZanataTestCase { tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void addAboutPageDetails() throws Exception { + new ZanataRestCaller().createProjectAndVersion( + "aboutpagetest", "aboutpagetest", "file"); + String aboutText = "This is my about text for AF"; assertThat(new LoginWorkFlow() .signIn("admin", "admin") @@ -57,7 +61,7 @@ public void addAboutPageDetails() throws Exception { .as("Admin is logged in"); ProjectAboutTab projectAboutTab = new ProjectWorkFlow() - .createNewSimpleProject("aboutpagetest", "aboutpagetest") + .goToProjectByName("aboutpagetest") .gotoSettingsTab() .gotoSettingsAboutTab(); diff --git a/functional-test/src/test/java/org/zanata/feature/projectversion/VersionFilteringTest.java b/functional-test/src/test/java/org/zanata/feature/projectversion/VersionFilteringTest.java index 3ae5c83fa3..a4a47988c4 100644 --- a/functional-test/src/test/java/org/zanata/feature/projectversion/VersionFilteringTest.java +++ b/functional-test/src/test/java/org/zanata/feature/projectversion/VersionFilteringTest.java @@ -28,7 +28,10 @@ import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.page.projects.ProjectVersionsPage; +import org.zanata.util.Constants; +import org.zanata.util.PropertiesHolder; import org.zanata.util.SampleProjectRule; +import org.zanata.util.ZanataRestCaller; import org.zanata.workflow.LoginWorkFlow; import org.zanata.workflow.ProjectWorkFlow; @@ -44,11 +47,18 @@ public class VersionFilteringTest extends ZanataTestCase { @ClassRule public static SampleProjectRule sampleProjectRule = new SampleProjectRule(); + private ZanataRestCaller zanataRestCaller; + @Feature(summary = "The user can filter project versions by name", tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) public void versionSearchFiltering() throws Exception { String projectName = "versionsearchnums"; + zanataRestCaller = new ZanataRestCaller("translator", + PropertiesHolder + .getProperty(Constants.zanataTranslatorKey.value())); + zanataRestCaller.createProjectAndVersion(projectName, "alpha", "file"); + zanataRestCaller.createProjectAndVersion(projectName, "bravo", "file"); assertThat(new LoginWorkFlow() .signIn("translator", "translator") @@ -56,24 +66,6 @@ public void versionSearchFiltering() throws Exception { .isEqualTo("translator") .as("Login as translator"); - assertThat(new ProjectWorkFlow() - .createNewSimpleProject("version-search", projectName) - .getProjectName()) - .isEqualTo(projectName) - .as("The project is created"); - - assertThat(new ProjectWorkFlow() - .createNewProjectVersion(projectName, "alpha") - .getProjectVersionName()) - .isEqualTo("alpha") - .as("The version alpha is created"); - - assertThat(new ProjectWorkFlow() - .createNewProjectVersion(projectName, "bravo") - .getProjectVersionName()) - .isEqualTo("bravo") - .as("The version bravo is created"); - ProjectVersionsPage projectVersionsPage = new ProjectWorkFlow() .goToProjectByName(projectName) .waitForDisplayedVersions(2); diff --git a/functional-test/src/test/java/org/zanata/feature/testharness/TestPlan.java b/functional-test/src/test/java/org/zanata/feature/testharness/TestPlan.java index 45a9812607..d39b482af0 100644 --- a/functional-test/src/test/java/org/zanata/feature/testharness/TestPlan.java +++ b/functional-test/src/test/java/org/zanata/feature/testharness/TestPlan.java @@ -27,7 +27,7 @@ import org.zanata.feature.clientserver.*; import org.zanata.feature.concurrentedit.*; import org.zanata.feature.dashboard.DashboardTest; -import org.zanata.feature.document.DocTypeUploadTest; +import org.zanata.feature.document.FileTypeUploadTest; import org.zanata.feature.document.HTMLDocumentTypeTest; import org.zanata.feature.document.MultiFileUploadTest; import org.zanata.feature.document.SubtitleDocumentTypeTest; @@ -111,7 +111,7 @@ * Document * Source document upload and management */ - DocTypeUploadTest.class, + FileTypeUploadTest.class, HTMLDocumentTypeTest.class, MultiFileUploadTest.class, SubtitleDocumentTypeTest.class, diff --git a/functional-test/src/test/resources/setup.properties b/functional-test/src/test/resources/setup.properties index aaa727ce2e..31bc94103b 100644 --- a/functional-test/src/test/resources/setup.properties +++ b/functional-test/src/test/resources/setup.properties @@ -12,7 +12,7 @@ webdriver.wait=${webdriver.wait} zanata.instance.url=${zanata.instance.url} zanata.sample.projects.basedir=${zanata.sample.projects.basedir} zanata.apikey=${zanata.apikey} - +zanata.translatorkey=${zanata.translatorkey} cargo.port.offset=${cargo.port.offset} #persistence.xml diff --git a/functional-test/src/test/resources/upload-idml.idml b/functional-test/src/test/resources/upload-idml.idml new file mode 100644 index 0000000000000000000000000000000000000000..c999c12896152494b83fcfa4523648c242b267c7 GIT binary patch literal 37902 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 JZ*J0g>0dtaHva$s literal 0 HcmV?d00001 diff --git a/functional-test/src/test/resources/upload-odg.odg b/functional-test/src/test/resources/upload-odg.odg new file mode 100644 index 0000000000000000000000000000000000000000..3edf0888434e5331c27f8d319b0f3b53f28c66d8 GIT binary patch literal 9287 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

IaF5% zgC>|?Q$Cm^m!eev8S>YRH-SpJ$$YSOx-h(ui~x?Ba#$y(S4B^4aE5*+23^Q>ab*G> zaBWYH(OnPs!*=B>$9{!j6DjL=;cU@nxqj*;SmVZezDfEcOOgr=39pgaOK8Nx&6Hb4 zsJ6R|I!tv%3DXUnmAdv{Ee{2uggiw-Q4ds*9FF5NZjnHEy`Lpbj`L=$JlhCuTAT4` zv4iTMB%hC8PC1RCpn+vQ_$dL!rDeV={;zgyU^VM)S-6j`|A2;niXeKffGX=h~Kcr z2FM75AU{a;0GBNT*whUXt@4P%GfIvMqI$!NPb#lpyy>_j zzJd`!1HtL+$T70Fd7x8fnH8!~5G2A9;q~RCK1c?RX#V(i>LPbk>^)1)!yvJW9(}mC?*k%MTb?t@6<3{yeNY+_9jaoP@5mECr_*H_8f=hZsgujgd zoH(kHH1`}lhVg%Use(%#iL?e23xeIJ+A-1?UP&}|5_CsG>+XIERD2AC>~6FkfcPPL z}rCf$*23at~&Q}rg|ugQJwH85Tw5hp!lvgbZ!tQ50pc#L@?FQ9hLA3$}Hu6^Yi zDJs0dIi-fzbeLdDaERJ}20nh#@ z97n%=vU`Xg+>P|gfH1MCEEu(&C7fiZ0lRqK*yccHGrI(B;_S6DUC;aR`T`H#^Q&hc z>dq){oge5Ty;nOtko=zayYurs8wvM!{#$O7hf)sq79dM!$KUgiPTU;uyrZ)T(2?WM zDaZd-ffs(IWnt?8gqVNV`c+h$`4_f;rl#h$=5W&vjvS`Wj*kDe7e)Hrf4en#o2a~% z|Jlnx92{)_xe9QX@INZ<1OY;vo&M)~x7NTwdvn`=Xfldl*aJH{SUQ?J{eM^lJAj?R zxBc`F7O8(>5o8CnGCEt zV&6t{7oLs?3-K`C1W77G3*Iq*p?YzTSq9O+`APo_N9ZWi2n;ml*fx26gM$>j(m%C~ z!9^NP=<%7O7%b~o@O5r-%hsmB2Ww-Jdi(+bURWJ5D5T(pZtfn>`(IjQ-Hr}{WZh?Lq#24 z{JVVrca-m4`g4NeHmUSO7~tU{_(ur8rg^>Hu>;FxZxl_ry~BU`SXtJHoWvh z!m$4oZ2GI>&un$OA^Rb*_&;yYzU%!Rm;KO-g3q|WXSP3g(GRUZxb4UJ$6uiQV7fn0 zzBl%*)_1zP<+>ko{tJ}9VZMJ~L3PUitl$sc`}+#sGT#pg{sqdikUTip ZFL_l>5d}UY0RUY1j}IQRxcL1g{vR(1k^cYy literal 0 HcmV?d00001 diff --git a/functional-test/src/test/resources/upload-odp.odp b/functional-test/src/test/resources/upload-odp.odp new file mode 100644 index 0000000000000000000000000000000000000000..49ec0971c86f60a0710bc203ce8918c8ef12fdef GIT binary patch literal 10765 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 Yx~e1#1^s*&>eG+=Daiy#^}P3g0LRMSH2?qr literal 0 HcmV?d00001 diff --git a/functional-test/src/test/resources/upload-ods.ods b/functional-test/src/test/resources/upload-ods.ods new file mode 100644 index 0000000000000000000000000000000000000000..564115bfd7bdc33eb9a7c8b7ff30768d799c55f3 GIT binary patch literal 13042 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 b{)Nv9((url2>`%={;`Gf$LjXKwE+GfXkOjZ literal 0 HcmV?d00001 diff --git a/functional-test/src/test/resources/upload-odt.odt b/functional-test/src/test/resources/upload-odt.odt new file mode 100644 index 0000000000000000000000000000000000000000..ff72b0d0a72cc453b06901217b7c6e010cd5eae9 GIT binary patch literal 9034 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