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;
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;
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);
}
@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
.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
.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(),