From 097237734ecfa0d0ec19a16c59c58a84e43b8bf8 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 10 Dec 2020 10:36:08 +0100 Subject: [PATCH] Append import bundle link to repository type if unbundle command is supported --- ...positoryTypeToRepositoryTypeDtoMapper.java | 9 +++++-- .../scm/api/v2/resources/ResourceLinks.java | 4 +++ ...toryTypeToRepositoryTypeDtoMapperTest.java | 27 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java index 7822589dd9..de58b7e153 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java @@ -47,8 +47,13 @@ public abstract class RepositoryTypeToRepositoryTypeDtoMapper extends BaseMapper void appendLinks(RepositoryType repositoryType, @MappingTarget RepositoryTypeDto target) { Links.Builder linksBuilder = linkingTo().self(resourceLinks.repositoryType().self(repositoryType.getName())); - if (RepositoryPermissions.create().isPermitted() && repositoryType.getSupportedCommands().contains(Command.PULL)) { - linksBuilder.array(Link.linkBuilder("import", resourceLinks.repository().importFromUrl(repositoryType.getName())).withName("url").build()); + if (RepositoryPermissions.create().isPermitted()) { + if (repositoryType.getSupportedCommands().contains(Command.PULL)) { + linksBuilder.array(Link.linkBuilder("import", resourceLinks.repository().importFromUrl(repositoryType.getName())).withName("url").build()); + } + if (repositoryType.getSupportedCommands().contains(Command.UNBUNDLE)) { + linksBuilder.array(Link.linkBuilder("import", resourceLinks.repository().importFromBundle(repositoryType.getName())).withName("bundle").build()); + } } target.add(linksBuilder.build()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java index 553a83ee2e..6aade4f134 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java @@ -360,6 +360,10 @@ class ResourceLinks { String importFromUrl(String type) { return repositoryImportLinkBuilder.method("getRepositoryImportResource").parameters().method("importFromUrl").parameters(type).href(); } + + String importFromBundle(String type) { + return repositoryImportLinkBuilder.method("getRepositoryImportResource").parameters().method("importFromBundle").parameters(type).href(); + } } RepositoryCollectionLinks repositoryCollection() { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapperTest.java index ea49c9a933..0041ef1332 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapperTest.java @@ -112,4 +112,31 @@ public class RepositoryTypeToRepositoryTypeDtoMapperTest { RepositoryTypeDto dto = mapper.map(type); assertFalse(dto.getLinks().getLinkBy("import").isPresent()); } + + @Test + public void shouldAppendImportFromBundleLink() { + RepositoryType type = new RepositoryType("hk", "Hitchhiker", ImmutableSet.of(Command.UNBUNDLE)); + when(subject.isPermitted("repository:create")).thenReturn(true); + + RepositoryTypeDto dto = mapper.map(type); + assertEquals( + "https://scm-manager.org/scm/v2/repositories/import/hk/bundle", + dto.getLinks().getLinkBy("import").get().getHref() + ); + } + + @Test + public void shouldNotAppendImportFromBundleLinkIfCommandNotSupported() { + when(subject.isPermitted("repository:create")).thenReturn(true); + RepositoryTypeDto dto = mapper.map(type); + assertFalse(dto.getLinks().getLinkBy("import").isPresent()); + } + + @Test + public void shouldNotAppendImportFromBundleLinkIfNotPermitted() { + RepositoryType type = new RepositoryType("hk", "Hitchhiker", ImmutableSet.of(Command.UNBUNDLE)); + + RepositoryTypeDto dto = mapper.map(type); + assertFalse(dto.getLinks().getLinkBy("import").isPresent()); + } }