Browse Source

SONAR-10347 Add IT's for webhook deliveries

tags/7.5
Grégoire Aubert 6 years ago
parent
commit
bfb8b46ce0

+ 1
- 0
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/Tester.java View File

@@ -114,6 +114,7 @@ public class Tester extends ExternalResource implements TesterSession {
projects().deleteAll();
settings().deleteAll();
qGates().deleteAll();
webhooks().deleteAllGlobal();
}

public TesterSession asAnonymous() {

+ 53
- 0
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/WebhooksPage.java View File

@@ -21,6 +21,7 @@ package org.sonarqube.qa.util.pageobjects;

import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import java.util.Arrays;

import static com.codeborne.selenide.Condition.cssClass;
import static com.codeborne.selenide.Condition.enabled;
@@ -46,6 +47,16 @@ public class WebhooksPage {
return this;
}

public WebhooksPage hasLatestDelivery(String webhookName) {
getWebhook(webhookName).shouldNotHave(text("Never"));
return this;
}

public WebhooksPage hasNoLatestDelivery(String webhookName) {
getWebhook(webhookName).shouldHave(text("Never"));
return this;
}

public WebhooksPage countWebhooks(Integer number) {
getWebhooks().shouldHaveSize(number);
return this;
@@ -77,6 +88,48 @@ public class WebhooksPage {
return this;
}

public DeliveriesForm showDeliveries(String webhookName) {
SelenideElement webhook = getWebhook(webhookName);
webhook.$(".dropdown-toggle").shouldBe(visible).click();
webhook.$(".js-webhook-deliveries").shouldBe(visible).click();
modalShouldBeOpen("Recent deliveries for " + webhookName);
return new DeliveriesForm($(".modal-body"));
}

public static class DeliveriesForm {
private final SelenideElement elt;

public DeliveriesForm(SelenideElement elt) {
this.elt = elt;
}

public DeliveriesForm countDeliveries(Integer number) {
this.getDeliveries().shouldHaveSize(number);
return this;
}

public DeliveriesForm isSuccessFull(Integer deliveryIndex) {
this.getDeliveries().get(deliveryIndex).$(".js-success").should(exist);
return this;
}

public DeliveriesForm payloadContains(Integer deliveryIndex, String... payload) {
SelenideElement delivery = this.getDeliveries().get(deliveryIndex);
SelenideElement header = delivery.$(".boxed-group-header").should(exist);
if (!delivery.$(".boxed-group-inner").exists()) {
header.click();
}
SelenideElement inner = delivery.$(".boxed-group-inner").shouldBe(visible);
Arrays.stream(payload).forEach(p -> inner.shouldHave(text(p)));
header.click();
return this;
}

private ElementsCollection getDeliveries() {
return this.elt.$$(".boxed-group-accordion");
}
}

private static SelenideElement getWebhook(String webhookName) {
return getWebhooks().find(text(webhookName)).should(exist);
}

+ 33
- 4
tests/src/test/java/org/sonarqube/tests/webhook/WebhooksPageTest.java View File

@@ -38,13 +38,15 @@ public class WebhooksPageTest
@ClassRule
public static Orchestrator orchestrator = WebhooksSuite.ORCHESTRATOR;

@ClassRule
public static ExternalServer externalServer = new ExternalServer();

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

@Before
@After
public void reset() {
tester.webhooks().deleteAllGlobal();
public void setUp() {
externalServer.clear();
}

@Test
@@ -91,7 +93,8 @@ public class WebhooksPageTest
.createWebhook("my-webhook", "http://greg:pass@test.com")
.countWebhooks(1)
.hasWebhook("my-webhook")
.hasWebhook("http://greg:pass@test.com");
.hasWebhook("http://greg:pass@test.com")
.hasNoLatestDelivery("my-webhook");
}

@Test
@@ -131,6 +134,32 @@ public class WebhooksPageTest
.countWebhooks(2);
}

@Test
public void display_deliveries_payloads() throws InterruptedException {
User user = tester.users().generateAdministratorOnDefaultOrganization();
tester.wsClient().users().skipOnboardingTutorial();

Project project = tester.projects().provision();
Webhook webhook = tester.webhooks().generate(project, p -> p.setUrl(externalServer.urlFor("/test_deliveries")));

analyseProject(project);
analyseProject(project);

externalServer.waitUntilAllWebHooksCalled(1);

WebhooksPage webhooksPage = tester.openBrowser().logIn().submitCredentials(user.getLogin()).openProjectWebhooks(project.getKey());
webhooksPage
.countWebhooks(1)
.hasWebhook(webhook.getUrl())
.hasLatestDelivery(webhook.getName());

WebhooksPage.DeliveriesForm deliveriesForm = webhooksPage.showDeliveries(webhook.getName());
deliveriesForm
.countDeliveries(2)
.isSuccessFull(0)
.payloadContains(0, "Response: 200", "\"status\": \"SUCCESS\"");
}

private void analyseProject(Project project) {
runProjectAnalysis(orchestrator, "shared/xoo-sample",
"sonar.projectKey", project.getKey(),

+ 0
- 6
tests/src/test/java/org/sonarqube/tests/webhook/WebhooksTest.java View File

@@ -60,12 +60,6 @@ public class WebhooksTest {
externalServer.clear();
}

@Before
@After
public void reset() {
tester.webhooks().deleteAllGlobal();
}

@Test
public void call_multiple_global_and_project_webhooks_when_analysis_is_done() throws InterruptedException {
Project project = tester.projects().provision();

Loading…
Cancel
Save