package io.katharsis.dispatcher.controller.resource; import io.katharsis.dispatcher.controller.BaseControllerTest; import io.katharsis.request.path.JsonPath; import io.katharsis.request.path.ResourcePath; import io.katharsis.resource.mock.models.Task; import io.katharsis.resource.mock.repository.TaskToProjectRepository; import io.katharsis.resource.registry.ResourceRegistry; import io.katharsis.response.BaseResponseContext; import io.katharsis.response.HttpStatus; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class RelationshipsResourceGetTest extends BaseControllerTest { private static final String REQUEST_TYPE = "GET"; private TaskToProjectRepository localTaskToProjectRepository; @Before public void prepareTest() throws Exception { localTaskToProjectRepository = new TaskToProjectRepository(); localTaskToProjectRepository.removeRelations("project"); } @Test public void onValidRequestShouldAcceptIt() { // GIVEN JsonPath jsonPath = pathBuilder.buildPath("tasks/1/relationships/project"); ResourceRegistry resourceRegistry = mock(ResourceRegistry.class); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); // WHEN boolean result = sut.isAcceptable(jsonPath, REQUEST_TYPE); // THEN assertThat(result).isTrue(); } @Test public void onFieldRequestShouldDenyIt() { // GIVEN JsonPath jsonPath = new ResourcePath("tasks/1/project"); ResourceRegistry resourceRegistry = mock(ResourceRegistry.class); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); // WHEN boolean result = sut.isAcceptable(jsonPath, REQUEST_TYPE); // THEN assertThat(result).isFalse(); } @Test public void onNonRelationRequestShouldDenyIt() { // GIVEN JsonPath jsonPath = new ResourcePath("tasks"); ResourceRegistry resourceRegistry = mock(ResourceRegistry.class); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); // WHEN boolean result = sut.isAcceptable(jsonPath, REQUEST_TYPE); // THEN assertThat(result).isFalse(); } @Test public void onGivenRequestLinkResourceGetShouldReturnNullData() throws Exception { // GIVEN JsonPath jsonPath = pathBuilder.buildPath("/tasks/1/relationships/project"); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); // WHEN BaseResponseContext response = sut.handle(jsonPath, REQUEST_PARAMS, null, null); // THEN Assert.assertNotNull(response); } @Test public void onGivenRequestLinkResourceGetShouldReturnDataField() throws Exception { // GIVEN JsonPath jsonPath = pathBuilder.buildPath("/tasks/1/relationships/project"); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); new TaskToProjectRepository().setRelation(new Task().setId(1L), 42L, "project"); // WHEN BaseResponseContext response = sut.handle(jsonPath, REQUEST_PARAMS, null, null); // THEN Assert.assertNotNull(response); String resultJson = objectMapper.writeValueAsString(response); assertThatJson(resultJson).node("data.id").isStringEqualTo("42"); assertThatJson(resultJson).node("data.type").isEqualTo("projects"); } @Test public void onGivenRequestLinkResourcesGetShouldHandleIt() throws Exception { // GIVEN JsonPath jsonPath = pathBuilder.buildPath("/users/1/relationships/assignedProjects"); RelationshipsResourceGet sut = new RelationshipsResourceGet(resourceRegistry, typeParser, includeFieldSetter); // WHEN BaseResponseContext response = sut.handle(jsonPath, REQUEST_PARAMS, null, null); // THEN Assert.assertNotNull(response); assertThat(response.getHttpStatus()).isEqualTo(HttpStatus.OK_200); } }