diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesCreateResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesCreateResponse.java index f7efe3d61..e09583b1d 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesCreateResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesCreateResponse.java @@ -19,6 +19,7 @@ public class CanvasesCreateResponse implements SlackApiTextResponse { private String canvasId; + private String detail; private ResponseMetadata responseMetadata; } \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesEditResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesEditResponse.java index 21ea50a61..e8e9ec03e 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesEditResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/canvases/CanvasesEditResponse.java @@ -17,6 +17,7 @@ public class CanvasesEditResponse implements SlackApiTextResponse { private String provided; private transient Map> httpResponseHeaders; + private String detail; private ResponseMetadata responseMetadata; } \ No newline at end of file diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/canvases_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/canvases_Test.java index 5e6b28b0c..e6778b711 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/canvases_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/canvases_Test.java @@ -24,7 +24,9 @@ import java.util.Arrays; import java.util.List; +import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -160,4 +162,46 @@ public void standalone_canvases_error() throws Exception { ); assertThat(creation.getError(), is("invalid_arguments")); } + + @Test + public void error_detail() throws Exception { + MethodsClient client = slack.methods(botToken); + + ConversationsCreateResponse newChannel = client.conversationsCreate(r1 -> r1.name("test-" + System.currentTimeMillis())); + assertThat(newChannel.getError(), is(nullValue())); + String channelId = newChannel.getChannel().getId(); + + Thread.sleep(500L); // To avoid occasional 500 errors + + String invalidCanvasContent = "1. Text\n * Nested"; // mixing of ordered and unordered lists is not supported + ConversationsCanvasesCreateResponse failedCreation = client.conversationsCanvasesCreate(r -> r + .channelId(channelId) + .documentContent(CanvasDocumentContent.builder() + .markdown(invalidCanvasContent) + .build()) + ); + assertThat(failedCreation.isOk(), is(false)); + assertThat(failedCreation.getError(), is("canvas_creation_failed")); + assertThat(failedCreation.getDetail(), containsString("Unsupported list type")); + + ConversationsCanvasesCreateResponse successfulCreation = client.conversationsCanvasesCreate(r -> r + .channelId(channelId) + .documentContent(CanvasDocumentContent.builder() + .markdown("Correct MD") + .build() + ) + ); + assertThat(successfulCreation.getCanvasId(), is(notNullValue())); + + CanvasesEditResponse editFailingResponse = client.canvasesEdit(r -> r + .canvasId(successfulCreation.getCanvasId()) + .changes(Arrays.asList(CanvasDocumentChange.builder() + .operation(CanvasEditOperation.REPLACE) + .documentContent(CanvasDocumentContent.builder().markdown(invalidCanvasContent).build()) + .build())) + ); + assertThat(editFailingResponse.isOk(), is(false)); + assertThat(editFailingResponse.getError(), is("canvas_editing_failed")); + assertThat(editFailingResponse.getDetail(), containsString("Unsupported list type")); + } }