@Test(dataProvider = "annotatedRequestHandlerData") public void testActionCollectionItemAnnotatedRequestHandler( Class<?> requestHandler, boolean collection, boolean create, boolean read, boolean update, boolean delete, boolean patch, boolean resourceAction, boolean collectionAction, boolean query) throws Exception { // Given Object provider = requestHandler.newInstance(); Connection connection = Resources.newInternalConnection(createHandler(collection, provider)); ActionRequest req1 = Requests.newActionRequest("/test/fred", "instanceAction1"); ActionRequest req2 = Requests.newActionRequest("/test/fred", "instanceAction2"); // When Promise<JsonValue, ResourceException> promise1 = connection.actionAsync(new RootContext(), req1); Promise<JsonValue, ResourceException> promise2 = connection.actionAsync(new RootContext(), req2); // Then if (collectionAction && collection) { AssertJJsonValueAssert.assertThat(promise1) .succeeded() .stringAt("result") .isEqualTo("instanceAction1-fred"); AssertJJsonValueAssert.assertThat(promise2) .succeeded() .stringAt("result") .isEqualTo("instanceAction2-fred"); } else if (collection) { AssertJJsonValueAssert.assertThat(promise1) .failedWithException() .isInstanceOf(NotSupportedException.class); AssertJJsonValueAssert.assertThat(promise2) .failedWithException() .isInstanceOf(NotSupportedException.class); } else { AssertJJsonValueAssert.assertThat(promise1) .failedWithException() .isInstanceOf(NotFoundException.class); AssertJJsonValueAssert.assertThat(promise2) .failedWithException() .isInstanceOf(NotFoundException.class); } }
@Test(dataProvider = "annotatedRequestHandlerData") public void testActionAnnotatedRequestHandler( Class<?> requestHandler, boolean collection, boolean create, boolean read, boolean update, boolean delete, boolean patch, boolean resourceAction, boolean collectionAction, boolean query) throws Exception { // Given Object provider = requestHandler.newInstance(); Connection connection = Resources.newInternalConnection(createHandler(collection, provider)); String actionId1 = collection ? "collectionAction1" : "instanceAction1"; ActionRequest req1 = Requests.newActionRequest("/test", actionId1); String actionId2 = collection ? "collectionAction2" : "instanceAction2"; ActionRequest req2 = Requests.newActionRequest("/test", actionId2); // When Promise<JsonValue, ResourceException> promise1 = connection.actionAsync(new RootContext(), req1); Promise<JsonValue, ResourceException> promise2 = connection.actionAsync(new RootContext(), req2); // Then if ((collection && collectionAction) || (!collection && resourceAction)) { assertThatJsonValue(promise1).succeeded().stringAt("result").isEqualTo(actionId1); assertThatJsonValue(promise2).succeeded().stringAt("result").isEqualTo(actionId2); } else { assertThatJsonValue(promise1).failedWithException().isInstanceOf(NotSupportedException.class); assertThatJsonValue(promise2).failedWithException().isInstanceOf(NotSupportedException.class); } }
@Test(dataProvider = "dataWithoutVersionHeader") @SuppressWarnings("unchecked") public void shouldRouteActionRequestsUsingDefaultVersionBehaviour( String resource, DefaultVersionBehaviour versionBehaviour, boolean expectException, RequestHandler provider) { // Given AcceptAPIVersionContext apiVersionContext = new AcceptAPIVersionContext( new RootContext(), "PROTOCOL_NAME", AcceptAPIVersion.newBuilder().withDefaultProtocolVersion("1.0").build()); ServerContext context = new ServerContext(apiVersionContext); ActionRequest request = Requests.newActionRequest(resource, "ACTION_ID").setContent(json(object())); ResultHandler<JsonValue> handler = mock(ResultHandler.class); setDefaultVersionBehaviour(router, versionBehaviour); // When router.handleAction(context, request, handler); // Then if (expectException) { ArgumentCaptor<ResourceException> exceptionCaptor = ArgumentCaptor.forClass(ResourceException.class); verify(handler).handleError(exceptionCaptor.capture()); assertThat(exceptionCaptor.getValue()).isInstanceOf(BadRequestException.class); verifyZeroInteractions( usersHandlerOne, usersHandlerTwo, usersHandlerThree, groupsHandlerOne, groupsHandlerTwo, groupsHandlerThree); } else { verify(provider) .handleAction( Matchers.<ServerContext>anyObject(), Matchers.<ActionRequest>anyObject(), eq(handler)); } }