/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.project.server; import org.eclipse.che.api.core.rest.ServiceContext; import org.eclipse.che.api.core.rest.shared.dto.Link; import org.eclipse.che.api.project.shared.dto.ItemReference; import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto; import org.eclipse.che.dto.server.DtoFactory; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import java.util.List; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_CHILDREN; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_DELETE; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_GET_CONTENT; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_TREE; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_UPDATE_CONTENT; import static org.eclipse.che.api.project.shared.Constants.LINK_REL_UPDATE_PROJECT; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; @Listeners(value = {MockitoTestNGListener.class}) public class ProjectServiceLinksInjectorTest { private static final String PROJECT_PATH = "/project_path"; private static final String FOLDER_PATH = "/project1/folder"; private static final String FILE_PATH = "/project1/folder/file"; @Mock private ServiceContext serviceContext; private ProjectServiceLinksInjector projectServiceLinksInjector; @BeforeMethod public void setUp() throws Exception { UriBuilder uriBuilder = UriBuilder.fromPath("localhost:8080"); when(serviceContext.getBaseUriBuilder()).thenReturn(uriBuilder); projectServiceLinksInjector = new ProjectServiceLinksInjector(); } @Test public void verifyProjectLinks() throws Exception { ProjectConfigDto projectConfigDto = DtoFactory.newDto(ProjectConfigDto.class); projectConfigDto.withPath(PROJECT_PATH); ProjectConfigDto result = projectServiceLinksInjector.injectProjectLinks(projectConfigDto, serviceContext); final List<Link> links = result.getLinks(); assertEquals(4, links.size()); final Link updateProjectLink = links.get(0); assertNotNull(updateProjectLink); assertEquals("localhost:8080/project/project_path", updateProjectLink.getHref()); assertEquals(HttpMethod.PUT, updateProjectLink.getMethod()); assertEquals(LINK_REL_UPDATE_PROJECT, updateProjectLink.getRel()); assertEquals(APPLICATION_JSON, updateProjectLink.getConsumes()); assertEquals(APPLICATION_JSON, updateProjectLink.getProduces()); final Link childrenProjectLink = links.get(1); assertNotNull(childrenProjectLink); assertEquals("localhost:8080/project/children/project_path", childrenProjectLink.getHref()); assertEquals(HttpMethod.GET, childrenProjectLink.getMethod()); assertEquals(LINK_REL_CHILDREN, childrenProjectLink.getRel()); assertEquals(APPLICATION_JSON, childrenProjectLink.getProduces()); final Link treeProjectLink = links.get(2); assertNotNull(treeProjectLink); assertEquals("localhost:8080/project/tree/project_path", treeProjectLink.getHref()); assertEquals(HttpMethod.GET, treeProjectLink.getMethod()); assertEquals(LINK_REL_TREE, treeProjectLink.getRel()); assertEquals(APPLICATION_JSON, treeProjectLink.getProduces()); final Link deleteProjectLink = links.get(3); assertNotNull(deleteProjectLink); assertEquals("localhost:8080/project/project_path", deleteProjectLink.getHref()); assertEquals(HttpMethod.DELETE, deleteProjectLink.getMethod()); assertEquals(LINK_REL_DELETE, deleteProjectLink.getRel()); } @Test public void verifyFolderLinks() throws Exception { ItemReference itemReference = DtoFactory.newDto(ItemReference.class); itemReference.withPath(FOLDER_PATH); ItemReference result = projectServiceLinksInjector.injectFolderLinks(itemReference, serviceContext); assertEquals(3, result.getLinks().size()); Link getChildrenLink = result.getLink("children"); assertNotNull(getChildrenLink); assertEquals("localhost:8080/project/children/project1/folder", getChildrenLink.getHref()); assertEquals(HttpMethod.GET, getChildrenLink.getMethod()); assertEquals(LINK_REL_CHILDREN, getChildrenLink.getRel()); assertEquals(APPLICATION_JSON, getChildrenLink.getProduces()); Link getTreeLink = result.getLink("tree"); assertNotNull(getTreeLink); assertEquals("localhost:8080/project/tree/project1/folder", getTreeLink.getHref()); assertEquals(HttpMethod.GET, getTreeLink.getMethod()); assertEquals(LINK_REL_TREE, getTreeLink.getRel()); assertEquals(APPLICATION_JSON, getTreeLink.getProduces()); Link deleteLink = result.getLink("delete"); assertNotNull(deleteLink); assertEquals("localhost:8080/project/project1/folder", deleteLink.getHref()); assertEquals(HttpMethod.DELETE, deleteLink.getMethod()); assertEquals(LINK_REL_DELETE, deleteLink.getRel()); } @Test public void verifyFileLinks() throws Exception { ItemReference itemReference = DtoFactory.newDto(ItemReference.class); itemReference.withPath(FILE_PATH); ItemReference result = projectServiceLinksInjector.injectFileLinks(itemReference, serviceContext); assertEquals(3, result.getLinks().size()); Link updateLink = result.getLink("update content"); assertNotNull(updateLink); assertEquals("localhost:8080/project/file/project1/folder/file", updateLink.getHref()); assertEquals(HttpMethod.PUT, updateLink.getMethod()); assertEquals(LINK_REL_UPDATE_CONTENT, updateLink.getRel()); assertEquals(null, updateLink.getProduces()); assertEquals(MediaType.WILDCARD, updateLink.getConsumes()); Link getContentLink = result.getLink("get content"); assertNotNull(getContentLink); assertEquals("localhost:8080/project/file/project1/folder/file", getContentLink.getHref()); assertEquals(HttpMethod.GET, getContentLink.getMethod()); assertEquals(LINK_REL_GET_CONTENT, getContentLink.getRel()); assertEquals(APPLICATION_JSON, getContentLink.getProduces()); Link deleteLink = result.getLink("delete"); assertNotNull(deleteLink); assertEquals("localhost:8080/project/project1/folder/file", deleteLink.getHref()); assertEquals(HttpMethod.DELETE, deleteLink.getMethod()); assertEquals(LINK_REL_DELETE, deleteLink.getRel()); } }