From 5c11657858d419fb9e22672a1027ec231df99c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 7 Sep 2020 15:02:59 +0200 Subject: [PATCH 1/2] Validate new namespace on rename --- CHANGELOG.md | 1 + .../repository/DefaultRepositoryManager.java | 1 + .../DefaultRepositoryManagerTest.java | 19 +++++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c862e998c5..418812c8da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Redirection to requested page after login in anonymous mode +- Validate new namespace on repository rename ([#1322](https://github.com/scm-manager/scm-manager/pull/1322)) ## [2.4.1] - 2020-09-01 ### Added diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index c79c8bb865..fa863a83f6 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -261,6 +261,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { throw new ChangeNamespaceNotAllowedException(repository); } changedRepository.setNamespace(newNamespace); + strategy.createNamespace(changedRepository); } managerDaoAdapter.modify( diff --git a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java index 9a49d86bc9..bab8d873f1 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java @@ -46,6 +46,7 @@ import sonia.scm.ManagerTestBase; import sonia.scm.NoChangesMadeException; import sonia.scm.NotFoundException; import sonia.scm.SCMContext; +import sonia.scm.ScmConstraintViolationException; import sonia.scm.config.ScmConfiguration; import sonia.scm.event.ScmEventBus; import sonia.scm.repository.api.HookContext; @@ -63,6 +64,7 @@ import java.util.Map; import java.util.Set; import java.util.Stack; +import static java.util.Collections.emptyList; import static java.util.Collections.emptySet; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.hasProperty; @@ -77,6 +79,7 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; @@ -400,12 +403,24 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase { @Test public void shouldThrowNoChangesMadeException() { - Repository repository = new Repository("1", "hg", "space", "x"); + Repository repository = createTestRepository(); RepositoryManager repoManager = createManager(); thrown.expect(NoChangesMadeException.class); - repoManager.rename(repository, "space", "x"); + repoManager.rename(repository, "default_namespace", "HeartOfGold"); + } + + @Test + public void shouldThrowValidationException() { + Repository repository = createTestRepository(); + RepositoryManager repoManager = createManager(); + when(namespaceStrategy.canBeChanged()).thenReturn(true); + when(namespaceStrategy.createNamespace(argThat(r -> r.getNamespace().equals("invalid")))).thenThrow(ScmConstraintViolationException.class); + + thrown.expect(ScmConstraintViolationException.class); + + repoManager.rename(repository, "invalid", "splendid"); } @Test From 2db9d55ed989a56ea02e1e98784514bebcec34f1 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Thu, 10 Sep 2020 09:30:30 +0200 Subject: [PATCH 2/2] set created namespace on rename --- .../java/sonia/scm/repository/DefaultRepositoryManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index fa863a83f6..4886e81ea1 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -261,7 +261,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { throw new ChangeNamespaceNotAllowedException(repository); } changedRepository.setNamespace(newNamespace); - strategy.createNamespace(changedRepository); + changedRepository.setNamespace(strategy.createNamespace(changedRepository)); } managerDaoAdapter.modify(