Parcourir la source

Add IT tests (#200)

tags/7.5
Pascal Mugnier il y a 6 ans
Parent
révision
50627ee0c5

+ 45
- 0
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/DocumentationPage.java Voir le fichier

@@ -0,0 +1,45 @@
/*
* SonarQube
* Copyright (C) 2009-2018 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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 org.sonarqube.qa.util.pageobjects;

import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide;

public class DocumentationPage {

public DocumentationPage() {
Selenide.$(".markdown").shouldBe(Condition.visible);
}

public DocumentationPage shouldHaveLinks() {
Selenide.$(".api-documentation-results .list-group .list-group-item").exists();
return this;
}

public DocumentationPage selectLink(int index) {
Selenide.$$(".api-documentation-results .list-group .list-group-item").get(index).click();
return this;
}

public String getDocumentationContent() {
return Selenide.$(".markdown.cut-margins.boxed-group-inner").getText();
}

}

+ 5
- 1
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java Voir le fichier

@@ -86,6 +86,10 @@ public class Navigation {
return open("/", Navigation.class);
}

public DocumentationPage openDocumentation() {
return open("/documentation", DocumentationPage.class);
}

public ProjectsPage openProjects() {
return open("/projects", ProjectsPage.class);
}
@@ -232,7 +236,7 @@ public class Navigation {
}

public WebhooksPage openProjectWebhooks(String projectKey) {
return open("/project/webhooks?id="+ projectKey, WebhooksPage.class);
return open("/project/webhooks?id=" + projectKey, WebhooksPage.class);
}

public LoginPage openLogin() {

+ 1
- 0
tests/build.gradle Voir le fichier

@@ -120,6 +120,7 @@ task integrationTest(type: Test) {
includeTestsMatching 'org.sonarqube.tests.Category4Suite'
includeTestsMatching 'org.sonarqube.tests.duplication.*Suite'
includeTestsMatching 'org.sonarqube.tests.user.*Suite'
includeTestsMatching 'org.sonarqube.tests.ui.*Suite'
includeTestsMatching 'org.sonarqube.tests.webhook.*Suite'
break
case 'Category5':

+ 0
- 4
tests/src/test/java/org/sonarqube/tests/Category4Suite.java Voir le fichier

@@ -59,10 +59,6 @@ import static util.ItUtils.xooPlugin;
IssueExclusionsTest.class,
// http
HttpHeadersTest.class,
// ui
UiTest.class,
// ui extensions
UiExtensionsTest.class,
WsLocalCallTest.class,
WsTest.class,
// quality profiles

+ 60
- 0
tests/src/test/java/org/sonarqube/tests/ui/DocumentationTest.java Voir le fichier

@@ -0,0 +1,60 @@
/*
* SonarQube
* Copyright (C) 2009-2018 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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 org.sonarqube.tests.ui;

import com.sonar.orchestrator.Orchestrator;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.qa.util.Tester;
import org.sonarqube.qa.util.pageobjects.DocumentationPage;

import static com.codeborne.selenide.Condition.visible;
import static com.codeborne.selenide.Selenide.$;
import static org.assertj.core.api.Assertions.assertThat;

public class DocumentationTest {

@ClassRule
public static Orchestrator orchestrator = UiSuite.ORCHESTRATOR;

@Rule
public Tester tester = new Tester(orchestrator).disableOrganizations();

@Test
public void documentation_loads() {
tester.openBrowser().openDocumentation().shouldHaveLinks();
}

@Test
public void can_switch_between_content() {
DocumentationPage page = tester.openBrowser().openDocumentation().selectLink(0);
String content = page.getDocumentationContent();
page.selectLink(1);
assertThat(content).isNotEqualTo(page.getDocumentationContent());
}

@Test
public void display_not_found() {
tester.openBrowser().open("/documentation/foobarbaz");
$("#nonav").shouldBe(visible);
}

}

+ 1
- 1
tests/src/test/java/org/sonarqube/tests/ui/UiExtensionsTest.java Voir le fichier

@@ -40,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class UiExtensionsTest {

@ClassRule
public static Orchestrator orchestrator = Category4Suite.ORCHESTRATOR;
public static Orchestrator orchestrator = UiSuite.ORCHESTRATOR;

@Rule
public Tester tester = new Tester(orchestrator).disableOrganizations();

+ 47
- 0
tests/src/test/java/org/sonarqube/tests/ui/UiSuite.java Voir le fichier

@@ -0,0 +1,47 @@
/*
* SonarQube
* Copyright (C) 2009-2018 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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 org.sonarqube.tests.ui;

import com.sonar.orchestrator.Orchestrator;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

import static util.ItUtils.newOrchestratorBuilder;
import static util.ItUtils.pluginArtifact;
import static util.ItUtils.xooPlugin;

@RunWith(Suite.class)
@Suite.SuiteClasses({
UiTest.class,
UiExtensionsTest.class,
DocumentationTest.class
})
public class UiSuite {

@ClassRule
public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
.addPlugin(xooPlugin())

// Used in UiExtensionsTest
.addPlugin(pluginArtifact("ui-extensions-plugin"))

.build();
}

+ 1
- 2
tests/src/test/java/org/sonarqube/tests/ui/UiTest.java Voir le fichier

@@ -27,7 +27,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.qa.util.Tester;
import org.sonarqube.qa.util.pageobjects.Navigation;
import org.sonarqube.tests.Category4Suite;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.WsResponse;
import util.ItUtils;
@@ -44,7 +43,7 @@ import static util.ItUtils.projectDir;
public class UiTest {

@ClassRule
public static final Orchestrator orchestrator = Category4Suite.ORCHESTRATOR;
public static final Orchestrator orchestrator = UiSuite.ORCHESTRATOR;

@Rule
public Tester tester = new Tester(orchestrator).disableOrganizations();

Chargement…
Annuler
Enregistrer