From 73aed0c610d3cd0ff6ebb3b92bff7c9f57b0910a Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 25 Jun 2020 12:28:26 +0200 Subject: [PATCH] inject scmEventBus with constructor injection --- .../api/v2/resources/RepositoryResource.java | 6 ++-- .../resources/RepositoryRootResourceTest.java | 32 +++++++++++++++++-- .../api/v2/resources/RepositoryTestBase.java | 4 ++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 79b25c2a45..f551e08988 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -66,19 +66,21 @@ public class RepositoryResource { private final SingleResourceManagerAdapter adapter; private final RepositoryBasedResourceProvider resourceProvider; private final ScmConfiguration scmConfiguration; + private final ScmEventBus scmEventBus; @Inject public RepositoryResource( RepositoryToRepositoryDtoMapper repositoryToDtoMapper, RepositoryDtoToRepositoryMapper dtoToRepositoryMapper, RepositoryManager manager, RepositoryBasedResourceProvider resourceProvider, - ScmConfiguration scmConfiguration) { + ScmConfiguration scmConfiguration, ScmEventBus scmEventBus) { this.dtoToRepositoryMapper = dtoToRepositoryMapper; this.manager = manager; this.repositoryToDtoMapper = repositoryToDtoMapper; this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class); this.resourceProvider = resourceProvider; this.scmConfiguration = scmConfiguration; + this.scmEventBus = scmEventBus; } /** @@ -230,7 +232,7 @@ public class RepositoryResource { return adapter.update( repoSupplier, existing -> { - ScmEventBus.getInstance().post(new RepositoryRenamedEvent(HandlerEventType.MODIFY, changedRepo, unchangedRepo)); + scmEventBus.post(new RepositoryRenamedEvent(HandlerEventType.MODIFY, changedRepo, unchangedRepo)); return changedRepo; }, changed -> true, diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java index 81f712b728..5c99939fc5 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java @@ -42,10 +42,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import sonia.scm.PageResult; import sonia.scm.config.ScmConfiguration; +import sonia.scm.event.ScmEventBus; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryInitializer; import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryRenamedEvent; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.user.User; @@ -108,6 +110,8 @@ public class RepositoryRootResourceTest extends RepositoryTestBase { private RepositoryInitializer repositoryInitializer; @Mock private ScmConfiguration scmConfiguration; + @Mock + private ScmEventBus scmEventBus; @Captor private ArgumentCaptor> filterCaptor; @@ -127,6 +131,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase { super.dtoToRepositoryMapper = dtoToRepositoryMapper; super.manager = repositoryManager; super.scmConfiguration = scmConfiguration; + super.scmEventBus = scmEventBus; RepositoryCollectionToDtoMapper repositoryCollectionToDtoMapper = new RepositoryCollectionToDtoMapper(repositoryToDtoMapper, resourceLinks); super.repositoryCollectionResource = new RepositoryCollectionResource(repositoryManager, repositoryCollectionToDtoMapper, dtoToRepositoryMapper, resourceLinks, repositoryInitializer); dispatcher.addSingletonResource(getRepositoryRootResource()); @@ -380,15 +385,15 @@ public class RepositoryRootResourceTest extends RepositoryTestBase { } @Test - public void shouldNotRenameRepositoryIfNamespaceStrategyIsNotCustom() throws Exception { - mockRepository("space", "repo"); + public void shouldNotRenameRepositoryNamespaceIfNamespaceStrategyIsNotCustom() throws Exception { + mockRepository("hitchhiker", "heart-of-gold"); when(scmConfiguration.getNamespaceStrategy()).thenReturn("UsernameNamespaceStrategy"); URL url = Resources.getResource("sonia/scm/api/v2/rename-repo.json"); byte[] repository = Resources.toByteArray(url); MockHttpRequest request = MockHttpRequest - .post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/rename") + .post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "hitchhiker/heart-of-gold/rename") .contentType(VndMediaType.REPOSITORY) .content(repository); MockHttpResponse response = new MockHttpResponse(); @@ -433,6 +438,27 @@ public class RepositoryRootResourceTest extends RepositoryTestBase { dispatcher.invoke(request, response); + assertEquals(SC_NO_CONTENT, response.getStatus()); + verify(repositoryManager).modify(any(Repository.class)); + verify(scmEventBus).post(any(RepositoryRenamedEvent.class)); + } + + @Test + public void shouldRenameRepositoryNameIfNamespaceStrategyNotCustom() throws Exception { + mockRepository("space", "repo"); + when(scmConfiguration.getNamespaceStrategy()).thenReturn("UsernameNamespaceStrategy"); + + URL url = Resources.getResource("sonia/scm/api/v2/rename-repo.json"); + byte[] repository = Resources.toByteArray(url); + + MockHttpRequest request = MockHttpRequest + .post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/rename") + .contentType(VndMediaType.REPOSITORY) + .content(repository); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + assertEquals(SC_NO_CONTENT, response.getStatus()); verify(repositoryManager).modify(any(Repository.class)); } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTestBase.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTestBase.java index cd86974c10..ee5d4b2c42 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTestBase.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTestBase.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import sonia.scm.config.ScmConfiguration; +import sonia.scm.event.ScmEventBus; import sonia.scm.repository.RepositoryManager; import static com.google.inject.util.Providers.of; @@ -48,6 +49,7 @@ abstract class RepositoryTestBase { RepositoryCollectionResource repositoryCollectionResource; AnnotateResource annotateResource; ScmConfiguration scmConfiguration; + ScmEventBus scmEventBus; RepositoryRootResource getRepositoryRootResource() { @@ -69,7 +71,7 @@ abstract class RepositoryTestBase { dtoToRepositoryMapper, manager, repositoryBasedResourceProvider, - scmConfiguration)), + scmConfiguration, scmEventBus)), of(repositoryCollectionResource)); } }