inject scmEventBus with constructor injection

This commit is contained in:
Eduard Heimbuch
2020-06-25 12:28:26 +02:00
parent cd8a9873a9
commit 73aed0c610
3 changed files with 36 additions and 6 deletions

View File

@@ -66,19 +66,21 @@ public class RepositoryResource {
private final SingleResourceManagerAdapter<Repository, RepositoryDto> adapter; private final SingleResourceManagerAdapter<Repository, RepositoryDto> adapter;
private final RepositoryBasedResourceProvider resourceProvider; private final RepositoryBasedResourceProvider resourceProvider;
private final ScmConfiguration scmConfiguration; private final ScmConfiguration scmConfiguration;
private final ScmEventBus scmEventBus;
@Inject @Inject
public RepositoryResource( public RepositoryResource(
RepositoryToRepositoryDtoMapper repositoryToDtoMapper, RepositoryToRepositoryDtoMapper repositoryToDtoMapper,
RepositoryDtoToRepositoryMapper dtoToRepositoryMapper, RepositoryManager manager, RepositoryDtoToRepositoryMapper dtoToRepositoryMapper, RepositoryManager manager,
RepositoryBasedResourceProvider resourceProvider, RepositoryBasedResourceProvider resourceProvider,
ScmConfiguration scmConfiguration) { ScmConfiguration scmConfiguration, ScmEventBus scmEventBus) {
this.dtoToRepositoryMapper = dtoToRepositoryMapper; this.dtoToRepositoryMapper = dtoToRepositoryMapper;
this.manager = manager; this.manager = manager;
this.repositoryToDtoMapper = repositoryToDtoMapper; this.repositoryToDtoMapper = repositoryToDtoMapper;
this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class); this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class);
this.resourceProvider = resourceProvider; this.resourceProvider = resourceProvider;
this.scmConfiguration = scmConfiguration; this.scmConfiguration = scmConfiguration;
this.scmEventBus = scmEventBus;
} }
/** /**
@@ -230,7 +232,7 @@ public class RepositoryResource {
return adapter.update( return adapter.update(
repoSupplier, repoSupplier,
existing -> { existing -> {
ScmEventBus.getInstance().post(new RepositoryRenamedEvent(HandlerEventType.MODIFY, changedRepo, unchangedRepo)); scmEventBus.post(new RepositoryRenamedEvent(HandlerEventType.MODIFY, changedRepo, unchangedRepo));
return changedRepo; return changedRepo;
}, },
changed -> true, changed -> true,

View File

@@ -42,10 +42,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import sonia.scm.PageResult; import sonia.scm.PageResult;
import sonia.scm.config.ScmConfiguration; import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryInitializer; import sonia.scm.repository.RepositoryInitializer;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryRenamedEvent;
import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.user.User; import sonia.scm.user.User;
@@ -108,6 +110,8 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
private RepositoryInitializer repositoryInitializer; private RepositoryInitializer repositoryInitializer;
@Mock @Mock
private ScmConfiguration scmConfiguration; private ScmConfiguration scmConfiguration;
@Mock
private ScmEventBus scmEventBus;
@Captor @Captor
private ArgumentCaptor<Predicate<Repository>> filterCaptor; private ArgumentCaptor<Predicate<Repository>> filterCaptor;
@@ -127,6 +131,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
super.dtoToRepositoryMapper = dtoToRepositoryMapper; super.dtoToRepositoryMapper = dtoToRepositoryMapper;
super.manager = repositoryManager; super.manager = repositoryManager;
super.scmConfiguration = scmConfiguration; super.scmConfiguration = scmConfiguration;
super.scmEventBus = scmEventBus;
RepositoryCollectionToDtoMapper repositoryCollectionToDtoMapper = new RepositoryCollectionToDtoMapper(repositoryToDtoMapper, resourceLinks); RepositoryCollectionToDtoMapper repositoryCollectionToDtoMapper = new RepositoryCollectionToDtoMapper(repositoryToDtoMapper, resourceLinks);
super.repositoryCollectionResource = new RepositoryCollectionResource(repositoryManager, repositoryCollectionToDtoMapper, dtoToRepositoryMapper, resourceLinks, repositoryInitializer); super.repositoryCollectionResource = new RepositoryCollectionResource(repositoryManager, repositoryCollectionToDtoMapper, dtoToRepositoryMapper, resourceLinks, repositoryInitializer);
dispatcher.addSingletonResource(getRepositoryRootResource()); dispatcher.addSingletonResource(getRepositoryRootResource());
@@ -380,15 +385,15 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
} }
@Test @Test
public void shouldNotRenameRepositoryIfNamespaceStrategyIsNotCustom() throws Exception { public void shouldNotRenameRepositoryNamespaceIfNamespaceStrategyIsNotCustom() throws Exception {
mockRepository("space", "repo"); mockRepository("hitchhiker", "heart-of-gold");
when(scmConfiguration.getNamespaceStrategy()).thenReturn("UsernameNamespaceStrategy"); when(scmConfiguration.getNamespaceStrategy()).thenReturn("UsernameNamespaceStrategy");
URL url = Resources.getResource("sonia/scm/api/v2/rename-repo.json"); URL url = Resources.getResource("sonia/scm/api/v2/rename-repo.json");
byte[] repository = Resources.toByteArray(url); byte[] repository = Resources.toByteArray(url);
MockHttpRequest request = MockHttpRequest MockHttpRequest request = MockHttpRequest
.post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/rename") .post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "hitchhiker/heart-of-gold/rename")
.contentType(VndMediaType.REPOSITORY) .contentType(VndMediaType.REPOSITORY)
.content(repository); .content(repository);
MockHttpResponse response = new MockHttpResponse(); MockHttpResponse response = new MockHttpResponse();
@@ -433,6 +438,27 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
dispatcher.invoke(request, response); 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()); assertEquals(SC_NO_CONTENT, response.getStatus());
verify(repositoryManager).modify(any(Repository.class)); verify(repositoryManager).modify(any(Repository.class));
} }

View File

@@ -25,6 +25,7 @@
package sonia.scm.api.v2.resources; package sonia.scm.api.v2.resources;
import sonia.scm.config.ScmConfiguration; import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import static com.google.inject.util.Providers.of; import static com.google.inject.util.Providers.of;
@@ -48,6 +49,7 @@ abstract class RepositoryTestBase {
RepositoryCollectionResource repositoryCollectionResource; RepositoryCollectionResource repositoryCollectionResource;
AnnotateResource annotateResource; AnnotateResource annotateResource;
ScmConfiguration scmConfiguration; ScmConfiguration scmConfiguration;
ScmEventBus scmEventBus;
RepositoryRootResource getRepositoryRootResource() { RepositoryRootResource getRepositoryRootResource() {
@@ -69,7 +71,7 @@ abstract class RepositoryTestBase {
dtoToRepositoryMapper, dtoToRepositoryMapper,
manager, manager,
repositoryBasedResourceProvider, repositoryBasedResourceProvider,
scmConfiguration)), scmConfiguration, scmEventBus)),
of(repositoryCollectionResource)); of(repositoryCollectionResource));
} }
} }