diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index 9ec95a5dcc..fce7d5dfae 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -115,10 +115,10 @@ class DefaultHookHandler implements HookHandler { return error("repository not found"); } catch (ExceptionWithContext ex) { LOG.debug("scm exception on hook occurred", ex); - return error(context, ex); + return error(context, ex.getMessage()); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); - return error(context, ex); + return error(context, "unknown error"); } finally { environment.clearPendingState(); TransactionId.clear(); @@ -133,9 +133,9 @@ class DefaultHookHandler implements HookHandler { subject.login(bearer); } - private Response error(HgHookContextProvider context, Exception ex) { + private Response error(HgHookContextProvider context, String message) { List messages = new ArrayList<>(context.getHgMessageProvider().getMessages()); - messages.add(createErrorMessage(ex.getMessage())); + messages.add(createErrorMessage(message)); return new Response(messages, true); } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 541e0620ef..1be67c4c44 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -150,7 +150,7 @@ class DefaultHookHandlerTest { DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); DefaultHookHandler.Response response = send(request); - assertError(response, "Something went wrong"); + assertError(response, "unknown error"); } @Test @@ -168,11 +168,8 @@ class DefaultHookHandlerTest { } @Test - void shouldSendMessagesOnException() throws IOException { - HgHookMessageProvider messageProvider = new HgHookMessageProvider(); - messageProvider.sendMessage("Some note"); - messageProvider.sendMessage("Some error"); - mockMessageProvider(messageProvider); + void shouldSendMessagesOnUnknownException() throws IOException { + mockMessageProviderWithMessages(); doThrow(new IllegalStateException("Abort it")) .when(hookEventFacade) @@ -181,12 +178,37 @@ class DefaultHookHandlerTest { DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); DefaultHookHandler.Response response = send(request); + assertMessages(response, "unknown error"); + } + + @Test + void shouldSendMessagesOnExceptionWithContext() throws IOException { + mockMessageProviderWithMessages(); + + doThrow(new TestingException("Exception with Context")) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + assertMessages(response, "Exception with Context"); + } + + private void assertMessages(DefaultHookHandler.Response response, String errorMessage) { List received = response.getMessages() .stream() .map(HgHookMessage::getMessage) .collect(Collectors.toList()); - assertThat(received).containsExactly("Some note", "Some error", "Abort it"); + assertThat(received).containsExactly("Some note", "Some error", errorMessage); + } + + private void mockMessageProviderWithMessages() { + HgHookMessageProvider messageProvider = new HgHookMessageProvider(); + messageProvider.sendMessage("Some note"); + messageProvider.sendMessage("Some error"); + mockMessageProvider(messageProvider); } @Test