From 60bea78e853280fa5640ffd958ad9df39496ff6a Mon Sep 17 00:00:00 2001 From: Tomas Bjerre Date: Sun, 29 Mar 2015 08:49:13 +0200 Subject: [PATCH] Adding support for PULL_REQUEST_FROM/TO_HASH, filters and fixing authentication bug * Making it compatible with Stash 2.12.0 * Some more documentation * Validating regexp * Log events --- CHANGELOG.md | 9 +- README.md | 5 +- sandbox/all.png | Bin 38923 -> 105840 bytes sandbox/closer.png | Bin 22649 -> 35141 bytes .../se/bjurr/prnfs/admin/AdminFormValues.java | 2 +- .../se/bjurr/prnfs/admin/ConfigResource.java | 2 +- .../PrnfsPullRequestEventListener.java | 24 ++- .../bjurr/prnfs/listener/PrnfsRenderer.java | 68 +++--- .../prnfs/settings/PrnfsNotification.java | 35 ++- .../settings/PrnfsNotificationBuilder.java | 14 +- .../bjurr/prnfs/settings/SettingsStorage.java | 18 +- .../prnfs/settings/ValidationException.java | 1 - src/main/resources/admin.js | 6 +- src/main/resources/admin.vm | 46 ++-- .../prnfs/admin/NotificationsStorageTest.java | 125 +++++++---- .../PrnfsPullRequestEventListenerTest.java | 199 +++++++++++++++--- .../admin/utils/NotificationBuilder.java | 4 +- .../prnfs/admin/utils/PrnfsTestBuilder.java | 109 +++++----- .../admin/utils/PullRequestRefBuilder.java | 124 +++++------ 19 files changed, 548 insertions(+), 243 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 280a3f65..bdf91481 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Pull Request Notifier for Stash Changelog -Changelog of Pull Request Notifier for Stash +Changelog of Pull Request Notifier for Stash. + +## 1.1 + +* Adding support for filters +* Adding support for PULL_REQUEST_TO_HASH and PULL_REQUEST_FROM_HASH variables +* Fixing authentication bug +* Making it compatible with Stash 2.12.0 ## 1.0 diff --git a/README.md b/README.md index 0a5759c5..7e09ddfe 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,15 @@ http://server/job/theJob/buildWithParameters?token=TOKEN&PARAMETER=Value [Here](https://raw.githubusercontent.com/tomasbjerre/pull-request-notifier-for-stash/master/sandbox/all.png) is a screenshot of the admin GUI. +Available in [Atlassian Marketplace](https://marketplace.atlassian.com/plugins/se.bjurr.prnfs.pull-request-notifier-for-stash). + ## Features The Pull Request Notifier for Stash can -* Invoke any URL when a pull request event happens. +* Invoke any URL, or set of URL:s, when a pull request event happens. * With variables available to add necessary parameters. * Be configured to trigger on any pull request event. +* Be configured to only trigger only if the pull request mathches a filter. Where a filter can target (among other things) branch, project or repo. * Authenticate with HTTP BASIC authentication. ## Developer instructions diff --git a/sandbox/all.png b/sandbox/all.png index 9b4217582e77a93013e5ed9f499fc9ab69d72eee..8cedaeedfabca82fab537a800b1569d7fd5e9c27 100644 GIT binary patch literal 105840 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 diff --git a/sandbox/closer.png b/sandbox/closer.png index aa8cb62aaa8ee105822862e5b850be85fadfa7e6..747a0e7c0b86d6c00bff3c9f886900bf6d272da5 100644 GIT binary patch literal 35141 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 Jz<>{<{|5)x79jut diff --git a/src/main/java/se/bjurr/prnfs/admin/AdminFormValues.java b/src/main/java/se/bjurr/prnfs/admin/AdminFormValues.java index a76b1bf8..43f7812e 100644 --- a/src/main/java/se/bjurr/prnfs/admin/AdminFormValues.java +++ b/src/main/java/se/bjurr/prnfs/admin/AdminFormValues.java @@ -15,6 +15,6 @@ public final class AdminFormValues extends ArrayList> { public static final String VALUE = "value"; public enum FIELDS { - user, password, events, FORM_IDENTIFIER, url + user, password, events, FORM_IDENTIFIER, url, filter_string, filter_regexp } } diff --git a/src/main/java/se/bjurr/prnfs/admin/ConfigResource.java b/src/main/java/se/bjurr/prnfs/admin/ConfigResource.java index be1449fe..f9f6efbb 100644 --- a/src/main/java/se/bjurr/prnfs/admin/ConfigResource.java +++ b/src/main/java/se/bjurr/prnfs/admin/ConfigResource.java @@ -35,9 +35,9 @@ @Path("/") public class ConfigResource { + private static final Logger logger = LoggerFactory.getLogger(ConfigResource.class); private final PluginSettingsFactory pluginSettingsFactory; private final TransactionTemplate transactionTemplate; - private static final Logger logger = LoggerFactory.getLogger(ConfigResource.class); private final UserManager userManager; public ConfigResource(UserManager userManager, PluginSettingsFactory pluginSettingsFactory, diff --git a/src/main/java/se/bjurr/prnfs/listener/PrnfsPullRequestEventListener.java b/src/main/java/se/bjurr/prnfs/listener/PrnfsPullRequestEventListener.java index f893c006..ea872805 100644 --- a/src/main/java/se/bjurr/prnfs/listener/PrnfsPullRequestEventListener.java +++ b/src/main/java/se/bjurr/prnfs/listener/PrnfsPullRequestEventListener.java @@ -1,14 +1,20 @@ package se.bjurr.prnfs.listener; import static com.google.common.cache.CacheBuilder.newBuilder; +import static com.google.common.collect.Lists.newArrayList; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; +import static java.util.Collections.sort; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.regex.Pattern.compile; import static se.bjurr.prnfs.settings.SettingsStorage.getPrnfsSettings; +import java.util.ArrayList; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import se.bjurr.prnfs.listener.PrnfsRenderer.PrnfsVariable; import se.bjurr.prnfs.settings.PrnfsNotification; import se.bjurr.prnfs.settings.PrnfsSettings; import se.bjurr.prnfs.settings.ValidationException; @@ -41,11 +47,17 @@ public void anEvent(PullRequestEvent o) { if (dublicateEventBug(o)) { return; } + final PrnfsRenderer renderer = new PrnfsRenderer(o); + logEvent(renderer, o); try { final PrnfsSettings settings = getPrnfsSettings(pluginSettingsFactory.createGlobalSettings()); for (final PrnfsNotification n : settings.getNotifications()) { + if (n.getFilterRegexp().isPresent() && n.getFilterString().isPresent() + && !compile(n.getFilterRegexp().get()).matcher(renderer.render(n.getFilterString().get())).find()) { + continue; + } if (n.getTriggers().contains(o.getAction())) { - urlInvoker.ivoke(new PrnfsRenderer(o).render(n.getUrl()), n.getUser(), n.getPassword()); + urlInvoker.ivoke(renderer.render(n.getUrl()), n.getUser(), n.getPassword()); } } } catch (final ValidationException e) { @@ -53,6 +65,16 @@ public void anEvent(PullRequestEvent o) { } } + private void logEvent(PrnfsRenderer renderer, PullRequestEvent o) { + final StringBuilder renderString = new StringBuilder(); + final ArrayList variables = newArrayList(PrnfsRenderer.PrnfsVariable.values()); + sort(variables); + for (final PrnfsRenderer.PrnfsVariable variable : variables) { + renderString.append(" " + variable.name() + ": ${" + variable.name() + "}"); + } + logger.info(renderer.render(renderString.toString().trim())); + } + /** * Looks like there is a bug in Stash that causes events to be fired twice. */ diff --git a/src/main/java/se/bjurr/prnfs/listener/PrnfsRenderer.java b/src/main/java/se/bjurr/prnfs/listener/PrnfsRenderer.java index 0bbd654e..b7b14d88 100644 --- a/src/main/java/se/bjurr/prnfs/listener/PrnfsRenderer.java +++ b/src/main/java/se/bjurr/prnfs/listener/PrnfsRenderer.java @@ -4,80 +4,81 @@ public class PrnfsRenderer { - public interface Resolver { - public String resolve(PullRequestEvent pullRequestEvent); - } - public enum PrnfsVariable { - PULL_REQUEST_ID(new Resolver() { + PULL_REQUEST_FROM_HASH(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getId() + ""; + return pullRequestEvent.getPullRequest().getFromRef().getLatestChangeset(); } - }), PULL_REQUEST_FROM_HASH(new Resolver() { + }), PULL_REQUEST_FROM_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getLatestCommit(); + return pullRequestEvent.getPullRequest().getFromRef().getId(); } - }), PULL_REQUEST_FROM_ID(new Resolver() { + }), PULL_REQUEST_FROM_REPO_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getId(); + return pullRequestEvent.getPullRequest().getFromRef().getRepository().getId() + ""; + } + }), PULL_REQUEST_FROM_REPO_NAME(new Resolver() { + @Override + public String resolve(PullRequestEvent pullRequestEvent) { + return pullRequestEvent.getPullRequest().getFromRef().getRepository().getName() + ""; } }), PULL_REQUEST_FROM_REPO_PROJECT_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { return pullRequestEvent.getPullRequest().getFromRef().getRepository().getProject().getId() + ""; } - }), PULL_REQUEST_TO_REPO_PROJECT_ID(new Resolver() { + }), PULL_REQUEST_FROM_REPO_PROJECT_KEY(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getToRef().getRepository().getProject().getId() + ""; + return pullRequestEvent.getPullRequest().getFromRef().getRepository().getProject().getKey(); } - }), PULL_REQUEST_FROM_REPO_ID(new Resolver() { + }), PULL_REQUEST_FROM_REPO_SLUG(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getRepository().getId() + ""; + return pullRequestEvent.getPullRequest().getFromRef().getRepository().getSlug() + ""; } - }), PULL_REQUEST_TO_REPO_ID(new Resolver() { + }), PULL_REQUEST_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getToRef().getRepository().getId() + ""; + return pullRequestEvent.getPullRequest().getId() + ""; } - }), PULL_REQUEST_FROM_REPO_NAME(new Resolver() { + }), PULL_REQUEST_TO_HASH(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getRepository().getName() + ""; + return pullRequestEvent.getPullRequest().getToRef().getLatestChangeset(); } - }), PULL_REQUEST_TO_REPO_NAME(new Resolver() { + }), PULL_REQUEST_TO_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getToRef().getRepository().getName() + ""; + return pullRequestEvent.getPullRequest().getToRef().getId(); } - }), PULL_REQUEST_FROM_REPO_SLUG(new Resolver() { + }), PULL_REQUEST_TO_REPO_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getRepository().getSlug() + ""; + return pullRequestEvent.getPullRequest().getToRef().getRepository().getId() + ""; } - }), PULL_REQUEST_TO_REPO_SLUG(new Resolver() { + }), PULL_REQUEST_TO_REPO_NAME(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getToRef().getRepository().getSlug() + ""; + return pullRequestEvent.getPullRequest().getToRef().getRepository().getName() + ""; } - }), PULL_REQUEST_FROM_REPO_PROJECT_KEY(new Resolver() { + }), PULL_REQUEST_TO_REPO_PROJECT_ID(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getFromRef().getRepository().getProject().getKey(); + return pullRequestEvent.getPullRequest().getToRef().getRepository().getProject().getId() + ""; } }), PULL_REQUEST_TO_REPO_PROJECT_KEY(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { return pullRequestEvent.getPullRequest().getToRef().getRepository().getProject().getKey(); } - }), PULL_REQUEST_TO_ID(new Resolver() { + }), PULL_REQUEST_TO_REPO_SLUG(new Resolver() { @Override public String resolve(PullRequestEvent pullRequestEvent) { - return pullRequestEvent.getPullRequest().getToRef().getId(); + return pullRequestEvent.getPullRequest().getToRef().getRepository().getSlug() + ""; } }); @@ -92,6 +93,10 @@ public String resolve(PullRequestEvent pullRequestEvent) { } } + public interface Resolver { + public String resolve(PullRequestEvent pullRequestEvent); + } + private final PullRequestEvent pullRequestEvent; public PrnfsRenderer(PullRequestEvent pullRequestEvent) { @@ -102,7 +107,12 @@ public String render(String string) { for (final PrnfsVariable variable : PrnfsVariable.values()) { final String regExpStr = "\\$\\{" + variable.name() + "\\}"; if (string.contains(regExpStr.replaceAll("\\\\", ""))) { - string = string.replaceAll(regExpStr, variable.resolve(pullRequestEvent)); + try { + string = string.replaceAll(regExpStr, variable.resolve(pullRequestEvent)); + } catch (final NullPointerException e) { + // So that all values does not need to be set for all test cases + return string; + } } } return string; diff --git a/src/main/java/se/bjurr/prnfs/settings/PrnfsNotification.java b/src/main/java/se/bjurr/prnfs/settings/PrnfsNotification.java index a459d3a3..5d1a7b9c 100644 --- a/src/main/java/se/bjurr/prnfs/settings/PrnfsNotification.java +++ b/src/main/java/se/bjurr/prnfs/settings/PrnfsNotification.java @@ -3,33 +3,60 @@ import static com.google.common.base.Optional.fromNullable; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.nullToEmpty; +import static java.util.regex.Pattern.compile; import java.net.URL; import java.util.List; +import se.bjurr.prnfs.admin.AdminFormValues; + import com.atlassian.stash.pull.PullRequestAction; import com.google.common.base.Optional; public class PrnfsNotification { + private final String filterRegexp; + private final String filterString; private final String password; private final List triggers; private final String url; private final String user; - public PrnfsNotification(List triggers, String password, String url, String user) - throws ValidationException { + public PrnfsNotification(List triggers, String url, String user, String password, + String filterString, String filterRegexp) throws ValidationException { this.password = nullToEmpty(password).trim(); if (nullToEmpty(url).trim().isEmpty()) { - throw new ValidationException("url", "URL not set!"); + throw new ValidationException(AdminFormValues.FIELDS.url.name(), "URL not set!"); } try { new URL(url); } catch (final Exception e) { - throw new ValidationException("url", "URL not valid!"); + throw new ValidationException(AdminFormValues.FIELDS.url.name(), "URL not valid!"); + } + if (!nullToEmpty(filterRegexp).trim().isEmpty()) { + try { + compile(filterRegexp); + } catch (final Exception e) { + throw new ValidationException(AdminFormValues.FIELDS.filter_regexp.name(), "Filter regexp not valid! " + + e.getMessage().replaceAll("\n", " ")); + } + if (nullToEmpty(filterString).trim().isEmpty()) { + throw new ValidationException(AdminFormValues.FIELDS.filter_string.name(), + "Filter string not set, nothing to match regexp against!"); + } } this.url = url; this.user = nullToEmpty(user).trim(); this.triggers = checkNotNull(triggers); + this.filterString = filterString; + this.filterRegexp = filterRegexp; + } + + public Optional getFilterRegexp() { + return fromNullable(filterRegexp); + } + + public Optional getFilterString() { + return fromNullable(filterString); } public Optional getPassword() { diff --git a/src/main/java/se/bjurr/prnfs/settings/PrnfsNotificationBuilder.java b/src/main/java/se/bjurr/prnfs/settings/PrnfsNotificationBuilder.java index cf60f6b2..cfff15bd 100644 --- a/src/main/java/se/bjurr/prnfs/settings/PrnfsNotificationBuilder.java +++ b/src/main/java/se/bjurr/prnfs/settings/PrnfsNotificationBuilder.java @@ -16,12 +16,14 @@ public static PrnfsNotificationBuilder prnfsNotificationBuilder() { private final List triggers = newArrayList(); private String url; private String user; + private String filterRegexp; + private String filterString; private PrnfsNotificationBuilder() { } public PrnfsNotification build() throws ValidationException { - return new PrnfsNotification(triggers, password, url, user); + return new PrnfsNotification(triggers, url, user, password, filterString, filterRegexp); } public PrnfsNotificationBuilder withPassword(String password) { @@ -29,6 +31,16 @@ public PrnfsNotificationBuilder withPassword(String password) { return this; } + public PrnfsNotificationBuilder withFilterRegexp(String filterRegexp) { + this.filterRegexp = checkNotNull(filterRegexp); + return this; + } + + public PrnfsNotificationBuilder withFilterString(String filterString) { + this.filterString = checkNotNull(filterString); + return this; + } + public PrnfsNotificationBuilder withTrigger(PullRequestAction trigger) { this.triggers.add(checkNotNull(trigger)); return this; diff --git a/src/main/java/se/bjurr/prnfs/settings/SettingsStorage.java b/src/main/java/se/bjurr/prnfs/settings/SettingsStorage.java index 49680ca0..149d086a 100644 --- a/src/main/java/se/bjurr/prnfs/settings/SettingsStorage.java +++ b/src/main/java/se/bjurr/prnfs/settings/SettingsStorage.java @@ -40,10 +40,10 @@ public class SettingsStorage { private static final Gson gson = new Gson(); private static final Logger logger = LoggerFactory.getLogger(SettingsStorage.class); - private static final String STORAGE_KEY = AdminFormValues.class.getName() + "_2"; - private static Random random = new Random(currentTimeMillis()); + private static final String STORAGE_KEY = AdminFormValues.class.getName() + "_2"; + public static void deleteSettings(PluginSettings pluginSettings, String id) { final Map map = getNotificationsMap(pluginSettings); map.remove(id); @@ -94,6 +94,20 @@ public static PrnfsNotification getPrnfsNotification(AdminFormValues a) throws V for (final Map event : events) { prnfsNotificationBuilder.withTrigger(PullRequestAction.valueOf(event.get(VALUE))); } + if (tryFind(a, predicate(AdminFormValues.FIELDS.user.name())).isPresent()) { + prnfsNotificationBuilder.withUser(find(a, predicate(AdminFormValues.FIELDS.user.name())).get(VALUE)); + } + if (tryFind(a, predicate(AdminFormValues.FIELDS.password.name())).isPresent()) { + prnfsNotificationBuilder.withPassword(find(a, predicate(AdminFormValues.FIELDS.password.name())).get(VALUE)); + } + if (tryFind(a, predicate(AdminFormValues.FIELDS.filter_string.name())).isPresent()) { + prnfsNotificationBuilder + .withFilterString(find(a, predicate(AdminFormValues.FIELDS.filter_string.name())).get(VALUE)); + } + if (tryFind(a, predicate(AdminFormValues.FIELDS.filter_regexp.name())).isPresent()) { + prnfsNotificationBuilder + .withFilterRegexp(find(a, predicate(AdminFormValues.FIELDS.filter_regexp.name())).get(VALUE)); + } return prnfsNotificationBuilder.build(); } diff --git a/src/main/java/se/bjurr/prnfs/settings/ValidationException.java b/src/main/java/se/bjurr/prnfs/settings/ValidationException.java index 2c5f6b4c..a4ba4de7 100644 --- a/src/main/java/se/bjurr/prnfs/settings/ValidationException.java +++ b/src/main/java/se/bjurr/prnfs/settings/ValidationException.java @@ -1,6 +1,5 @@ package se.bjurr.prnfs.settings; - public class ValidationException extends Exception { private static final long serialVersionUID = 2203598567281456784L; private final String error; diff --git a/src/main/resources/admin.js b/src/main/resources/admin.js index 146ede33..a72e8c0a 100644 --- a/src/main/resources/admin.js +++ b/src/main/resources/admin.js @@ -31,10 +31,8 @@ data: JSON.stringify($form.serializeArray(), null, 2), processData: false, error: function(xhr, data, error) { - $.each(xhr.responseJSON, function(field,errorString) { - $(".error."+field,$form).html(errorString); - $(".post",$form).html("There were errors, form not saved!"); - }); + $(".error."+xhr.responseJSON.field,$form).html(xhr.responseJSON.error); + $(".post",$form).html("There were errors, form not saved!"); }, success: function(data, text, xhr) { getAll(); diff --git a/src/main/resources/admin.vm b/src/main/resources/admin.vm index ead91d51..0b241d7d 100644 --- a/src/main/resources/admin.vm +++ b/src/main/resources/admin.vm @@ -7,21 +7,23 @@

