@Override public void sendProjectAnalysisUpdate(Analysis analysis, Supplier<WebhookPayload> payloadSupplier) { List<Webhook> webhooks = readWebHooksFrom(analysis.getProjectUuid()) .map(dto -> new Webhook(dto.getUuid(), analysis.getProjectUuid(), analysis.getCeTaskUuid(), analysis.getAnalysisUuid(), dto.getName(), dto.getUrl())) .collect(MoreCollectors.toList()); if (webhooks.isEmpty()) { return; } WebhookPayload payload = payloadSupplier.get(); webhooks.forEach(webhook -> asyncExecution.addToQueue(() -> { WebhookDelivery delivery = caller.call(webhook, payload); log(delivery); deliveryStorage.persist(delivery); })); asyncExecution.addToQueue(() -> deliveryStorage.purge(analysis.getProjectUuid())); }
private Stream<WebhookDto> readWebHooksFrom(String projectUuid) { try (DbSession dbSession = dbClient.openSession(false)) { Optional<ComponentDto> optionalComponentDto = ofNullable(dbClient.componentDao().selectByUuid(dbSession, projectUuid).orElse(null)); ComponentDto componentDto = checkStateWithOptional(optionalComponentDto, "the requested project '%s' was not found", projectUuid); if (componentDto.getMainBranchProjectUuid() != null && !componentDto.uuid().equals(componentDto.getMainBranchProjectUuid())) { Optional<ComponentDto> mainBranchComponentDto = ofNullable(dbClient.componentDao().selectByUuid(dbSession, componentDto.getMainBranchProjectUuid()).orElse(null)); componentDto = checkStateWithOptional(mainBranchComponentDto, "the requested project '%s' was not found", projectUuid); } WebhookDao dao = dbClient.webhookDao(); return Stream.concat( dao.selectByProject(dbSession, componentDto).stream(), dao.selectByOrganizationUuid(dbSession, componentDto.getOrganizationUuid()).stream()); } }
@Test public void isEnabled_returns_false_if_no_webhooks() { ComponentDto componentDto = componentDbTester.insertPrivateProject(); assertThat(underTest.isEnabled(componentDto)).isFalse(); }
@Override public boolean isEnabled(ComponentDto projectDto) { return readWebHooksFrom(projectDto.uuid()) .findAny() .isPresent(); }
@Test public void do_nothing_if_no_webhooks() { ComponentDto componentDto = componentDbTester.insertPrivateProject().setOrganizationUuid(defaultOrganizationProvider.get().getUuid()); underTest.sendProjectAnalysisUpdate(new WebHooks.Analysis(componentDto.uuid(), "1", "#1"), () -> mock); assertThat(caller.countSent()).isEqualTo(0); assertThat(logTester.logs(DEBUG)).isEmpty(); verifyZeroInteractions(deliveryStorage); }
@Override public boolean isEnabled(ComponentDto projectDto) { return readWebHooksFrom(projectDto.uuid()) .findAny() .isPresent(); }
@Override public void sendProjectAnalysisUpdate(Analysis analysis, Supplier<WebhookPayload> payloadSupplier) { List<Webhook> webhooks = readWebHooksFrom(analysis.getProjectUuid()) .map(dto -> new Webhook(dto.getUuid(), analysis.getProjectUuid(), analysis.getCeTaskUuid(), analysis.getAnalysisUuid(), dto.getName(), dto.getUrl())) .collect(MoreCollectors.toList()); if (webhooks.isEmpty()) { return; } WebhookPayload payload = payloadSupplier.get(); webhooks.forEach(webhook -> asyncExecution.addToQueue(() -> { WebhookDelivery delivery = caller.call(webhook, payload); log(delivery); deliveryStorage.persist(delivery); })); asyncExecution.addToQueue(() -> deliveryStorage.purge(analysis.getProjectUuid())); }
@Test public void isEnabled_returns_true_if_one_valid_global_webhook() { ComponentDto componentDto = componentDbTester.insertPrivateProject(); webhookDbTester.insert(newWebhook(componentDto).setName("First").setUrl("http://url1")); assertThat(underTest.isEnabled(componentDto)).isTrue(); }
@Test public void isEnabled_returns_true_if_one_valid_project_webhook() { String organizationUuid = defaultOrganizationProvider.get().getUuid(); ComponentDto componentDto = componentDbTester.insertPrivateProject().setOrganizationUuid(organizationUuid); webhookDbTester.insert(newWebhook(componentDto).setName("First").setUrl("http://url1")); assertThat(underTest.isEnabled(componentDto)).isTrue(); }