Simplify mocking of resource links

This commit is contained in:
René Pfeuffer
2018-07-04 08:55:36 +02:00
parent 7c662ed42a
commit 6043b093da
9 changed files with 30 additions and 48 deletions

View File

@@ -20,7 +20,7 @@ class ResourceLinks {
static class GroupLinks { static class GroupLinks {
private final LinkBuilder groupLinkBuilder; private final LinkBuilder groupLinkBuilder;
private GroupLinks(UriInfo uriInfo) { GroupLinks(UriInfo uriInfo) {
groupLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupResource.class); groupLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupResource.class);
} }
@@ -44,7 +44,7 @@ class ResourceLinks {
static class GroupCollectionLinks { static class GroupCollectionLinks {
private final LinkBuilder collectionLinkBuilder; private final LinkBuilder collectionLinkBuilder;
private GroupCollectionLinks(UriInfo uriInfo) { GroupCollectionLinks(UriInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupCollectionResource.class); collectionLinkBuilder = new LinkBuilder(uriInfo, GroupRootResource.class, GroupCollectionResource.class);
} }
@@ -64,7 +64,7 @@ class ResourceLinks {
static class UserLinks { static class UserLinks {
private final LinkBuilder userLinkBuilder; private final LinkBuilder userLinkBuilder;
private UserLinks(UriInfo uriInfo) { UserLinks(UriInfo uriInfo) {
userLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserResource.class); userLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserResource.class);
} }
@@ -88,7 +88,7 @@ class ResourceLinks {
static class UserCollectionLinks { static class UserCollectionLinks {
private final LinkBuilder collectionLinkBuilder; private final LinkBuilder collectionLinkBuilder;
private UserCollectionLinks(UriInfo uriInfo) { UserCollectionLinks(UriInfo uriInfo) {
collectionLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserCollectionResource.class); collectionLinkBuilder = new LinkBuilder(uriInfo, UserRootResource.class, UserCollectionResource.class);
} }
@@ -108,7 +108,7 @@ class ResourceLinks {
static class RepositoryLinks { static class RepositoryLinks {
private final LinkBuilder repositoryLinkBuilder; private final LinkBuilder repositoryLinkBuilder;
private RepositoryLinks(UriInfo uriInfo) { RepositoryLinks(UriInfo uriInfo) {
repositoryLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class); repositoryLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class);
} }
@@ -132,7 +132,7 @@ class ResourceLinks {
static class TagCollectionLinks { static class TagCollectionLinks {
private final LinkBuilder tagLinkBuilder; private final LinkBuilder tagLinkBuilder;
private TagCollectionLinks(UriInfo uriInfo) { TagCollectionLinks(UriInfo uriInfo) {
tagLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, TagRootResource.class, TagCollectionResource.class); tagLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, TagRootResource.class, TagCollectionResource.class);
} }
@@ -148,7 +148,7 @@ class ResourceLinks {
static class BranchCollectionLinks { static class BranchCollectionLinks {
private final LinkBuilder branchLinkBuilder; private final LinkBuilder branchLinkBuilder;
private BranchCollectionLinks(UriInfo uriInfo) { BranchCollectionLinks(UriInfo uriInfo) {
branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class, BranchCollectionResource.class); branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class, BranchCollectionResource.class);
} }

View File

@@ -10,7 +10,6 @@ import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
@@ -49,7 +48,7 @@ public class GroupRootResourceTest {
private Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); private Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@Mock @Mock

View File

@@ -7,7 +7,6 @@ import org.apache.shiro.util.ThreadState;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.group.Group; import sonia.scm.group.Group;
@@ -24,7 +23,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
public class GroupToGroupDtoMapperTest { public class GroupToGroupDtoMapperTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@InjectMocks @InjectMocks

View File

@@ -9,7 +9,6 @@ import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
@@ -39,7 +38,7 @@ public class RepositoryRootResourceTest {
@Mock @Mock
private RepositoryManager repositoryManager; private RepositoryManager repositoryManager;
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@InjectMocks @InjectMocks
private RepositoryToRepositoryDtoMapperImpl repositoryToDtoMapper; private RepositoryToRepositoryDtoMapperImpl repositoryToDtoMapper;

View File

@@ -6,7 +6,6 @@ import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.util.ThreadState; import org.apache.shiro.util.ThreadState;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.repository.HealthCheckFailure; import sonia.scm.repository.HealthCheckFailure;
@@ -26,7 +25,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
public class RepositoryToRepositoryDtoMapperTest { public class RepositoryToRepositoryDtoMapperTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@InjectMocks @InjectMocks
@@ -62,7 +61,7 @@ public class RepositoryToRepositoryDtoMapperTest {
public void shouldCreateLinksForUnprivilegedUser() { public void shouldCreateLinksForUnprivilegedUser() {
RepositoryDto dto = mapper.map(createTestRepository()); RepositoryDto dto = mapper.map(createTestRepository());
assertEquals( assertEquals(
"http://example.com/base/v2/groups/testspace/test", "http://example.com/base/v2/repositories/testspace/test",
dto.getLinks().getLinkBy("self").get().getHref()); dto.getLinks().getLinkBy("self").get().getHref());
assertFalse(dto.getLinks().getLinkBy("update").isPresent()); assertFalse(dto.getLinks().getLinkBy("update").isPresent());
assertFalse(dto.getLinks().getLinkBy("delete").isPresent()); assertFalse(dto.getLinks().getLinkBy("delete").isPresent());
@@ -73,7 +72,7 @@ public class RepositoryToRepositoryDtoMapperTest {
when(subject.isPermitted("repository:delete:1")).thenReturn(true); when(subject.isPermitted("repository:delete:1")).thenReturn(true);
RepositoryDto dto = mapper.map(createTestRepository()); RepositoryDto dto = mapper.map(createTestRepository());
assertEquals( assertEquals(
"http://example.com/base/v2/groups/testspace/test", "http://example.com/base/v2/repositories/testspace/test",
dto.getLinks().getLinkBy("delete").get().getHref()); dto.getLinks().getLinkBy("delete").get().getHref());
} }
@@ -82,7 +81,7 @@ public class RepositoryToRepositoryDtoMapperTest {
when(subject.isPermitted("repository:modify:1")).thenReturn(true); when(subject.isPermitted("repository:modify:1")).thenReturn(true);
RepositoryDto dto = mapper.map(createTestRepository()); RepositoryDto dto = mapper.map(createTestRepository());
assertEquals( assertEquals(
"http://example.com/base/v2/groups/testspace/test", "http://example.com/base/v2/repositories/testspace/test",
dto.getLinks().getLinkBy("update").get().getHref()); dto.getLinks().getLinkBy("update").get().getHref());
} }
@@ -105,7 +104,7 @@ public class RepositoryToRepositoryDtoMapperTest {
public void shouldCreateTagsLink() { public void shouldCreateTagsLink() {
RepositoryDto dto = mapper.map(createTestRepository()); RepositoryDto dto = mapper.map(createTestRepository());
assertEquals( assertEquals(
"http://example.com/base/v2/groups/testspace/test/tags/", "http://example.com/base/v2/repositories/testspace/test/tags/",
dto.getLinks().getLinkBy("tags").get().getHref()); dto.getLinks().getLinkBy("tags").get().getHref());
} }
@@ -113,7 +112,7 @@ public class RepositoryToRepositoryDtoMapperTest {
public void shouldCreateBranchesLink() { public void shouldCreateBranchesLink() {
RepositoryDto dto = mapper.map(createTestRepository()); RepositoryDto dto = mapper.map(createTestRepository());
assertEquals( assertEquals(
"http://example.com/base/v2/groups/testspace/test/branches/", "http://example.com/base/v2/repositories/testspace/test/branches/",
dto.getLinks().getLinkBy("branches").get().getHref()); dto.getLinks().getLinkBy("branches").get().getHref());
} }

View File

@@ -1,34 +1,23 @@
package sonia.scm.api.v2.resources; package sonia.scm.api.v2.resources;
import javax.ws.rs.core.UriInfo;
import java.net.URI; import java.net.URI;
import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static sonia.scm.api.v2.resources.GroupRootResource.GROUPS_PATH_V2;
import static sonia.scm.api.v2.resources.UserRootResource.USERS_PATH_V2;
public class ResourceLinksMock { public class ResourceLinksMock {
public static void initMock(ResourceLinks resourceLinks, URI baseUri) { public static void initMock(ResourceLinks resourceLinks, URI baseUri) {
when(resourceLinks.user().self(anyString())).thenAnswer(invocation -> baseUri + USERS_PATH_V2 + invocation.getArguments()[0]);
when(resourceLinks.user().update(anyString())).thenAnswer(invocation -> baseUri + USERS_PATH_V2 + invocation.getArguments()[0]);
when(resourceLinks.user().delete(anyString())).thenAnswer(invocation -> baseUri + USERS_PATH_V2 + invocation.getArguments()[0]);
when(resourceLinks.userCollection().self()).thenAnswer(invocation -> baseUri + USERS_PATH_V2); UriInfo uriInfo = mock(UriInfo.class);
when(resourceLinks.userCollection().create()).thenAnswer(invocation -> baseUri + USERS_PATH_V2); when(uriInfo.getBaseUri()).thenReturn(baseUri);
when(resourceLinks.group().self(anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0]); when(resourceLinks.user()).thenReturn(new ResourceLinks.UserLinks(uriInfo));
when(resourceLinks.group().update(anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0]); when(resourceLinks.userCollection()).thenReturn(new ResourceLinks.UserCollectionLinks(uriInfo));
when(resourceLinks.group().delete(anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0]); when(resourceLinks.group()).thenReturn(new ResourceLinks.GroupLinks(uriInfo));
when(resourceLinks.groupCollection()).thenReturn(new ResourceLinks.GroupCollectionLinks(uriInfo));
when(resourceLinks.groupCollection().self()).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2); when(resourceLinks.repository()).thenReturn(new ResourceLinks.RepositoryLinks(uriInfo));
when(resourceLinks.groupCollection().create()).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2); when(resourceLinks.tagCollection()).thenReturn(new ResourceLinks.TagCollectionLinks(uriInfo));
when(resourceLinks.branchCollection()).thenReturn(new ResourceLinks.BranchCollectionLinks(uriInfo));
when(resourceLinks.repository().self(anyString(), anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0] + "/" + invocation.getArguments()[1]);
when(resourceLinks.repository().update(anyString(), anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0] + "/" + invocation.getArguments()[1]);
when(resourceLinks.repository().delete(anyString(), anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0] + "/" + invocation.getArguments()[1]);
when(resourceLinks.tagCollection().self(anyString(), anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0] + "/" + invocation.getArguments()[1] + "/tags/");
when(resourceLinks.branchCollection().self(anyString(), anyString())).thenAnswer(invocation -> baseUri + GROUPS_PATH_V2 + invocation.getArguments()[0] + "/" + invocation.getArguments()[1] + "/branches/");
} }
} }

View File

@@ -7,7 +7,6 @@ import org.apache.shiro.util.ThreadContext;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.PageResult; import sonia.scm.PageResult;
@@ -28,7 +27,7 @@ import static sonia.scm.PageResult.createPage;
public class UserCollectionToDtoMapperTest { public class UserCollectionToDtoMapperTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@Mock @Mock
private UserToUserDtoMapper userToDtoMapper; private UserToUserDtoMapper userToDtoMapper;

View File

@@ -11,7 +11,6 @@ import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
@@ -51,7 +50,7 @@ public class UserRootResourceTest {
private Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); private Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@Mock @Mock

View File

@@ -7,7 +7,6 @@ import org.apache.shiro.util.ThreadState;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.api.rest.resources.UserResource; import sonia.scm.api.rest.resources.UserResource;
@@ -25,7 +24,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
public class UserToUserDtoMapperTest { public class UserToUserDtoMapperTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock
private ResourceLinks resourceLinks; private ResourceLinks resourceLinks;
@InjectMocks @InjectMocks