- You can use variables when invoking the URL. + You can use variables when invoking the URL or when forming the filter string.
    -
  • ${PULL_REQUEST_ID}
  • -
  • ${PULL_REQUEST_FROM_ID}
  • -
  • ${PULL_REQUEST_FROM_REPO_ID}
  • -
  • ${PULL_REQUEST_FROM_REPO_NAME}
  • -
  • ${PULL_REQUEST_FROM_REPO_SLUG}
  • -
  • ${PULL_REQUEST_FROM_REPO_PROJECT_ID}
  • -
  • ${PULL_REQUEST_FROM_REPO_PROJECT_KEY}
  • -
  • ${PULL_REQUEST_TO_ID}
  • -
  • ${PULL_REQUEST_TO_REPO_ID}
  • -
  • ${PULL_REQUEST_TO_REPO_NAME}
  • -
  • ${PULL_REQUEST_TO_REPO_SLUG}
  • -
  • ${PULL_REQUEST_TO_REPO_PROJECT_ID}
  • -
  • ${PULL_REQUEST_TO_REPO_PROJECT_KEY}
  • +
  • ${PULL_REQUEST_ID} Example: 1
  • +
  • ${PULL_REQUEST_FROM_HASH} Example: 6053a1eaa1c009dd11092d09a72f3c41af1b59ad
  • +
  • ${PULL_REQUEST_FROM_ID} Example: refs/heads/branch_mod_merge
  • +
  • ${PULL_REQUEST_FROM_REPO_ID} Example: 1
  • +
  • ${PULL_REQUEST_FROM_REPO_NAME} Example: rep_1
  • +
  • ${PULL_REQUEST_FROM_REPO_PROJECT_ID} Example: 1
  • +
  • ${PULL_REQUEST_FROM_REPO_PROJECT_KEY} Example: PROJECT_1
  • +
  • ${PULL_REQUEST_FROM_REPO_SLUG} Example: rep_1
  • +
  • ${PULL_REQUEST_TO_HASH} Example: d6edcbf924697ab811a867421dab60d954ccad99
  • +
  • ${PULL_REQUEST_TO_ID} Example: refs/heads/basic_branching
  • +
  • ${PULL_REQUEST_TO_REPO_ID} Example: 1
  • +
  • ${PULL_REQUEST_TO_REPO_NAME} Example: rep_1
  • +
  • ${PULL_REQUEST_TO_REPO_PROJECT_ID} Example: 1
  • +
  • ${PULL_REQUEST_TO_REPO_PROJECT_KEY} Example: PROJECT_1
  • +
  • ${PULL_REQUEST_TO_REPO_SLUG} Example: rep_1
