From 22069914b0ff7046fad7cd65803a4acae6bf674e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 26 Oct 2018 14:54:55 +0200 Subject: [PATCH] Fix injection for unit tests --- .../sonia/scm/api/rest/AlreadyExistsExceptionMapper.java | 7 +++++-- .../api/rest/ConcurrentModificationExceptionMapper.java | 7 +++++-- .../sonia/scm/api/rest/ContextualExceptionMapper.java | 8 ++++---- .../java/sonia/scm/api/v2/NotFoundExceptionMapper.java | 7 +++++-- .../scm/api/v2/resources/ChangesetRootResourceTest.java | 7 +++---- .../sonia/scm/api/v2/resources/DiffResourceTest.java | 4 +++- .../java/sonia/scm/api/v2/resources/DispatcherMock.java | 7 ++++--- .../scm/api/v2/resources/FileHistoryResourceTest.java | 9 +++------ .../scm/api/v2/resources/GroupRootResourceTest.java | 2 +- .../scm/api/v2/resources/ModificationsResourceTest.java | 8 +++----- 10 files changed, 36 insertions(+), 30 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java index 1718d09e9b..65e4426fde 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java @@ -1,13 +1,16 @@ package sonia.scm.api.rest; import sonia.scm.AlreadyExistsException; +import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; +import javax.inject.Inject; import javax.ws.rs.core.Response.Status; import javax.ws.rs.ext.Provider; @Provider public class AlreadyExistsExceptionMapper extends ContextualExceptionMapper { - public AlreadyExistsExceptionMapper() { - super(AlreadyExistsException.class, Status.CONFLICT); + @Inject + public AlreadyExistsExceptionMapper(ExceptionWithContextToErrorDtoMapper mapper) { + super(AlreadyExistsException.class, Status.CONFLICT, mapper); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java index ed2160f8fb..edcb48c91b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java @@ -1,13 +1,16 @@ package sonia.scm.api.rest; import sonia.scm.ConcurrentModificationException; +import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; +import javax.inject.Inject; import javax.ws.rs.core.Response; import javax.ws.rs.ext.Provider; @Provider public class ConcurrentModificationExceptionMapper extends ContextualExceptionMapper { - public ConcurrentModificationExceptionMapper() { - super(ConcurrentModificationException.class, Response.Status.CONFLICT); + @Inject + public ConcurrentModificationExceptionMapper(ExceptionWithContextToErrorDtoMapper mapper) { + super(ConcurrentModificationException.class, Response.Status.CONFLICT, mapper); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java index 7aee62575a..b25af05d50 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java @@ -12,15 +12,15 @@ import javax.ws.rs.ext.ExceptionMapper; public class ContextualExceptionMapper implements ExceptionMapper { - @Inject - private ExceptionWithContextToErrorDtoMapper mapper; - private static final Logger logger = LoggerFactory.getLogger(ContextualExceptionMapper.class); + private ExceptionWithContextToErrorDtoMapper mapper; + private final Response.Status status; private final Class type; - public ContextualExceptionMapper(Class type, Response.Status status) { + public ContextualExceptionMapper(Class type, Response.Status status, ExceptionWithContextToErrorDtoMapper mapper) { + this.mapper = mapper; this.type = type; this.status = status; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java index add41bc3b2..944ec276ce 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java @@ -33,7 +33,9 @@ package sonia.scm.api.v2; import sonia.scm.NotFoundException; import sonia.scm.api.rest.ContextualExceptionMapper; +import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; +import javax.inject.Inject; import javax.ws.rs.core.Response; import javax.ws.rs.ext.Provider; @@ -42,7 +44,8 @@ import javax.ws.rs.ext.Provider; */ @Provider public class NotFoundExceptionMapper extends ContextualExceptionMapper { - public NotFoundExceptionMapper() { - super(NotFoundException.class, Response.Status.NOT_FOUND); + @Inject + public NotFoundExceptionMapper(ExceptionWithContextToErrorDtoMapper mapper) { + super(NotFoundException.class, Response.Status.NOT_FOUND, mapper); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java index 098ec40c3f..c8ba5e1fab 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java @@ -51,7 +51,8 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { public static final String CHANGESET_PATH = "space/repo/changesets/"; public static final String CHANGESET_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + CHANGESET_PATH; - private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); + + private Dispatcher dispatcher; private final URI baseUri = URI.create("/"); private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri); @@ -82,12 +83,10 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { changesetCollectionToDtoMapper = new ChangesetCollectionToDtoMapper(changesetToChangesetDtoMapper, resourceLinks); changesetRootResource = new ChangesetRootResource(serviceFactory, changesetCollectionToDtoMapper, changesetToChangesetDtoMapper); super.changesetRootResource = Providers.of(changesetRootResource); - dispatcher.getRegistry().addSingletonResource(getRepositoryRootResource()); + dispatcher = DispatcherMock.createDispatcher(getRepositoryRootResource()); when(serviceFactory.create(new NamespaceAndName("space", "repo"))).thenReturn(repositoryService); when(serviceFactory.create(any(Repository.class))).thenReturn(repositoryService); when(repositoryService.getRepository()).thenReturn(new Repository("repoId", "git", "space", "repo")); - dispatcher.getProviderFactory().registerProvider(NotFoundExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(AuthorizationExceptionMapper.class); when(repositoryService.getLogCommand()).thenReturn(logCommandBuilder); subjectThreadState.bind(); ThreadContext.bind(subject); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java index f1a1c3b441..516b2ff15c 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java @@ -19,6 +19,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.NotFoundException; import sonia.scm.api.rest.AuthorizationExceptionMapper; +import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.api.v2.NotFoundExceptionMapper; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; @@ -69,7 +70,8 @@ public class DiffResourceTest extends RepositoryTestBase { when(serviceFactory.create(new NamespaceAndName("space", "repo"))).thenReturn(service); when(serviceFactory.create(any(Repository.class))).thenReturn(service); when(service.getRepository()).thenReturn(new Repository("repoId", "git", "space", "repo")); - dispatcher.getProviderFactory().registerProvider(NotFoundExceptionMapper.class); + ExceptionWithContextToErrorDtoMapperImpl mapper = new ExceptionWithContextToErrorDtoMapperImpl(); + dispatcher.getProviderFactory().register(new NotFoundExceptionMapper(mapper)); dispatcher.getProviderFactory().registerProvider(AuthorizationExceptionMapper.class); dispatcher.getProviderFactory().registerProvider(CRLFInjectionExceptionMapper.class); when(service.getDiffCommand()).thenReturn(diffCommandBuilder); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DispatcherMock.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DispatcherMock.java index 7dff9f5ff0..9c34549d34 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DispatcherMock.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DispatcherMock.java @@ -12,10 +12,11 @@ public class DispatcherMock { public static Dispatcher createDispatcher(Object resource) { Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); dispatcher.getRegistry().addSingletonResource(resource); - dispatcher.getProviderFactory().registerProvider(NotFoundExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(AlreadyExistsExceptionMapper.class); + ExceptionWithContextToErrorDtoMapperImpl mapper = new ExceptionWithContextToErrorDtoMapperImpl(); + dispatcher.getProviderFactory().register(new NotFoundExceptionMapper(mapper)); + dispatcher.getProviderFactory().register(new AlreadyExistsExceptionMapper(mapper)); + dispatcher.getProviderFactory().register(new ConcurrentModificationExceptionMapper(mapper)); dispatcher.getProviderFactory().registerProvider(AuthorizationExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(ConcurrentModificationExceptionMapper.class); dispatcher.getProviderFactory().registerProvider(InternalRepositoryExceptionMapper.class); dispatcher.getProviderFactory().registerProvider(ChangePasswordNotAllowedExceptionMapper.class); dispatcher.getProviderFactory().registerProvider(InvalidPasswordExceptionMapper.class); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/FileHistoryResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/FileHistoryResourceTest.java index 2963f5d813..3898ac07e0 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/FileHistoryResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/FileHistoryResourceTest.java @@ -52,7 +52,6 @@ public class FileHistoryResourceTest extends RepositoryTestBase { public static final String FILE_HISTORY_PATH = "space/repo/history/"; public static final String FILE_HISTORY_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + FILE_HISTORY_PATH; - private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); private final URI baseUri = URI.create("/"); private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri); @@ -73,23 +72,21 @@ public class FileHistoryResourceTest extends RepositoryTestBase { private FileHistoryRootResource fileHistoryRootResource; + private Dispatcher dispatcher; private final Subject subject = mock(Subject.class); private final ThreadState subjectThreadState = new SubjectThreadState(subject); - @Before public void prepareEnvironment() { fileHistoryCollectionToDtoMapper = new FileHistoryCollectionToDtoMapper(changesetToChangesetDtoMapper, resourceLinks); fileHistoryRootResource = new FileHistoryRootResource(serviceFactory, fileHistoryCollectionToDtoMapper); super.fileHistoryRootResource = Providers.of(fileHistoryRootResource); - dispatcher.getRegistry().addSingletonResource(getRepositoryRootResource()); + dispatcher = DispatcherMock.createDispatcher(getRepositoryRootResource()); when(serviceFactory.create(new NamespaceAndName("space", "repo"))).thenReturn(service); when(serviceFactory.create(any(Repository.class))).thenReturn(service); when(service.getRepository()).thenReturn(new Repository("repoId", "git", "space", "repo")); - dispatcher.getProviderFactory().registerProvider(NotFoundExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(AuthorizationExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(InternalRepositoryExceptionMapper.class); + ExceptionWithContextToErrorDtoMapperImpl mapper = new ExceptionWithContextToErrorDtoMapperImpl(); when(service.getLogCommand()).thenReturn(logCommandBuilder); subjectThreadState.bind(); ThreadContext.bind(subject); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java index 036579e9dd..f28cf49d03 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java @@ -62,7 +62,7 @@ public class GroupRootResourceTest { private ArgumentCaptor groupCaptor = ArgumentCaptor.forClass(Group.class); @Before - public void prepareEnvironment() throws Exception { + public void prepareEnvironment() { initMocks(this); when(groupManager.create(groupCaptor.capture())).thenAnswer(invocation -> invocation.getArguments()[0]); doNothing().when(groupManager).modify(groupCaptor.capture()); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java index 0377fe0942..b3eacf314e 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java @@ -46,7 +46,8 @@ public class ModificationsResourceTest extends RepositoryTestBase { public static final String MODIFICATIONS_PATH = "space/repo/modifications/"; public static final String MODIFICATIONS_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + MODIFICATIONS_PATH; - private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); + + private Dispatcher dispatcher; private final URI baseUri = URI.create("/"); private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri); @@ -74,13 +75,10 @@ public class ModificationsResourceTest extends RepositoryTestBase { public void prepareEnvironment() throws Exception { modificationsRootResource = new ModificationsRootResource(serviceFactory, modificationsToDtoMapper); super.modificationsRootResource = Providers.of(modificationsRootResource); - dispatcher.getRegistry().addSingletonResource(getRepositoryRootResource()); + dispatcher = DispatcherMock.createDispatcher(getRepositoryRootResource()); when(serviceFactory.create(new NamespaceAndName("space", "repo"))).thenReturn(repositoryService); when(serviceFactory.create(any(Repository.class))).thenReturn(repositoryService); when(repositoryService.getRepository()).thenReturn(new Repository("repoId", "git", "space", "repo")); - dispatcher.getProviderFactory().registerProvider(NotFoundExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(AuthorizationExceptionMapper.class); - dispatcher.getProviderFactory().registerProvider(InternalRepositoryExceptionMapper.class); when(repositoryService.getModificationsCommand()).thenReturn(modificationsCommandBuilder); subjectThreadState.bind(); ThreadContext.bind(subject);