Remove direct dependency to UriInfo

This commit is contained in:
René Pfeuffer
2018-09-12 08:40:41 +02:00
parent e5e3e678ad
commit f718a2ba4c
22 changed files with 64 additions and 60 deletions

View File

@@ -3,7 +3,6 @@ package sonia.scm.api.v2.resources;
import com.google.common.collect.ImmutableList;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.Arrays;
@@ -25,15 +24,15 @@ import java.util.Arrays;
*/
@SuppressWarnings("WeakerAccess") // Non-public will result in IllegalAccessError for plugins
public class LinkBuilder {
private final UriInfo uriInfo;
private final ScmPathInfo uriInfo;
private final Class[] classes;
private final ImmutableList<Call> calls;
public LinkBuilder(UriInfo uriInfo, Class... classes) {
public LinkBuilder(ScmPathInfo uriInfo, Class... classes) {
this(uriInfo, classes, ImmutableList.of());
}
private LinkBuilder(UriInfo uriInfo, Class[] classes, ImmutableList<Call> calls) {
private LinkBuilder(ScmPathInfo uriInfo, Class[] classes, ImmutableList<Call> calls) {
this.uriInfo = uriInfo;
this.classes = classes;
this.calls = calls;
@@ -51,7 +50,7 @@ public class LinkBuilder {
throw new IllegalStateException("not enough methods for all classes");
}
URI baseUri = uriInfo.getBaseUri();
URI baseUri = uriInfo.getApiRestUri();
URI relativeUri = createRelativeUri();
return baseUri.resolve(relativeUri);
}

View File

@@ -0,0 +1,7 @@
package sonia.scm.api.v2.resources;
import java.net.URI;
public interface ScmPathInfo {
URI getApiRestUri();
}

View File

@@ -6,8 +6,8 @@ public class UriInfoStore {
private UriInfo uriInfo;
public UriInfo get() {
return uriInfo;
public ScmPathInfo get() {
return () -> uriInfo.getBaseUri();
}
public void set(UriInfo uriInfo) {
@@ -16,4 +16,5 @@ public class UriInfoStore {
}
this.uriInfo = uriInfo;
}
}

View File

@@ -39,7 +39,7 @@ public abstract class InitializingHttpScmProtocolWrapper {
private String computeBasePath() {
if (uriInfoStore.get() != null && uriInfoStore.get().get() != null) {
return uriInfoStore.get().get().getBaseUri().resolve("../..").toASCIIString();
return uriInfoStore.get().get().getApiRestUri().resolve("../..").toASCIIString();
} else {
return scmConfiguration.getBaseUrl();
}

View File

@@ -67,7 +67,7 @@ public class GitConfigResourceTest {
when(repositoryHandler.getConfig()).thenReturn(gitConfig);
GitConfigResource gitConfigResource = new GitConfigResource(dtoToConfigMapper, configToDtoMapper, repositoryHandler);
dispatcher.getRegistry().addSingletonResource(gitConfigResource);
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
}
@Test

View File

@@ -40,7 +40,7 @@ public class GitConfigToGitConfigDtoMapperTest {
@Before
public void init() {
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
expectedBaseUri = baseUri.resolve(GitConfigResource.GIT_CONFIG_PATH_V2);
subjectThreadState.bind();
ThreadContext.bind(subject);

View File

@@ -61,7 +61,7 @@ public class HgConfigInstallationsResourceTest {
new HgConfigResource(null, null, null, null,
null, resourceProvider));
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
}
@Test

View File

@@ -34,7 +34,7 @@ public class HgConfigInstallationsToDtoMapperTest {
@Before
public void init() {
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
expectedBaseUri = baseUri.resolve(HgConfigResource.HG_CONFIG_PATH_V2 + "/installations/" + expectedPath);
}

View File

@@ -81,7 +81,7 @@ public class HgConfigPackageResourceTest {
public void prepareEnvironment() {
setupResources();
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
when(hgPackageReader.getPackages().getPackages()).thenReturn(createPackages());
}

View File

@@ -1,6 +1,5 @@
package sonia.scm.api.v2.resources;
import de.otto.edison.hal.HalRepresentation;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -13,12 +12,10 @@ import sonia.scm.installer.HgPackages;
import java.net.URI;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import static sonia.scm.api.v2.resources.HgConfigTests.assertEqualsPackage;
import static sonia.scm.api.v2.resources.HgConfigTests.createPackage;
@@ -38,7 +35,7 @@ public class HgConfigPackagesToDtoMapperTest {
@Before
public void init() {
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
expectedBaseUri = baseUri.resolve(HgConfigResource.HG_CONFIG_PATH_V2 + "/packages");
}

View File

@@ -79,7 +79,7 @@ public class HgConfigResourceTest {
new HgConfigResource(dtoToConfigMapper, configToDtoMapper, repositoryHandler, packagesResource,
autoconfigResource, installationsResource);
dispatcher.getRegistry().addSingletonResource(gitConfigResource);
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
}
@Test

View File

@@ -41,7 +41,7 @@ public class HgConfigToHgConfigDtoMapperTest {
@Before
public void init() {
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
expectedBaseUri = baseUri.resolve(HgConfigResource.HG_CONFIG_PATH_V2);
subjectThreadState.bind();
ThreadContext.bind(subject);

View File

@@ -67,7 +67,7 @@ public class SvnConfigResourceTest {
when(repositoryHandler.getConfig()).thenReturn(gitConfig);
SvnConfigResource gitConfigResource = new SvnConfigResource(dtoToConfigMapper, configToDtoMapper, repositoryHandler);
dispatcher.getRegistry().addSingletonResource(gitConfigResource);
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
}
@Test

View File

@@ -42,7 +42,7 @@ public class SvnConfigToSvnConfigDtoMapperTest {
@Before
public void init() {
when(uriInfoStore.get().getBaseUri()).thenReturn(baseUri);
when(uriInfoStore.get().getApiRestUri()).thenReturn(baseUri);
expectedBaseUri = baseUri.resolve(SvnConfigResource.SVN_CONFIG_PATH_V2);
subjectThreadState.bind();
ThreadContext.bind(subject);

View File

@@ -3,7 +3,6 @@ package sonia.scm.api.v2.resources;
import sonia.scm.repository.NamespaceAndName;
import javax.inject.Inject;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
class ResourceLinks {
@@ -23,7 +22,7 @@ class ResourceLinks {
static class GroupLinks {
private final LinkBuilder groupLinkBuilder;
GroupLinks(UriInfo uriInfo) {
GroupLinks(ScmPathInfo uriInfo) {
groupLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupResource.class);
}
@@ -47,7 +46,7 @@ class ResourceLinks {
static class GroupCollectionLinks {
private final LinkBuilder collectionLinkBuilder;
GroupCollectionLinks(UriInfo uriInfo) {
GroupCollectionLinks(ScmPathInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupCollectionResource.class);
}
@@ -67,7 +66,7 @@ class ResourceLinks {
static class UserLinks {
private final LinkBuilder userLinkBuilder;
UserLinks(UriInfo uriInfo) {
UserLinks(ScmPathInfo uriInfo) {
userLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserResource.class);
}
@@ -91,7 +90,7 @@ class ResourceLinks {
static class UserCollectionLinks {
private final LinkBuilder collectionLinkBuilder;
UserCollectionLinks(UriInfo uriInfo) {
UserCollectionLinks(ScmPathInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserCollectionResource.class);
}
@@ -111,7 +110,7 @@ class ResourceLinks {
static class ConfigLinks {
private final LinkBuilder configLinkBuilder;
ConfigLinks(UriInfo uriInfo) {
ConfigLinks(ScmPathInfo uriInfo) {
configLinkBuilder = new LinkBuilder(uriInfo, ConfigResource.class);
}
@@ -130,9 +129,9 @@ class ResourceLinks {
static class RepositoryLinks {
private final LinkBuilder repositoryLinkBuilder;
private final UriInfo uriInfo;
private final ScmPathInfo uriInfo;
RepositoryLinks(UriInfo uriInfo) {
RepositoryLinks(ScmPathInfo uriInfo) {
repositoryLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class);
this.uriInfo = uriInfo;
}
@@ -157,7 +156,7 @@ class ResourceLinks {
static class RepositoryCollectionLinks {
private final LinkBuilder collectionLinkBuilder;
RepositoryCollectionLinks(UriInfo uriInfo) {
RepositoryCollectionLinks(ScmPathInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryCollectionResource.class);
}
@@ -177,7 +176,7 @@ class ResourceLinks {
static class RepositoryTypeLinks {
private final LinkBuilder repositoryTypeLinkBuilder;
RepositoryTypeLinks(UriInfo uriInfo) {
RepositoryTypeLinks(ScmPathInfo uriInfo) {
repositoryTypeLinkBuilder = new LinkBuilder(uriInfo, RepositoryTypeRootResource.class, RepositoryTypeResource.class);
}
@@ -193,7 +192,7 @@ class ResourceLinks {
static class RepositoryTypeCollectionLinks {
private final LinkBuilder collectionLinkBuilder;
RepositoryTypeCollectionLinks(UriInfo uriInfo) {
RepositoryTypeCollectionLinks(ScmPathInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, RepositoryTypeRootResource.class, RepositoryTypeCollectionResource.class);
}
@@ -210,7 +209,7 @@ class ResourceLinks {
static class TagCollectionLinks {
private final LinkBuilder tagLinkBuilder;
TagCollectionLinks(UriInfo uriInfo) {
TagCollectionLinks(ScmPathInfo uriInfo) {
tagLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, TagRootResource.class);
}
@@ -230,7 +229,7 @@ class ResourceLinks {
static class DiffLinks {
private final LinkBuilder diffLinkBuilder;
DiffLinks(UriInfo uriInfo) {
DiffLinks(ScmPathInfo uriInfo) {
diffLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, DiffRootResource.class);
}
@@ -250,7 +249,7 @@ class ResourceLinks {
static class BranchLinks {
private final LinkBuilder branchLinkBuilder;
BranchLinks(UriInfo uriInfo) {
BranchLinks(ScmPathInfo uriInfo) {
branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class);
}
@@ -270,7 +269,7 @@ class ResourceLinks {
static class BranchCollectionLinks {
private final LinkBuilder branchLinkBuilder;
BranchCollectionLinks(UriInfo uriInfo) {
BranchCollectionLinks(ScmPathInfo uriInfo) {
branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class);
}
@@ -286,7 +285,7 @@ class ResourceLinks {
static class ChangesetLinks {
private final LinkBuilder changesetLinkBuilder;
ChangesetLinks(UriInfo uriInfo) {
ChangesetLinks(ScmPathInfo uriInfo) {
changesetLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, ChangesetRootResource.class);
}
@@ -310,7 +309,7 @@ class ResourceLinks {
static class SourceLinks {
private final LinkBuilder sourceLinkBuilder;
SourceLinks(UriInfo uriInfo) {
SourceLinks(ScmPathInfo uriInfo) {
sourceLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, SourceRootResource.class);
}
@@ -346,7 +345,7 @@ class ResourceLinks {
static class PermissionLinks {
private final LinkBuilder permissionLinkBuilder;
PermissionLinks(UriInfo uriInfo) {
PermissionLinks(ScmPathInfo uriInfo) {
permissionLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, PermissionRootResource.class);
}
@@ -383,7 +382,7 @@ class ResourceLinks {
static class UIPluginLinks {
private final LinkBuilder uiPluginLinkBuilder;
UIPluginLinks(UriInfo uriInfo) {
UIPluginLinks(ScmPathInfo uriInfo) {
uiPluginLinkBuilder = new LinkBuilder(uriInfo, UIRootResource.class, UIPluginResource.class);
}
@@ -399,7 +398,7 @@ class ResourceLinks {
static class UIPluginCollectionLinks {
private final LinkBuilder uiPluginCollectionLinkBuilder;
UIPluginCollectionLinks(UriInfo uriInfo) {
UIPluginCollectionLinks(ScmPathInfo uriInfo) {
uiPluginCollectionLinkBuilder = new LinkBuilder(uriInfo, UIRootResource.class, UIPluginResource.class);
}

View File

@@ -4,7 +4,6 @@ import org.junit.Before;
import org.junit.Test;
import javax.ws.rs.Path;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.net.URISyntaxException;
@@ -37,7 +36,7 @@ public class LinkBuilderTest {
}
}
private UriInfo uriInfo = mock(UriInfo.class);
private ScmPathInfo uriInfo = mock(ScmPathInfo.class);
@Test
public void shouldBuildSimplePath() {
@@ -94,6 +93,6 @@ public class LinkBuilderTest {
@Before
public void setBaseUri() throws URISyntaxException {
when(uriInfo.getBaseUri()).thenReturn(new URI("http://example.com/"));
when(uriInfo.getApiRestUri()).thenReturn(new URI("http://example.com/"));
}
}

View File

@@ -17,7 +17,6 @@ import sonia.scm.user.UserManager;
import sonia.scm.web.VndMediaType;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.net.URISyntaxException;
@@ -40,7 +39,7 @@ public class MeResourceTest {
private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(URI.create("/"));
@Mock
private UriInfo uriInfo;
private ScmPathInfo uriInfo;
@Mock
private UriInfoStore uriInfoStore;
@@ -62,7 +61,7 @@ public class MeResourceTest {
userToDtoMapper.setResourceLinks(resourceLinks);
MeResource meResource = new MeResource(userToDtoMapper, userManager);
dispatcher.getRegistry().addSingletonResource(meResource);
when(uriInfo.getBaseUri()).thenReturn(URI.create("/"));
when(uriInfo.getApiRestUri()).thenReturn(URI.create("/"));
when(uriInfoStore.get()).thenReturn(uriInfo);
}

View File

@@ -24,7 +24,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.web.VndMediaType;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -73,7 +72,7 @@ public class RepositoryRootResourceTest {
@Mock
private UriInfoStore uriInfoStore;
@Mock
private UriInfo uriInfo;
private ScmPathInfo uriInfo;
private final URI baseUri = URI.create("/");
@@ -93,7 +92,7 @@ public class RepositoryRootResourceTest {
RepositoryRootResource repositoryRootResource = new RepositoryRootResource(MockProvider.of(repositoryResource), MockProvider.of(repositoryCollectionResource));
when(serviceFactory.create(any(Repository.class))).thenReturn(service);
when(uriInfoStore.get()).thenReturn(uriInfo);
when(uriInfo.getBaseUri()).thenReturn(URI.create("/x/y"));
when(uriInfo.getApiRestUri()).thenReturn(URI.create("/x/y"));
dispatcher = createDispatcher(repositoryRootResource);
}

View File

@@ -18,7 +18,6 @@ import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.repository.api.ScmProtocol;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import static java.util.Arrays.asList;
@@ -51,7 +50,7 @@ public class RepositoryToRepositoryDtoMapperTest {
@Mock
private UriInfoStore uriInfoStore;
@Mock
private UriInfo uriInfo;
private ScmPathInfo uriInfo;
@InjectMocks
private RepositoryToRepositoryDtoMapperImpl mapper;
@@ -63,7 +62,7 @@ public class RepositoryToRepositoryDtoMapperTest {
when(repositoryService.isSupported(any(Command.class))).thenReturn(true);
when(repositoryService.getSupportedProtocols()).thenReturn(emptySet());
when(uriInfoStore.get()).thenReturn(uriInfo);
when(uriInfo.getBaseUri()).thenReturn(URI.create("/x/y"));
when(uriInfo.getApiRestUri()).thenReturn(URI.create("/x/y"));
}
@After

View File

@@ -1,6 +1,5 @@
package sonia.scm.api.v2.resources;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import static org.mockito.Mockito.mock;
@@ -10,8 +9,8 @@ public class ResourceLinksMock {
public static ResourceLinks createMock(URI baseUri) {
ResourceLinks resourceLinks = mock(ResourceLinks.class);
UriInfo uriInfo = mock(UriInfo.class);
when(uriInfo.getBaseUri()).thenReturn(baseUri);
ScmPathInfo uriInfo = mock(ScmPathInfo.class);
when(uriInfo.getApiRestUri()).thenReturn(baseUri);
when(resourceLinks.user()).thenReturn(new ResourceLinks.UserLinks(uriInfo));
when(resourceLinks.userCollection()).thenReturn(new ResourceLinks.UserCollectionLinks(uriInfo));

View File

@@ -6,7 +6,6 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import sonia.scm.repository.NamespaceAndName;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import static org.junit.Assert.assertEquals;
@@ -20,7 +19,7 @@ public class ResourceLinksTest {
@Mock
private UriInfoStore uriInfoStore;
@Mock
private UriInfo uriInfo;
private ScmPathInfo uriInfo;
@InjectMocks
private ResourceLinks resourceLinks;
@@ -178,6 +177,6 @@ public class ResourceLinksTest {
public void initUriInfo() {
initMocks(this);
when(uriInfoStore.get()).thenReturn(uriInfo);
when(uriInfo.getBaseUri()).thenReturn(URI.create(BASE_URL));
when(uriInfo.getApiRestUri()).thenReturn(URI.create(BASE_URL));
}
}

View File

@@ -4,19 +4,26 @@ import org.junit.Test;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class UriInfoStoreTest {
@Test
public void shouldReturnSetInfo() {
URI someUri = URI.create("/anything");
UriInfo uriInfo = mock(UriInfo.class);
UriInfoStore uriInfoStore = new UriInfoStore();
when(uriInfo.getBaseUri()).thenReturn(someUri);
uriInfoStore.set(uriInfo);
assertSame(uriInfo, uriInfoStore.get());
assertSame(someUri, uriInfoStore.get().getApiRestUri());
}
@Test(expected = IllegalStateException.class)