@@ -32,6 +34,18 @@
+
Triggers @@ -61,7 +75,7 @@
- Basic authentication + Basic authentication (Optional)
@@ -86,4 +100,4 @@
- \ No newline at end of file + diff --git a/src/test/java/se/bjurr/prnfs/admin/NotificationsStorageTest.java b/src/test/java/se/bjurr/prnfs/admin/NotificationsStorageTest.java index 74bb515e..338ac6de 100644 --- a/src/test/java/se/bjurr/prnfs/admin/NotificationsStorageTest.java +++ b/src/test/java/se/bjurr/prnfs/admin/NotificationsStorageTest.java @@ -1,9 +1,8 @@ package se.bjurr.prnfs.admin; import static com.atlassian.stash.pull.PullRequestAction.OPENED; -import static se.bjurr.prnfs.admin.utils.PrnfsTestBuilder.prnfsTestBuilder; import static se.bjurr.prnfs.admin.utils.NotificationBuilder.notificationBuilder; -import static se.bjurr.prnfs.settings.SettingsStorage.FORM_IDENTIFIER_NAME; +import static se.bjurr.prnfs.admin.utils.PrnfsTestBuilder.prnfsTestBuilder; import org.junit.Test; @@ -13,10 +12,10 @@ public void testThatANewNotificationCanBeStored() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) - .store() // - .hasNotifications(1) // - .hasFieldValueAt("url", "http://bjurr.se/", "0").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store().hasNotifications(1) + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0"); } @Test @@ -24,10 +23,36 @@ public void testThatANewNotificationCanBeStoredWithWhiteSpaceInFormIdentifier() prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()) - .withFieldValue(FORM_IDENTIFIER_NAME, " ").build()).store() // - .hasNotifications(1) // - .hasFieldValueAt("url", "http://bjurr.se/", "0").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(AdminFormValues.FIELDS.FORM_IDENTIFIER, " ").build()).store().hasNotifications(1) + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0"); + } + + @Test + public void testThatFilterRegExpMustBeValid() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.filter_regexp, "[").build()) + .store() + .hasValidationError(AdminFormValues.FIELDS.filter_regexp, + "Filter regexp not valid! Unclosed character class near index 0 [ ^"); + } + + @Test + public void testThatFilterTextCannotBeEmptyWhenRegExpMustIsSet() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.filter_regexp, "master").build()) + .store() + .hasValidationError(AdminFormValues.FIELDS.filter_string, "Filter string not set, nothing to match regexp against!"); } @Test @@ -35,13 +60,15 @@ public void testThatTwoNewNotificationsCanBeStored() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/?2").withFieldValue("events", OPENED.name()).build()) - .store() // - .hasNotifications(2) // - .hasFieldValueAt("url", "http://bjurr.se/", "0").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0") // - .hasFieldValueAt("url", "http://bjurr.se/?2", "1").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/?2") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store().hasNotifications(2) + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1"); } @Test @@ -49,16 +76,17 @@ public void testThatTwoNewNotificationsCanBeStoredAndThenOneDeleted() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/?2").withFieldValue("events", OPENED.name()).build()) - .store() // - .hasNotifications(2) // - .hasFieldValueAt("url", "http://bjurr.se/", "0").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0") // - .hasFieldValueAt("url", "http://bjurr.se/?2", "1").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1") // - .delete("0") // - .hasNotifications(1) // - .hasFieldValueAt("url", "http://bjurr.se/?2", "1").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1") // + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/?2") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store().hasNotifications(2) + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1").delete("0").hasNotifications(1) + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1") // .delete("1") // .hasNotifications(0); } @@ -68,35 +96,39 @@ public void testThatTwoNewNotificationsCanBeStoredAndThenOneUpdated() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/?2").withFieldValue("events", OPENED.name()).build()) + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/?2") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .store() .hasNotifications(2) - .hasFieldValueAt("url", "http://bjurr.se/", "0") - .hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0") - .hasFieldValueAt("url", "http://bjurr.se/?2", "1") - .hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1") .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/?2upd").withFieldValue(FORM_IDENTIFIER_NAME, "1") - .build()) + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/?2upd") + .withFieldValue(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1").build()) .store() - .hasFieldValueAt("url", "http://bjurr.se/", "0") - .hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0") - .hasFieldValueAt("url", "http://bjurr.se/?2upd", "1") - .hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2upd", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1") .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/?upd").withFieldValue(FORM_IDENTIFIER_NAME, "0") - .build()).store() // - .hasFieldValueAt("url", "http://bjurr.se/?upd", "0").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "0") // - .hasFieldValueAt("url", "http://bjurr.se/?2upd", "1").hasNoneEmptyFieldAt(FORM_IDENTIFIER_NAME, "1"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/?upd") + .withFieldValue(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0").build()).store() + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?upd", "0") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "0") + .hasFieldValueAt(AdminFormValues.FIELDS.url, "http://bjurr.se/?2upd", "1") + .hasNoneEmptyFieldAt(AdminFormValues.FIELDS.FORM_IDENTIFIER, "1"); } @Test public void testThatUrlMustBeSet() { prnfsTestBuilder().isLoggedInAsAdmin() - .withNotification(notificationBuilder().withFieldValue("events", OPENED.name()).build()).store() - .hasValidationError("url", "URL not set"); + .withNotification(notificationBuilder().withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) + .store().hasValidationError(AdminFormValues.FIELDS.url, "URL not set"); } @Test @@ -104,13 +136,14 @@ public void testThatUrlMustBeValid() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("events", OPENED.name()).withFieldValue("url", "notcorrect").build()) - .store().hasValidationError("url", "URL not valid!"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(AdminFormValues.FIELDS.url, "notcorrect").build()).store() + .hasValidationError(AdminFormValues.FIELDS.url, "URL not valid!"); } @Test public void testThatValuesMustBeSet() { prnfsTestBuilder().isLoggedInAsAdmin().withNotification(notificationBuilder().build()).store() - .hasValidationError("url", "URL not set"); + .hasValidationError(AdminFormValues.FIELDS.url, "URL not set"); } } diff --git a/src/test/java/se/bjurr/prnfs/admin/PrnfsPullRequestEventListenerTest.java b/src/test/java/se/bjurr/prnfs/admin/PrnfsPullRequestEventListenerTest.java index 19d87725..ec254cd7 100644 --- a/src/test/java/se/bjurr/prnfs/admin/PrnfsPullRequestEventListenerTest.java +++ b/src/test/java/se/bjurr/prnfs/admin/PrnfsPullRequestEventListenerTest.java @@ -3,32 +3,59 @@ import static com.atlassian.stash.pull.PullRequestAction.APPROVED; import static com.atlassian.stash.pull.PullRequestAction.MERGED; import static com.atlassian.stash.pull.PullRequestAction.OPENED; +import static com.google.common.base.Charsets.UTF_8; +import static com.google.common.base.Joiner.on; +import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.io.Resources.getResource; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import static java.lang.Thread.sleep; +import static java.util.Collections.sort; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static se.bjurr.prnfs.admin.utils.NotificationBuilder.notificationBuilder; import static se.bjurr.prnfs.admin.utils.PrnfsTestBuilder.prnfsTestBuilder; import static se.bjurr.prnfs.admin.utils.PullRequestEventBuilder.pullRequestEventBuilder; import static se.bjurr.prnfs.admin.utils.PullRequestRefBuilder.pullRequestRefBuilder; import static se.bjurr.prnfs.listener.PrnfsPullRequestEventListener.dublicateEventBug; +import java.io.IOException; +import java.net.URL; +import java.util.List; +import java.util.regex.Pattern; + import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import se.bjurr.prnfs.admin.AdminFormValues.FIELDS; import se.bjurr.prnfs.listener.PrnfsRenderer.PrnfsVariable; +import com.google.common.io.Resources; + public class PrnfsPullRequestEventListenerTest { private static final Logger logger = LoggerFactory.getLogger(PrnfsPullRequestEventListenerTest.class); + @Test + public void testThatAUrlIsOnlyInvokedForConfiguredEvents() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store() + .trigger(pullRequestEventBuilder() // + .withToRef(pullRequestRefBuilder()) // + .withId(10L).withPullRequestAction(MERGED).build()).invokedNoUrl(); + } + @Test public void testThatAUrlWithoutVariablesCanBeInvoked() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) - .store().trigger(pullRequestEventBuilder().withPullRequestAction(OPENED).build()).invokedUrl("http://bjurr.se/"); + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store() + .trigger(pullRequestEventBuilder().withPullRequestAction(OPENED).build()).invokedUrl("http://bjurr.se/"); } @Test @@ -37,12 +64,12 @@ public void testThatAUrlWithVariablesCanBeInvokedFrom() { if (prnfsVariable.name().contains("_TO_")) { continue; } - logger.info(prnfsVariable.name()); prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/${" + prnfsVariable.name() + "}") - .withFieldValue("events", OPENED.name()).build()) + notificationBuilder() + .withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/${" + prnfsVariable.name() + "}") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .store() .trigger( pullRequestEventBuilder() // @@ -62,8 +89,9 @@ public void testThatAUrlWithVariablesCanBeInvokedTo() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/${" + prnfsVariable.name() + "}") - .withFieldValue("events", OPENED.name()).build()) + notificationBuilder() + .withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/${" + prnfsVariable.name() + "}") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) .store() .trigger( pullRequestEventBuilder() // @@ -75,27 +103,22 @@ public void testThatAUrlWithVariablesCanBeInvokedTo() { } @Test - public void testThatAUrlIsOnlyInvokedForConfiguredEvents() { + public void testThatAUrlCanHaveSeveralVariables() { prnfsTestBuilder() .isLoggedInAsAdmin() .withNotification( - notificationBuilder().withFieldValue("url", "http://bjurr.se/").withFieldValue("events", OPENED.name()).build()) - .store().trigger(pullRequestEventBuilder() // - .withToRef(pullRequestRefBuilder()) // - .withId(10L).withPullRequestAction(MERGED).build()).invokedNoUrl(); - } - - @Test - public void testThatMultipleUrlsCanBeInvoked() { - prnfsTestBuilder() - .isLoggedInAsAdmin() - .withNotification( - notificationBuilder().withFieldValue("url", "http://merged.se/").withFieldValue("events", MERGED.name()).build()) - .withNotification( - notificationBuilder().withFieldValue("url", "http://opened.se/").withFieldValue("events", OPENED.name()).build()) - .store().trigger(pullRequestEventBuilder() // - .withToRef(pullRequestRefBuilder()) // - .withId(10L).withPullRequestAction(MERGED).build()).invokedOnlyUrl("http://merged.se/"); + notificationBuilder() + .withFieldValue( + AdminFormValues.FIELDS.url, + "http://bjurr.se/?PULL_REQUEST_FROM_HASH=${PULL_REQUEST_FROM_HASH}&PULL_REQUEST_TO_HASH=${PULL_REQUEST_TO_HASH}&PULL_REQUEST_FROM_REPO_SLUG=${PULL_REQUEST_FROM_REPO_SLUG}&PULL_REQUEST_TO_REPO_SLUG=${PULL_REQUEST_TO_REPO_SLUG}") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()) + .store() + .trigger(pullRequestEventBuilder() // + .withFromRef(pullRequestRefBuilder().withHash("cde456").withRepositorySlug("fromslug")) // + .withToRef(pullRequestRefBuilder().withHash("asd123").withRepositorySlug("toslug")) // + .withId(10L).withPullRequestAction(OPENED).build()) + .invokedUrl( + "http://bjurr.se/?PULL_REQUEST_FROM_HASH=cde456&PULL_REQUEST_TO_HASH=asd123&PULL_REQUEST_FROM_REPO_SLUG=fromslug&PULL_REQUEST_TO_REPO_SLUG=toslug"); } @Test @@ -106,9 +129,133 @@ public void testThatDuplicateEventsFiredInStashAreIgnored() throws InterruptedEx assertEquals(FALSE, dublicateEventBug(pullRequestEventBuilder().withId(101L).withPullRequestAction(APPROVED).build())); assertEquals(TRUE, dublicateEventBug(pullRequestEventBuilder().withId(100L).withPullRequestAction(OPENED).build())); assertEquals(TRUE, dublicateEventBug(pullRequestEventBuilder().withId(101L).withPullRequestAction(APPROVED).build())); - sleep(20); + sleep(5); assertEquals(TRUE, dublicateEventBug(pullRequestEventBuilder().withId(100L).withPullRequestAction(APPROVED).build())); sleep(100); assertEquals(FALSE, dublicateEventBug(pullRequestEventBuilder().withId(100L).withPullRequestAction(APPROVED).build())); } + + @Test + public void testThatMultipleUrlsCanBeInvoked() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://merged.se/") + .withFieldValue(AdminFormValues.FIELDS.events, MERGED.name()).build()) + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://opened.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()).build()).store() + .trigger(pullRequestEventBuilder() // + .withToRef(pullRequestRefBuilder()) // + .withId(10L).withPullRequestAction(MERGED).build()).invokedOnlyUrl("http://merged.se/").didNotUseBasicAuth(); + } + + @Test + public void testThatBasicAuthenticationHeaderIsSentIfThereIsAUser() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(AdminFormValues.FIELDS.user, "theuser") + .withFieldValue(AdminFormValues.FIELDS.password, "thepassword").build()).store() + .trigger(pullRequestEventBuilder().withPullRequestAction(OPENED).build()).invokedUrl("http://bjurr.se/") + .invokedUser("theuser").invokedPassword("thepassword"); + } + + @Test + public void testThatFilterCanBeUsedToIgnoreEventsThatAreOnAnotherProject() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(FIELDS.filter_string, "${PULL_REQUEST_FROM_REPO_PROJECT_KEY}") + .withFieldValue(FIELDS.filter_regexp, "EXP").build()).store().trigger(pullRequestEventBuilder() // + .withFromRef(pullRequestRefBuilder().withProjectKey("ABC")) // + .withId(10L).withPullRequestAction(OPENED).build()).invokedNoUrl(); + } + + @Test + public void testThatFilterCanBeUsedToIgnoreEventsThatAreOnAnotherProjectAnBranch() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(FIELDS.filter_string, "${PULL_REQUEST_FROM_REPO_PROJECT_KEY} ${PULL_REQUEST_FROM_ID}") + .withFieldValue(FIELDS.filter_regexp, "EXP my_branch").build()).store().trigger(pullRequestEventBuilder() // + .withFromRef(pullRequestRefBuilder().withProjectKey("ABC").withId("my_therbranch")) // + .withId(10L).withPullRequestAction(OPENED).build()).invokedNoUrl(); + } + + @Test + public void testThatFilterCanBeUsedToTriggerOnEventsThatAreOnAnotherProjectAnBranch() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(FIELDS.filter_string, "${PULL_REQUEST_FROM_REPO_PROJECT_KEY} ${PULL_REQUEST_FROM_ID}") + .withFieldValue(FIELDS.filter_regexp, "EXP my_branch").build()).store().trigger(pullRequestEventBuilder() // + .withFromRef(pullRequestRefBuilder().withProjectKey("EXP").withId("my_branch")) // + .withId(10L).withPullRequestAction(OPENED).build()).invokedUrl("http://bjurr.se/"); + } + + @Test + public void testThatFilterCanBeUsedToTriggerEventsThatAreOnAnotherProject() { + prnfsTestBuilder() + .isLoggedInAsAdmin() + .withNotification( + notificationBuilder().withFieldValue(AdminFormValues.FIELDS.url, "http://bjurr.se/") + .withFieldValue(AdminFormValues.FIELDS.events, OPENED.name()) + .withFieldValue(FIELDS.filter_string, "${PULL_REQUEST_FROM_REPO_PROJECT_KEY}") + .withFieldValue(FIELDS.filter_regexp, "EXP").build()).store().trigger(pullRequestEventBuilder() // + .withFromRef(pullRequestRefBuilder().withProjectKey("EXP")) // + .withId(10L).withPullRequestAction(OPENED).build()).invokedUrl("http://bjurr.se/"); + } + + @Test + public void testThatVariablesAreImplementedForBothFromAndTo() { + final List from = newArrayList(); + final List to = newArrayList(); + for (final PrnfsVariable prnfsVariable : PrnfsVariable.values()) { + if (prnfsVariable.name().contains("_FROM_")) { + from.add(prnfsVariable.name()); + } else if (prnfsVariable.name().contains("_TO_")) { + to.add(prnfsVariable.name()); + } + } + sort(from); + sort(to); + assertEquals(on(" ").join(from) + " != " + on(" ").join(to), from.size(), to.size()); + } + + @Test + public void testThatVariablesAreMentionedInAdminGUI() throws IOException { + final URL resource = getResource("admin.vm"); + final String adminVmContent = Resources.toString(resource, UTF_8); + for (final PrnfsVariable prnfsVariable : PrnfsVariable.values()) { + assertTrue(prnfsVariable.name() + " in " + resource.toString(), adminVmContent.contains(prnfsVariable.name())); + } + } + + @Test + public void testThatAdminFormFieldsAreUsedInAdminGUI() throws IOException { + final URL resource = getResource("admin.vm"); + final String adminVmContent = Resources.toString(resource, UTF_8); + for (final AdminFormValues.FIELDS field : AdminFormValues.FIELDS.values()) { + assertTrue(field.name() + " in " + resource.toString(), adminVmContent.contains("name=\"" + field.name() + "\"")); + } + } + + @Test + public void testThatFieldsUsedInAdminGUIArePresentInAdminFormFields() throws IOException { + final URL resource = getResource("admin.vm"); + final String adminVmContent = Resources.toString(resource, UTF_8); + final java.util.regex.Matcher m = Pattern.compile("().put(NAME, field).put(VALUE, value).build()); + public NotificationBuilder withFieldValue(AdminFormValues.FIELDS field, String value) { + adminFormValues.add(new ImmutableMap.Builder().put(NAME, field.name()).put(VALUE, value).build()); return this; } } diff --git a/src/test/java/se/bjurr/prnfs/admin/utils/PrnfsTestBuilder.java b/src/test/java/se/bjurr/prnfs/admin/utils/PrnfsTestBuilder.java index 94e486b5..12c04fa1 100644 --- a/src/test/java/se/bjurr/prnfs/admin/utils/PrnfsTestBuilder.java +++ b/src/test/java/se/bjurr/prnfs/admin/utils/PrnfsTestBuilder.java @@ -1,5 +1,6 @@ package se.bjurr.prnfs.admin.utils; +import static com.google.common.base.Joiner.on; import static com.google.common.base.Optional.fromNullable; import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.tryFind; @@ -60,6 +61,8 @@ public long nextLong() { private static Long fakeRandomCounter = null; + private static Gson gson = new GsonBuilder().setPrettyPrinting().create(); + private static final Logger logger = LoggerFactory.getLogger(PrnfsTestBuilder.class); public static PrnfsTestBuilder prnfsTestBuilder() { @@ -67,28 +70,33 @@ public static PrnfsTestBuilder prnfsTestBuilder() { } private final Map adminFormValuesMap = newTreeMap(); + private long adminFormValuesMapCounter = 0; private final ConfigResource configResource; - private final PluginSettings pluginSettings; + private final List invokedUrl = newArrayList(); + private PrnfsPullRequestEventListener listener; + + private final PluginSettings pluginSettings; private final PluginSettingsFactory pluginSettingsFactory; private List postResponses; - private HttpServletRequest request; + private TransactionTemplate transactionTemplate; + private final List usedPassword = newArrayList(); + + private final List usedUser = newArrayList(); + private final UserKey userKey; + private final UserManager userManager; private final UserProfile userProfile; - private PrnfsPullRequestEventListener listener; - - private static Gson gson = new GsonBuilder().setPrettyPrinting().create(); - private PrnfsTestBuilder() { fakeRandomCounter = 0L; fakeRandom(new FakeRandom()); @@ -113,6 +121,13 @@ public PrnfsTestBuilder delete(String id) { return this; } + public void didNotUseBasicAuth() { + for (int i = 0; i < usedUser.size(); i++) { + assertTrue("user" + i, usedUser.get(i).isEmpty()); + assertTrue("password" + i, usedPassword.get(i).isEmpty()); + } + } + @SuppressWarnings("unchecked") private Map getAdminFormFields() { return uniqueIndex((List) configResource.get(request).getEntity(), @@ -124,9 +139,9 @@ public String apply(AdminFormValues input) { }); } - public PrnfsTestBuilder hasFieldValueAt(String field, String value, String id) { + public PrnfsTestBuilder hasFieldValueAt(AdminFormValues.FIELDS field, String value, String id) { for (final Map fieldValue : getAdminFormFields().get(id)) { - if (fieldValue.get(NAME).equals(field) && fieldValue.get(VALUE).equals(value)) { + if (fieldValue.get(NAME).equals(field.name()) && fieldValue.get(VALUE).equals(value)) { return this; } } @@ -134,9 +149,9 @@ public PrnfsTestBuilder hasFieldValueAt(String field, String value, String id) { return this; } - public PrnfsTestBuilder hasNoneEmptyFieldAt(String field, String id) { + public PrnfsTestBuilder hasNoneEmptyFieldAt(AdminFormValues.FIELDS field, String id) { for (final Map fieldValue : getAdminFormFields().get(id)) { - if (fieldValue.get(NAME).equals(field)) { + if (fieldValue.get(NAME).equals(field.name())) { if (fieldValue.get(VALUE).trim().isEmpty()) { fail(field + " was empty"); } else { @@ -153,10 +168,11 @@ public PrnfsTestBuilder hasNotifications(int num) { return this; } - public void hasValidationError(String field, String value) { + public void hasValidationError(AdminFormValues.FIELDS field, String value) { logger.info("Looking for " + field + "=" + value); for (final AdminFormError e : postResponses) { - if (e.getField().equals(field) && e.getValue().equals(value)) { + if (e.getField().equals(field.name())) { + assertEquals(value, e.getValue()); return; } logger.info(e.getField() + " " + e.getValue()); @@ -164,6 +180,32 @@ public void hasValidationError(String field, String value) { fail(field + " " + value + " not found"); } + public PrnfsTestBuilder invokedNoUrl() { + assertEquals(0, invokedUrl.size()); + return this; + } + + public PrnfsTestBuilder invokedOnlyUrl(String url) { + assertEquals(1, invokedUrl.size()); + assertTrue(invokedUrl.get(0).equals(url)); + return this; + } + + public PrnfsTestBuilder invokedPassword(String password) { + assertTrue(on(" ").join(usedPassword), this.usedPassword.contains(password)); + return this; + } + + public PrnfsTestBuilder invokedUrl(String url) { + assertTrue(gson.toJson(pluginSettings), invokedUrl.contains(url)); + return this; + } + + public PrnfsTestBuilder invokedUser(String user) { + assertTrue(on(" ").join(usedUser), this.usedUser.contains(user)); + return this; + } + public PrnfsTestBuilder isLoggedInAsAdmin() { when(userProfile.getUserKey()).thenReturn(userKey); when(userManager.isSystemAdmin(Matchers.any(UserKey.class))).thenReturn(TRUE); @@ -187,35 +229,6 @@ public PrnfsTestBuilder store() { return this; } - public PrnfsTestBuilder withNotification(AdminFormValues adminFormValues) { - final Optional> existing = tryFind(adminFormValues, predicate(FORM_IDENTIFIER_NAME)); - if (existing.isPresent()) { - this.adminFormValuesMap.put(existing.get().get(VALUE), adminFormValues); - } else { - this.adminFormValuesMap.put((adminFormValuesMapCounter++) + "", adminFormValues); - } - return this; - } - - public PrnfsTestBuilder invokedUrl(String url) { - assertTrue(gson.toJson(pluginSettings), invokedUrl.contains(url)); - return this; - } - - public PrnfsTestBuilder invokedUser(String user) { - assertTrue(this.usedUser.contains(user)); - return this; - } - - public PrnfsTestBuilder invokedPassword(String password) { - assertTrue(this.usedPassword.contains(password)); - return this; - } - - private final List invokedUrl = newArrayList(); - private final List usedUser = newArrayList(); - private final List usedPassword = newArrayList(); - public PrnfsTestBuilder trigger(PullRequestEvent event) { listener.setUrlInvoker(new UrlInvoker() { @Override @@ -229,13 +242,13 @@ public void ivoke(String url, Optional userParam, Optional passw return this; } - public PrnfsTestBuilder invokedNoUrl() { - assertEquals(0, invokedUrl.size()); + public PrnfsTestBuilder withNotification(AdminFormValues adminFormValues) { + final Optional> existing = tryFind(adminFormValues, predicate(FORM_IDENTIFIER_NAME)); + if (existing.isPresent()) { + this.adminFormValuesMap.put(existing.get().get(VALUE), adminFormValues); + } else { + this.adminFormValuesMap.put((adminFormValuesMapCounter++) + "", adminFormValues); + } return this; } - - public void invokedOnlyUrl(String url) { - assertEquals(1, invokedUrl.size()); - assertTrue(invokedUrl.get(0).equals(url)); - } } diff --git a/src/test/java/se/bjurr/prnfs/admin/utils/PullRequestRefBuilder.java b/src/test/java/se/bjurr/prnfs/admin/utils/PullRequestRefBuilder.java index eb457578..b3460f0d 100644 --- a/src/test/java/se/bjurr/prnfs/admin/utils/PullRequestRefBuilder.java +++ b/src/test/java/se/bjurr/prnfs/admin/utils/PullRequestRefBuilder.java @@ -7,49 +7,30 @@ import com.atlassian.stash.repository.Repository; public class PullRequestRefBuilder implements PullRequestRef { - private String projectKey; - private Integer projectId; - private Integer repositoryId; - private String repositoryName; - private String hash; - private String slug; - private String id; - - private PullRequestRefBuilder() { - } - public static PullRequestRefBuilder pullRequestRefBuilder() { return new PullRequestRefBuilder(); } - public PullRequestRefBuilder withProjectId(Integer projectId) { - this.projectId = projectId; - return this; - } - - public PullRequestRefBuilder withProjectKey(String projectKey) { - this.projectKey = projectKey; - return this; - } + private String hash; + private String id; + private Integer projectId; + private String projectKey; + private Integer repositoryId; + private String repositoryName; - public PullRequestRefBuilder withHash(String pullRequestHash) { - this.hash = pullRequestHash; - return this; - } + private String slug; - public PullRequestRefBuilder withRepositoryId(Integer repositoryId) { - this.repositoryId = repositoryId; - return this; + private PullRequestRefBuilder() { } - public PullRequestRefBuilder withRepositoryName(String repositoryName) { - this.repositoryName = repositoryName; - return this; + @Override + public String getDisplayId() { + return null; } - public PullRequestRefBuilder withRepositorySlug(String repositorySlug) { - this.slug = repositorySlug; - return this; + @Override + public String getId() { + return id; } @Override @@ -57,26 +38,11 @@ public String getLatestChangeset() { return hash; } - @Override public String getLatestCommit() { + // Only in 3.7.0 return hash; } - @Override - public String getDisplayId() { - return null; - } - - public PullRequestRefBuilder withId(String id) { - this.id = id; - return this; - } - - @Override - public String getId() { - return id; - } - @Override public Repository getRepository() { return new Repository() { @@ -106,18 +72,23 @@ public Project getProject() { return new Project() { @Override - public boolean isPublic() { - return false; + public T accept(ProjectVisitor arg0) { + return null; } @Override - public ProjectType getType() { + public String getDescription() { return null; } @Override - public String getName() { - return null; + public Integer getId() { + return projectId; + } + + public boolean getIsPersonal() { + // In 2.12.0 + return false; } @Override @@ -126,18 +97,18 @@ public String getKey() { } @Override - public Integer getId() { - return projectId; + public String getName() { + return null; } @Override - public String getDescription() { + public ProjectType getType() { return null; } @Override - public T accept(ProjectVisitor arg0) { - return null; + public boolean isPublic() { + return false; } }; } @@ -178,4 +149,39 @@ public boolean isPublic() { } }; } + + public PullRequestRefBuilder withHash(String pullRequestHash) { + this.hash = pullRequestHash; + return this; + } + + public PullRequestRefBuilder withId(String id) { + this.id = id; + return this; + } + + public PullRequestRefBuilder withProjectId(Integer projectId) { + this.projectId = projectId; + return this; + } + + public PullRequestRefBuilder withProjectKey(String projectKey) { + this.projectKey = projectKey; + return this; + } + + public PullRequestRefBuilder withRepositoryId(Integer repositoryId) { + this.repositoryId = repositoryId; + return this; + } + + public PullRequestRefBuilder withRepositoryName(String repositoryName) { + this.repositoryName = repositoryName; + return this; + } + + public PullRequestRefBuilder withRepositorySlug(String repositorySlug) { + this.slug = repositorySlug; + return this; + } } \ No newline at end of file