@@ -114,6 +114,7 @@ public class Tester extends ExternalResource implements TesterSession { | |||
projects().deleteAll(); | |||
settings().deleteAll(); | |||
qGates().deleteAll(); | |||
webhooks().deleteAllGlobal(); | |||
} | |||
public TesterSession asAnonymous() { |
@@ -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); | |||
} |
@@ -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(), |
@@ -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(); |