mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 16:05:44 +01:00
restore context path support
This commit is contained in:
@@ -1,25 +1,34 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import de.otto.edison.hal.Links;
|
||||
import sonia.scm.plugin.PluginWrapper;
|
||||
import sonia.scm.util.HttpUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
|
||||
public class UIPluginDtoMapper {
|
||||
|
||||
private ResourceLinks resourceLinks;
|
||||
private final ResourceLinks resourceLinks;
|
||||
private final HttpServletRequest request;
|
||||
|
||||
@Inject
|
||||
public UIPluginDtoMapper(ResourceLinks resourceLinks) {
|
||||
public UIPluginDtoMapper(ResourceLinks resourceLinks, HttpServletRequest request) {
|
||||
this.resourceLinks = resourceLinks;
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
public UIPluginDto map(PluginWrapper plugin) {
|
||||
UIPluginDto dto = new UIPluginDto(
|
||||
plugin.getPlugin().getInformation().getName(),
|
||||
plugin.getPlugin().getResources().getScriptResources()
|
||||
getScriptResources(plugin)
|
||||
);
|
||||
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
@@ -31,4 +40,22 @@ public class UIPluginDtoMapper {
|
||||
return dto;
|
||||
}
|
||||
|
||||
private Set<String> getScriptResources(PluginWrapper wrapper) {
|
||||
Set<String> scriptResources = wrapper.getPlugin().getResources().getScriptResources();
|
||||
if (scriptResources != null) {
|
||||
return scriptResources.stream()
|
||||
.map(this::addContextPath)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
private String addContextPath(String resource) {
|
||||
String ctxPath = request.getContextPath();
|
||||
if (Strings.isNullOrEmpty(ctxPath)) {
|
||||
return resource;
|
||||
}
|
||||
return HttpUtil.append(ctxPath, resource);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package sonia.scm.api.v2.resources;
|
||||
import com.webcohesion.enunciate.metadata.rs.ResponseCode;
|
||||
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
||||
import com.webcohesion.enunciate.metadata.rs.TypeHint;
|
||||
import de.otto.edison.hal.HalRepresentation;
|
||||
import sonia.scm.plugin.PluginLoader;
|
||||
import sonia.scm.plugin.PluginWrapper;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
@@ -12,14 +12,13 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import sonia.scm.api.rest.resources.PluginResource;
|
||||
import sonia.scm.plugin.*;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
@@ -36,12 +35,15 @@ public class UIRootResourceTest {
|
||||
@Mock
|
||||
private PluginLoader pluginLoader;
|
||||
|
||||
@Mock
|
||||
private HttpServletRequest request;
|
||||
|
||||
private final URI baseUri = URI.create("/");
|
||||
private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri);
|
||||
|
||||
@Before
|
||||
public void setUpRestService() {
|
||||
UIPluginDtoMapper mapper = new UIPluginDtoMapper(resourceLinks);
|
||||
UIPluginDtoMapper mapper = new UIPluginDtoMapper(resourceLinks, request);
|
||||
UIPluginDtoCollectionMapper collectionMapper = new UIPluginDtoCollectionMapper(resourceLinks, mapper);
|
||||
|
||||
UIPluginResource pluginResource = new UIPluginResource(pluginLoader, collectionMapper, mapper);
|
||||
@@ -149,6 +151,24 @@ public class UIRootResourceTest {
|
||||
assertTrue(response.getContentAsString().contains("\"self\":{\"href\":\"" + uri + "\"}"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldHaveBundleWithContextPath() throws Exception {
|
||||
when(request.getContextPath()).thenReturn("/scm");
|
||||
mockPlugins(mockPlugin("awesome", "Awesome", createPluginResources("my/bundle.js")));
|
||||
|
||||
String uri = "/v2/ui/plugins/awesome";
|
||||
MockHttpRequest request = MockHttpRequest.get(uri);
|
||||
MockHttpResponse response = new MockHttpResponse();
|
||||
|
||||
dispatcher.invoke(request, response);
|
||||
|
||||
assertEquals(SC_OK, response.getStatus());
|
||||
|
||||
System.out.println();
|
||||
|
||||
assertTrue(response.getContentAsString().contains("/scm/my/bundle.js"));
|
||||
}
|
||||
|
||||
private void mockPlugins(PluginWrapper... plugins) {
|
||||
when(pluginLoader.getInstalledPlugins()).thenReturn(Lists.newArrayList(plugins));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user