From 14611d89d0e765b358182ed50d0136711471dc87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 7 Aug 2018 15:15:12 +0200 Subject: [PATCH 01/13] Add branch collection endpoint --- .../api/BranchesCommandBuilder.java | 11 +--- .../main/java/sonia/scm/web/VndMediaType.java | 2 + .../resources/BranchCollectionResource.java | 61 ++++++++++++++++--- .../BranchCollectionToDtoMapper.java | 46 ++++++++++++++ .../sonia/scm/api/v2/resources/BranchDto.java | 19 ++++++ .../scm/api/v2/resources/BranchResource.java | 30 +++++++++ .../api/v2/resources/BranchRootResource.java | 9 ++- .../v2/resources/BranchToBranchDtoMapper.java | 30 +++++++++ .../scm/api/v2/resources/MapperModule.java | 2 + .../api/v2/resources/RepositoryResource.java | 2 +- .../scm/api/v2/resources/ResourceLinks.java | 18 ++++++ 11 files changed, 213 insertions(+), 17 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java index 3deaf491d8..784c9534fd 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java @@ -35,10 +35,8 @@ package sonia.scm.repository.api; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.repository.Branch; @@ -49,10 +47,10 @@ import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.BlameCommand; import sonia.scm.repository.spi.BranchesCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * The branches command list all repository branches.
*
@@ -139,10 +137,7 @@ public final class BranchesCommandBuilder branches = getBranchesFromCommand(); - if (branches != null) - { - cache.put(key, branches); - } + cache.put(key, branches); } else if (logger.isDebugEnabled()) { diff --git a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java index 7c764685f1..afac955f21 100644 --- a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java +++ b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java @@ -15,9 +15,11 @@ public class VndMediaType { public static final String USER = PREFIX + "user" + SUFFIX; public static final String GROUP = PREFIX + "group" + SUFFIX; public static final String REPOSITORY = PREFIX + "repository" + SUFFIX; + public static final String BRANCH = PREFIX + "branch" + SUFFIX; public static final String USER_COLLECTION = PREFIX + "userCollection" + SUFFIX; public static final String GROUP_COLLECTION = PREFIX + "groupCollection" + SUFFIX; public static final String REPOSITORY_COLLECTION = PREFIX + "repositoryCollection" + SUFFIX; + public static final String BRANCH_COLLECTION = PREFIX + "branchCollection" + SUFFIX; public static final String CONFIG = PREFIX + "config" + SUFFIX; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java index d64016b475..069f72a0c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java @@ -1,18 +1,65 @@ package sonia.scm.api.v2.resources; -import javax.ws.rs.DefaultValue; +import com.webcohesion.enunciate.metadata.rs.ResponseCode; +import com.webcohesion.enunciate.metadata.rs.StatusCodes; +import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.repository.Branches; +import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryNotFoundException; +import sonia.scm.repository.api.CommandNotSupportedException; +import sonia.scm.repository.api.RepositoryService; +import sonia.scm.repository.api.RepositoryServiceFactory; +import sonia.scm.util.IOUtil; +import sonia.scm.web.VndMediaType; + +import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; -import javax.ws.rs.QueryParam; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.io.IOException; public class BranchCollectionResource { + + private final RepositoryManager manager; + private final RepositoryServiceFactory servicefactory; + private final BranchCollectionToDtoMapper branchCollectionToDtoMapper; + + @Inject + public BranchCollectionResource(RepositoryManager manager, RepositoryServiceFactory servicefactory, BranchCollectionToDtoMapper branchCollectionToDtoMapper) { + this.manager = manager; + this.servicefactory = servicefactory; + this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; + } + @GET @Path("") - public Response getAll(@DefaultValue("0") @QueryParam("page") int page, - @DefaultValue("10") @QueryParam("pageSize") int pageSize, - @QueryParam("sortBy") String sortBy, - @DefaultValue("false") @QueryParam("desc") boolean desc) { - throw new UnsupportedOperationException(); + @Produces(VndMediaType.BRANCH_COLLECTION) + @TypeHint(CollectionDto.class) + @StatusCodes({ + @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), + @ResponseCode(code = 403, condition = "not authorized, the current user does not have the \"group\" privilege"), + @ResponseCode(code = 500, condition = "internal server error") + }) + public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { + RepositoryService repositoryService; + try { + repositoryService = servicefactory.create(new NamespaceAndName(namespace, name)); + } catch (RepositoryNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + try { + Branches branches = repositoryService.getBranchesCommand().getBranches(); + return Response.ok(branchCollectionToDtoMapper.map(namespace, name, branches.getBranches())).build(); + } catch (CommandNotSupportedException ex) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } finally { + IOUtil.close(repositoryService); + } } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java new file mode 100644 index 0000000000..9e574b3a7b --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionToDtoMapper.java @@ -0,0 +1,46 @@ +package sonia.scm.api.v2.resources; + +import com.google.inject.Inject; +import de.otto.edison.hal.Embedded; +import de.otto.edison.hal.HalRepresentation; +import de.otto.edison.hal.Links; +import sonia.scm.repository.Branch; +import sonia.scm.repository.NamespaceAndName; + +import java.util.Collection; +import java.util.List; + +import static de.otto.edison.hal.Embedded.embeddedBuilder; +import static de.otto.edison.hal.Links.linkingTo; +import static java.util.stream.Collectors.toList; + +public class BranchCollectionToDtoMapper { + + private final ResourceLinks resourceLinks; + private final BranchToBranchDtoMapper branchToDtoMapper; + + @Inject + public BranchCollectionToDtoMapper(BranchToBranchDtoMapper branchToDtoMapper, ResourceLinks resourceLinks) { + this.resourceLinks = resourceLinks; + this.branchToDtoMapper = branchToDtoMapper; + } + + public HalRepresentation map(String namespace, String name, Collection branches) { + List dtos = branches.stream().map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name))).collect(toList()); + return new HalRepresentation(createLinks(namespace, name), embedDtos(dtos)); + } + + private Links createLinks(String namespace, String name) { + String baseUrl = resourceLinks.branchCollection().self(namespace, name); + + Links.Builder linksBuilder = linkingTo() + .with(Links.linkingTo().self(baseUrl).build()); + return linksBuilder.build(); + } + + private Embedded embedDtos(List dtos) { + return embeddedBuilder() + .with("branches", dtos) + .build(); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java new file mode 100644 index 0000000000..f5bdc850ab --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java @@ -0,0 +1,19 @@ +package sonia.scm.api.v2.resources; + +import de.otto.edison.hal.HalRepresentation; +import de.otto.edison.hal.Links; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter @Setter @NoArgsConstructor +public class BranchDto extends HalRepresentation { + + private String name; + private String revision; + + @Override + protected HalRepresentation add(Links links) { + return super.add(links); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java new file mode 100644 index 0000000000..f76363f88e --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java @@ -0,0 +1,30 @@ +package sonia.scm.api.v2.resources; + +import com.webcohesion.enunciate.metadata.rs.ResponseCode; +import com.webcohesion.enunciate.metadata.rs.StatusCodes; +import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.web.VndMediaType; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; + +public class BranchResource { + + @GET + @Path("") + @Produces(VndMediaType.BRANCH) + @TypeHint(BranchDto.class) + @StatusCodes({ + @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), + @ResponseCode(code = 403, condition = "not authorized, the current user has no privileges to read the branch"), + @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available"), + @ResponseCode(code = 500, condition = "internal server error") + }) + public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branch) { + return null; + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index ee50fdcd1e..a656aa36a4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -7,10 +7,17 @@ import javax.ws.rs.Path; public class BranchRootResource { private final Provider branchCollectionResource; + private final Provider branchResource; @Inject - public BranchRootResource(Provider branchCollectionResource) { + public BranchRootResource(Provider branchCollectionResource, Provider branchResource) { this.branchCollectionResource = branchCollectionResource; + this.branchResource = branchResource; + } + + @Path("{branch}") + public BranchResource getBranchResource() { + return branchResource.get(); } @Path("") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java new file mode 100644 index 0000000000..edced65c44 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java @@ -0,0 +1,30 @@ +package sonia.scm.api.v2.resources; + +import de.otto.edison.hal.Links; +import org.mapstruct.AfterMapping; +import org.mapstruct.Context; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import sonia.scm.repository.Branch; +import sonia.scm.repository.NamespaceAndName; + +import javax.inject.Inject; + +import static de.otto.edison.hal.Links.linkingTo; + +@Mapper +public abstract class BranchToBranchDtoMapper { + + @Inject + private ResourceLinks resourceLinks; + + @Mapping(target = "attributes", ignore = true) // We do not map HAL attributes + public abstract BranchDto map(Branch branch, @Context NamespaceAndName namespaceAndName); + + @AfterMapping + void appendLinks(@MappingTarget BranchDto target, @Context NamespaceAndName namespaceAndName) { + Links.Builder linksBuilder = linkingTo().self(resourceLinks.branch().self(namespaceAndName, target.getName())); + target.add(linksBuilder.build()); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java index 69430bf43b..2779ae4d5a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java @@ -21,6 +21,8 @@ public class MapperModule extends AbstractModule { bind(RepositoryToRepositoryDtoMapper.class).to(Mappers.getMapper(RepositoryToRepositoryDtoMapper.class).getClass()); bind(RepositoryDtoToRepositoryMapper.class).to(Mappers.getMapper(RepositoryDtoToRepositoryMapper.class).getClass()); + bind(BranchToBranchDtoMapper.class).to(Mappers.getMapper(BranchToBranchDtoMapper.class).getClass()); + bind(UriInfoStore.class).in(ServletScopes.REQUEST); } } 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 255f08f295..8fdaa00a19 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 @@ -136,7 +136,7 @@ public class RepositoryResource { } @Path("branches/") - public BranchRootResource branches() { + public BranchRootResource branches(@PathParam("namespace") String namespace, @PathParam("name") String name) { return branchRootResource.get(); } 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 d02747d2af..31e7d45007 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 @@ -1,5 +1,7 @@ package sonia.scm.api.v2.resources; +import sonia.scm.repository.NamespaceAndName; + import javax.inject.Inject; import javax.ws.rs.core.UriInfo; @@ -181,6 +183,22 @@ class ResourceLinks { } } + public BranchLinks branch() { + return new BranchLinks(uriInfoStore.get()); + } + + static class BranchLinks { + private final LinkBuilder branchLinkBuilder; + + BranchLinks(UriInfo uriInfo) { + branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class, BranchResource.class); + } + + String self(NamespaceAndName namespaceAndName, String branch) { + return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("getBranchResource").parameters().method("get").parameters(branch).href(); + } + } + public BranchCollectionLinks branchCollection() { return new BranchCollectionLinks(uriInfoStore.get()); } From 42aac06f0a1c76c4459ccca16702ddb4a34eeeef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 7 Aug 2018 16:15:52 +0200 Subject: [PATCH 02/13] Add branch endpoint --- .../scm/api/v2/resources/BranchResource.java | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java index f76363f88e..94de2984c6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java @@ -1,8 +1,18 @@ package sonia.scm.api.v2.resources; +import com.google.inject.Inject; import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.repository.Branches; +import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryNotFoundException; +import sonia.scm.repository.api.CommandNotSupportedException; +import sonia.scm.repository.api.RepositoryService; +import sonia.scm.repository.api.RepositoryServiceFactory; +import sonia.scm.util.IOUtil; import sonia.scm.web.VndMediaType; import javax.ws.rs.GET; @@ -10,9 +20,21 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.io.IOException; public class BranchResource { + private final RepositoryManager manager; + private final RepositoryServiceFactory servicefactory; + private final BranchToBranchDtoMapper branchToDtoMapper; + + @Inject + public BranchResource(RepositoryManager manager, RepositoryServiceFactory servicefactory, BranchToBranchDtoMapper branchToDtoMapper) { + this.manager = manager; + this.servicefactory = servicefactory; + this.branchToDtoMapper = branchToDtoMapper; + } + @GET @Path("") @Produces(VndMediaType.BRANCH) @@ -24,7 +46,28 @@ public class BranchResource { @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available"), @ResponseCode(code = 500, condition = "internal server error") }) - public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branch) { - return null; + public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { + RepositoryService repositoryService; + try { + repositoryService = servicefactory.create(new NamespaceAndName(namespace, name)); + } catch (RepositoryNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + try { + Branches branches = repositoryService.getBranchesCommand().getBranches(); + return branches.getBranches() + .stream() + .filter(branch -> branchName.equals(branch.getName())) + .findFirst() + .map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name))) + .map(Response::ok) + .orElse(Response.status(Response.Status.NOT_FOUND)) + .build(); + } catch (CommandNotSupportedException ex) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } finally { + IOUtil.close(repositoryService); + } } } From bf0c559a7dfc83d5d4a68a43c3acc38a6eabe503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 7 Aug 2018 16:52:40 +0200 Subject: [PATCH 03/13] Use try-with-resources --- .../resources/BranchCollectionResource.java | 19 ++++--------------- .../scm/api/v2/resources/BranchResource.java | 19 ++++--------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java index 069f72a0c9..26a7d026bc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java @@ -6,12 +6,10 @@ import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.repository.Branches; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.api.CommandNotSupportedException; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import sonia.scm.util.IOUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; @@ -24,13 +22,11 @@ import java.io.IOException; public class BranchCollectionResource { - private final RepositoryManager manager; private final RepositoryServiceFactory servicefactory; private final BranchCollectionToDtoMapper branchCollectionToDtoMapper; @Inject - public BranchCollectionResource(RepositoryManager manager, RepositoryServiceFactory servicefactory, BranchCollectionToDtoMapper branchCollectionToDtoMapper) { - this.manager = manager; + public BranchCollectionResource(RepositoryServiceFactory servicefactory, BranchCollectionToDtoMapper branchCollectionToDtoMapper) { this.servicefactory = servicefactory; this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; } @@ -46,20 +42,13 @@ public class BranchCollectionResource { @ResponseCode(code = 500, condition = "internal server error") }) public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { - RepositoryService repositoryService; - try { - repositoryService = servicefactory.create(new NamespaceAndName(namespace, name)); - } catch (RepositoryNotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - - try { + try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); return Response.ok(branchCollectionToDtoMapper.map(namespace, name, branches.getBranches())).build(); } catch (CommandNotSupportedException ex) { return Response.status(Response.Status.BAD_REQUEST).build(); - } finally { - IOUtil.close(repositoryService); + } catch (RepositoryNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); } } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java index 94de2984c6..f7f2e4d246 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java @@ -7,12 +7,10 @@ import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.repository.Branches; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.api.CommandNotSupportedException; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import sonia.scm.util.IOUtil; import sonia.scm.web.VndMediaType; import javax.ws.rs.GET; @@ -24,13 +22,11 @@ import java.io.IOException; public class BranchResource { - private final RepositoryManager manager; private final RepositoryServiceFactory servicefactory; private final BranchToBranchDtoMapper branchToDtoMapper; @Inject - public BranchResource(RepositoryManager manager, RepositoryServiceFactory servicefactory, BranchToBranchDtoMapper branchToDtoMapper) { - this.manager = manager; + public BranchResource(RepositoryServiceFactory servicefactory, BranchToBranchDtoMapper branchToDtoMapper) { this.servicefactory = servicefactory; this.branchToDtoMapper = branchToDtoMapper; } @@ -47,14 +43,7 @@ public class BranchResource { @ResponseCode(code = 500, condition = "internal server error") }) public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { - RepositoryService repositoryService; - try { - repositoryService = servicefactory.create(new NamespaceAndName(namespace, name)); - } catch (RepositoryNotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - - try { + try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); return branches.getBranches() .stream() @@ -66,8 +55,8 @@ public class BranchResource { .build(); } catch (CommandNotSupportedException ex) { return Response.status(Response.Status.BAD_REQUEST).build(); - } finally { - IOUtil.close(repositoryService); + } catch (RepositoryNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); } } } From 8dd7aafecdce4a39e54e6fd2dc2798d6d5b2181f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 7 Aug 2018 16:59:44 +0200 Subject: [PATCH 04/13] Add missing documentation --- .../api/v2/resources/BranchCollectionResource.java | 11 +++++++++++ .../sonia/scm/api/v2/resources/BranchResource.java | 13 ++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java index 26a7d026bc..daac7fdc28 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java @@ -31,14 +31,25 @@ public class BranchCollectionResource { this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; } + /** + * Returns the branches for a repository. + * + * Note: This method requires "repository" privilege. + * + * @param namespace the namespace of the repository + * @param name the name of the repository + * + */ @GET @Path("") @Produces(VndMediaType.BRANCH_COLLECTION) @TypeHint(CollectionDto.class) @StatusCodes({ @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 400, condition = "branches not supported for given repository"), @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), @ResponseCode(code = 403, condition = "not authorized, the current user does not have the \"group\" privilege"), + @ResponseCode(code = 404, condition = "not found, no repository found for the given namespace and name"), @ResponseCode(code = 500, condition = "internal server error") }) public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java index f7f2e4d246..9d28fbb31c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java @@ -31,15 +31,26 @@ public class BranchResource { this.branchToDtoMapper = branchToDtoMapper; } + /** + * Returns a branch for a repository. + * + * Note: This method requires "repository" privilege. + * + * @param namespace the namespace of the repository + * @param name the name of the repository + * @param branchName the name of the branch + * + */ @GET @Path("") @Produces(VndMediaType.BRANCH) @TypeHint(BranchDto.class) @StatusCodes({ @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 400, condition = "branches not supported for given repository"), @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), @ResponseCode(code = 403, condition = "not authorized, the current user has no privileges to read the branch"), - @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available"), + @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available or repository not found"), @ResponseCode(code = 500, condition = "internal server error") }) public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { From 47b55414f0368aa31f52c4b09d40c5a261171792 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 7 Aug 2018 17:06:33 +0200 Subject: [PATCH 05/13] Add missing test --- .../java/sonia/scm/api/v2/resources/ResourceLinksTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java index b850a4b4c6..a9be9f7450 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java @@ -4,6 +4,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; +import sonia.scm.repository.NamespaceAndName; import javax.ws.rs.core.UriInfo; import java.net.URI; @@ -114,6 +115,12 @@ public class ResourceLinksTest { assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/branches/", url); } + @Test + public void shouldCreateCorrectBranchUrl() { + String url = resourceLinks.branch().self(new NamespaceAndName("space", "name"), "master"); + assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master", url); + } + @Test public void shouldCreateCorrectChangesetCollectionUrl() { String url = resourceLinks.changesetCollection().self("space", "repo"); From 67278582e394c926b18527038a128071486da73d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 8 Aug 2018 09:20:08 +0200 Subject: [PATCH 06/13] Update to Mockito v2 --- pom.xml | 4 +- .../scm/net/ahc/AdvancedHttpClientTest.java | 4 +- .../scm/net/ahc/AdvancedHttpRequestTest.java | 4 +- .../ahc/AdvancedHttpRequestWithBodyTest.java | 4 +- .../scm/net/ahc/AdvancedHttpResponseTest.java | 4 +- .../scm/net/ahc/BaseHttpRequestTest.java | 4 +- .../scm/net/ahc/ByteSourceContentTest.java | 4 +- .../sonia/scm/net/ahc/FileContentTest.java | 2 +- .../scm/net/ahc/FormContentBuilderTest.java | 4 +- .../sonia/scm/net/ahc/RawContentTest.java | 4 +- .../scm/repository/RepositoryUtilTest.java | 2 +- .../scm/repository/api/HookContextTest.java | 22 ++++++---- .../security/DefaultCipherHandlerTest.java | 4 +- .../scm/security/SyncingRealmHelperTest.java | 2 +- .../sonia/scm/web/UserAgentParserTest.java | 2 +- .../web/filter/AuthenticationFilterTest.java | 2 +- .../sonia/scm/repository/GitGcTaskTest.java | 27 +++++++------ .../repository/GitRepositoryHandlerTest.java | 2 +- .../api/GitHookBranchProviderTest.java | 4 +- .../api/GitHookTagProviderTest.java | 4 +- .../scm/web/GitPermissionFilterTest.java | 27 +++++++------ .../scm/web/GitRepositoryResolverTest.java | 17 ++++---- .../scm/web/lfs/LfsBlobStoreFactoryTest.java | 2 +- .../web/lfs/LfsStoreRemoveListenerTest.java | 2 +- .../repository/HgRepositoryHandlerTest.java | 2 +- .../repository/api/HgHookTagProviderTest.java | 4 +- .../sonia/scm/web/HgPermissionFilterTest.java | 4 +- .../sonia/scm/legacy/LegacyRealmTest.java | 2 +- .../repository/SvnRepositoryHandlerTest.java | 2 +- scm-test/pom.xml | 2 +- .../AbstractManagerResourceTest.java | 2 +- .../v2/FieldContainerResponseFilterTest.java | 3 +- .../v2/JsonMarshallingResponseFilterTest.java | 3 +- .../resources/AuthenticationResourceTest.java | 2 +- .../scm/filter/AdminSecurityFilterTest.java | 4 +- .../java/sonia/scm/filter/MDCFilterTest.java | 29 ++++++++------ .../sonia/scm/filter/SecurityFilterTest.java | 2 +- .../ahc/DefaultAdvancedHttpClientTest.java | 2 +- .../ahc/DefaultAdvancedHttpResponseTest.java | 2 +- .../DefaultUberWebResourceLoaderTest.java | 26 +++++------- .../plugin/MultiParentClassLoaderTest.java | 2 +- .../DefaultRepositoryManagerPerfTest.java | 2 +- .../AbstractResourceManagerTest.java | 2 +- .../resources/DefaultResourceManagerTest.java | 16 ++++---- .../scm/schedule/InjectionEnabledJobTest.java | 4 +- .../scm/schedule/QuartzSchedulerTest.java | 4 +- .../sonia/scm/schedule/QuartzTaskTest.java | 4 +- .../sonia/scm/security/BearerRealmTest.java | 40 +++++++------------ .../DefaultAuthorizationCollectorTest.java | 2 +- .../sonia/scm/security/DefaultRealmTest.java | 2 +- .../security/JwtAccessTokenBuilderTest.java | 4 +- .../security/JwtAccessTokenResolverTest.java | 4 +- .../scm/security/SecureKeyResolverTest.java | 2 +- .../scm/security/SecurityRequestsTest.java | 2 +- .../security/XsrfAccessTokenEnricherTest.java | 17 ++++---- .../XsrfTokenClaimsValidatorTest.java | 4 +- .../sonia/scm/user/UserEventHackTest.java | 2 +- .../scm/web/BasicWebTokenGeneratorTest.java | 2 +- .../scm/web/BearerWebTokenGeneratorTest.java | 4 +- .../CookieBearerWebTokenGeneratorTest.java | 2 +- 60 files changed, 184 insertions(+), 185 deletions(-) diff --git a/pom.xml b/pom.xml index af38d5175a..4493dcfd04 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ org.mockito - mockito-all + mockito-core ${mokito.version} test @@ -543,7 +543,7 @@ - 1.10.19 + 2.10.0 1.3 4.12 diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpClientTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpClientTest.java index 59549c24dd..f8f0a00df2 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpClientTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpClientTest.java @@ -36,7 +36,7 @@ import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -105,4 +105,4 @@ public class AdvancedHttpClientTest { assertEquals(URL, request.getUrl()); assertEquals("PROPFIND", request.getMethod()); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestTest.java index 5b2d675e97..08023f3dea 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestTest.java @@ -35,7 +35,7 @@ import org.junit.Test; import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -54,4 +54,4 @@ public class AdvancedHttpRequestTest { assertEquals(AdvancedHttpRequest.class, ahr.self().getClass()); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestWithBodyTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestWithBodyTest.java index 5a7c55a46d..b7fa9ae84a 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestWithBodyTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpRequestWithBodyTest.java @@ -46,7 +46,7 @@ import org.junit.Rule; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -166,4 +166,4 @@ public class AdvancedHttpRequestWithBodyTest { assertEquals(AdvancedHttpRequestWithBody.class, request.self().getClass()); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpResponseTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpResponseTest.java index 6fc149f36c..0d67d0e931 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpResponseTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/AdvancedHttpResponseTest.java @@ -44,7 +44,7 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -211,4 +211,4 @@ public class AdvancedHttpResponseTest { assertFalse(response.isSuccessful()); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/BaseHttpRequestTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/BaseHttpRequestTest.java index 9b3ce995f5..aa735aa2a5 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/BaseHttpRequestTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/BaseHttpRequestTest.java @@ -42,7 +42,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -139,4 +139,4 @@ public class BaseHttpRequestTest { assertThat(request.queryStrings("a", i1), instanceOf(AdvancedHttpRequest.class)); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/ByteSourceContentTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/ByteSourceContentTest.java index 24487f6582..ad0b51b7e6 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/ByteSourceContentTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/ByteSourceContentTest.java @@ -40,7 +40,7 @@ import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -71,4 +71,4 @@ public class ByteSourceContentTest { assertEquals("abc", baos.toString("UTF-8")); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/FileContentTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/FileContentTest.java index 95b381b880..5bfba029c0 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/FileContentTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/FileContentTest.java @@ -44,7 +44,7 @@ import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import static org.junit.Assert.*; diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/FormContentBuilderTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/FormContentBuilderTest.java index 56cc6d7379..8995680a1d 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/FormContentBuilderTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/FormContentBuilderTest.java @@ -39,7 +39,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -92,4 +92,4 @@ public class FormContentBuilderTest { assertEquals(content, captor.getValue()); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/net/ahc/RawContentTest.java b/scm-core/src/test/java/sonia/scm/net/ahc/RawContentTest.java index f4ee8b7031..0d679a3440 100644 --- a/scm-core/src/test/java/sonia/scm/net/ahc/RawContentTest.java +++ b/scm-core/src/test/java/sonia/scm/net/ahc/RawContentTest.java @@ -39,7 +39,7 @@ import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * @@ -69,4 +69,4 @@ public class RawContentTest { assertEquals("abc", baos.toString("UTF-8")); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/repository/RepositoryUtilTest.java b/scm-core/src/test/java/sonia/scm/repository/RepositoryUtilTest.java index 82e85568d0..fabc55b9c9 100644 --- a/scm-core/src/test/java/sonia/scm/repository/RepositoryUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/RepositoryUtilTest.java @@ -6,7 +6,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import java.io.File; import java.io.IOException; diff --git a/scm-core/src/test/java/sonia/scm/repository/api/HookContextTest.java b/scm-core/src/test/java/sonia/scm/repository/api/HookContextTest.java index 2f746ec5ad..939858a52e 100644 --- a/scm-core/src/test/java/sonia/scm/repository/api/HookContextTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/api/HookContextTest.java @@ -33,15 +33,12 @@ package sonia.scm.repository.api; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import java.util.List; -import org.junit.Test; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.repository.Changeset; import sonia.scm.repository.Person; import sonia.scm.repository.PreProcessorUtil; @@ -51,6 +48,16 @@ import sonia.scm.repository.spi.HookChangesetRequest; import sonia.scm.repository.spi.HookChangesetResponse; import sonia.scm.repository.spi.HookContextProvider; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** * Unit tests for {@link HookContext}. * @@ -64,7 +71,7 @@ public class HookContextTest { @Mock private Repository repository; - + @Mock private PreProcessorUtil preProcessorUtil; @@ -79,7 +86,6 @@ public class HookContextTest { */ @Before public void setUpMocks(){ - when(repository.getName()).thenReturn("test"); when(provider.getChangesetProvider()).thenReturn(changesetProvider); when(provider.getSupportedFeatures()).thenReturn(Sets.newHashSet(HookFeature.CHANGESET_PROVIDER)); @@ -138,4 +144,4 @@ public class HookContextTest { assertFalse(context.isFeatureSupported(HookFeature.BRANCH_PROVIDER)); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java index 1fe78191de..e193c86f20 100644 --- a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java +++ b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java @@ -40,7 +40,7 @@ import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.SCMContextProvider; /** @@ -107,4 +107,4 @@ public class DefaultCipherHandlerTest { assertEquals("hallo123", cipher.decode(cipher.encode("hallo123"))); } -} \ No newline at end of file +} diff --git a/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java b/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java index 2f322ecbe3..3679a1870b 100644 --- a/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java +++ b/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java @@ -45,7 +45,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.group.Group; import sonia.scm.group.GroupException; diff --git a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java index d3f917932c..eb1de0f499 100644 --- a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java +++ b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java @@ -43,7 +43,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; diff --git a/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java b/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java index 052f6e1417..d7d8a5d937 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java @@ -49,7 +49,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.web.WebTokenGenerator; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitGcTaskTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitGcTaskTest.java index 57fdd59c2f..d008cb0618 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitGcTaskTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitGcTaskTest.java @@ -32,19 +32,23 @@ package sonia.scm.repository; import com.google.common.collect.Lists; +import org.eclipse.jgit.api.GarbageCollectCommand; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + import java.io.File; import java.io.IOException; import java.util.List; import java.util.Properties; -import org.eclipse.jgit.api.GarbageCollectCommand; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.junit.Test; -import static org.mockito.Mockito.*; -import org.junit.Before; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * Unit tests for {@link GitGcTask}. @@ -103,8 +107,7 @@ public class GitGcTaskTest // prepare repositories for task Repository unhealthy = mock(Repository.class); when(unhealthy.getType()).thenReturn("git"); - when(unhealthy.isHealthy()).thenReturn(Boolean.FALSE); - + Repository invalid = mock(Repository.class); when(unhealthy.getType()).thenReturn("git"); when(unhealthy.isValid()).thenReturn(Boolean.FALSE); @@ -125,4 +128,4 @@ public class GitGcTaskTest verify(gcc).call(); } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java index 47ca08b597..a9969f27f8 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java @@ -36,7 +36,7 @@ package sonia.scm.repository; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.io.DefaultFileSystem; import sonia.scm.schedule.Scheduler; import sonia.scm.store.ConfigurationStoreFactory; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookBranchProviderTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookBranchProviderTest.java index 9e5e0eef36..7699f43686 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookBranchProviderTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookBranchProviderTest.java @@ -43,7 +43,7 @@ import static org.hamcrest.Matchers.*; import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * Unit tests for {@link GitHookBranchProvider}. @@ -112,4 +112,4 @@ public class GitHookBranchProviderTest { return new GitHookBranchProvider(commands); } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookTagProviderTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookTagProviderTest.java index 87e277b633..56939b29a7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookTagProviderTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/api/GitHookTagProviderTest.java @@ -42,7 +42,7 @@ import static org.hamcrest.Matchers.*; import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.mockito.stubbing.OngoingStubbing; import sonia.scm.repository.Tag; @@ -127,4 +127,4 @@ public class GitHookTagProviderTest { return new GitHookTagProvider(commands); } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java index df4827a9fc..fede8842a9 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java @@ -1,24 +1,26 @@ package sonia.scm.web; -import com.google.common.base.Charsets; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import javax.servlet.ServletOutputStream; import org.junit.Test; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.mockito.Mock; -import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.RepositoryProvider; import sonia.scm.util.HttpUtil; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** * Unit tests for {@link GitPermissionFilter}. * @@ -69,7 +71,6 @@ public class GitPermissionFilterTest { when(mock.getMethod()).thenReturn(method); when(mock.getRequestURI()).thenReturn(requestURI); - when(mock.getContextPath()).thenReturn("/scm"); return mock; } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitRepositoryResolverTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitRepositoryResolverTest.java index d41e0acafc..6eabd4f5b3 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitRepositoryResolverTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitRepositoryResolverTest.java @@ -30,21 +30,24 @@ */ package sonia.scm.web; -import java.io.File; -import java.io.IOException; -import org.junit.Test; -import static org.junit.Assert.*; import org.junit.Before; import org.junit.Rule; +import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.repository.GitConfig; import sonia.scm.repository.GitRepositoryHandler; +import java.io.File; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + /** * Unit tests for {@link GitRepositoryResolver}. * @@ -70,8 +73,6 @@ public class GitRepositoryResolverTest { GitConfig config = new GitConfig(); config.setRepositoryDirectory(parentDirectory); - - when(handler.getConfig()).thenReturn(config); } @Test diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsBlobStoreFactoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsBlobStoreFactoryTest.java index fe48e403c5..991e2655f7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsBlobStoreFactoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsBlobStoreFactoryTest.java @@ -36,7 +36,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.repository.Repository; import sonia.scm.store.BlobStoreFactory; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsStoreRemoveListenerTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsStoreRemoveListenerTest.java index 5a1bfdbf9a..34a1a3f4d5 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsStoreRemoveListenerTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/LfsStoreRemoveListenerTest.java @@ -39,7 +39,7 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.HandlerEventType; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryEvent; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java index bd14a63b56..10df3f5009 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java @@ -37,7 +37,7 @@ package sonia.scm.repository; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.io.DefaultFileSystem; import sonia.scm.store.ConfigurationStoreFactory; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/api/HgHookTagProviderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/api/HgHookTagProviderTest.java index 6d78d0eb3c..dc943d476a 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/api/HgHookTagProviderTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/api/HgHookTagProviderTest.java @@ -41,7 +41,7 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.repository.Changeset; import sonia.scm.repository.Tag; import sonia.scm.repository.spi.HookChangesetProvider; @@ -101,4 +101,4 @@ public class HgHookTagProviderTest { HookChangesetResponse response = new HookChangesetResponse(list); when(changesetProvider.handleRequest(Mockito.any(HookChangesetRequest.class))).thenReturn(response); } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java index 01e01cf302..5608bea6e8 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java @@ -39,7 +39,7 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.RepositoryProvider; @@ -85,4 +85,4 @@ public class HgPermissionFilterTest { when(request.getMethod()).thenReturn(method); return filter.isWriteRequest(request); } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java index 327f03a6e5..f163e8c9a0 100644 --- a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java +++ b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java @@ -45,7 +45,7 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.group.GroupDAO; import sonia.scm.security.BearerToken; diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java index f2c53e413c..e5e9511872 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java @@ -35,7 +35,7 @@ package sonia.scm.repository; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.io.DefaultFileSystem; import sonia.scm.repository.api.HookContextFactory; import sonia.scm.repository.spi.HookEventFacade; diff --git a/scm-test/pom.xml b/scm-test/pom.xml index 086552e864..421155ef98 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -42,7 +42,7 @@ org.mockito - mockito-all + mockito-core ${mokito.version} diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java index b3e931188a..a98d18b390 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java @@ -6,7 +6,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.Manager; import sonia.scm.ModelObject; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java index 9eb8192b88..960b995eda 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java @@ -7,7 +7,7 @@ import com.google.common.io.Resources; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; @@ -100,7 +100,6 @@ public class FieldContainerResponseFilterTest { private JsonNode applyEntity(String name) throws IOException { JsonNode node = readJson(name); - when(responseContext.hasEntity()).thenReturn(Boolean.TRUE); when(responseContext.getEntity()).thenReturn(node); return node; } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java index ea71449a28..6d10e023ad 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java @@ -10,7 +10,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.web.JsonEnricher; import sonia.scm.web.VndMediaType; @@ -114,7 +114,6 @@ public class JsonMarshallingResponseFilterTest { @Test public void testFilterWithNonVndEntity() { when(responseContext.hasEntity()).thenReturn(Boolean.TRUE); - when(responseContext.getEntity()).thenReturn(new JsonMarshallingResponseFilterTest.Sample("one-two-three")); when(responseContext.getMediaType()).thenReturn(MediaType.APPLICATION_JSON_TYPE); filter.filter(requestContext, responseContext); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java index 67eb935670..9eea189b72 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java @@ -14,7 +14,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilder; diff --git a/scm-webapp/src/test/java/sonia/scm/filter/AdminSecurityFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/AdminSecurityFilterTest.java index b6a9c02a8d..b1d7f54ec9 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/AdminSecurityFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/AdminSecurityFilterTest.java @@ -39,7 +39,7 @@ import static org.junit.Assert.*; import org.junit.Before; import org.junit.Rule; import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; /** @@ -82,4 +82,4 @@ public class AdminSecurityFilterTest { assertFalse(securityFilter.hasPermission(SecurityUtils.getSubject())); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java index 010c9bc1cf..ac1b7335fc 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java @@ -33,30 +33,33 @@ package sonia.scm.filter; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; -import java.io.IOException; -import java.util.Map; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.slf4j.MDC; +import sonia.scm.AbstractTestBase; + import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.junit.Test; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import org.junit.Rule; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.slf4j.MDC; -import sonia.scm.AbstractTestBase; +import java.io.IOException; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; /** * Unit tests for {@link MDCFilter}. * * @author Sebastian Sdorra */ -@RunWith(MockitoJUnitRunner.class) +@RunWith(MockitoJUnitRunner.Silent.class) public class MDCFilterTest extends AbstractTestBase { @Rule @@ -127,4 +130,4 @@ public class MDCFilterTest extends AbstractTestBase { } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/filter/SecurityFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/SecurityFilterTest.java index 983f8d964a..fd217fd178 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/SecurityFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/SecurityFilterTest.java @@ -51,7 +51,7 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.user.User; diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java index faac9a99e5..70faa4a869 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpClientTest.java @@ -40,7 +40,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.net.TrustAllHostnameVerifier; diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpResponseTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpResponseTest.java index 8f5a7c23b7..a60c884b64 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpResponseTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/DefaultAdvancedHttpResponseTest.java @@ -45,7 +45,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java index 19db037a9a..4afdcb2bd6 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java @@ -36,34 +36,28 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Lists; - import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; - import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ +import org.mockito.junit.MockitoJUnitRunner; +import javax.servlet.ServletContext; import java.io.File; import java.io.IOException; - import java.net.MalformedURLException; import java.net.URL; - import java.nio.file.Path; - import java.util.ArrayList; import java.util.List; -import javax.servlet.ServletContext; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -107,8 +101,6 @@ public class DefaultUberWebResourceLoaderTest extends WebResourceLoaderTestBase @Test public void testGetResourceFromCache() throws MalformedURLException { - when(servletContext.getResource("/myresource")).thenReturn(SCM_MANAGER); - DefaultUberWebResourceLoader resourceLoader = new DefaultUberWebResourceLoader(servletContext, new ArrayList()); diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/MultiParentClassLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/MultiParentClassLoaderTest.java index 89e5e8a2c8..ae65f5c1ae 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/MultiParentClassLoaderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/MultiParentClassLoaderTest.java @@ -48,7 +48,7 @@ import org.mockito.Mock; import static org.mockito.Mockito.*; import static org.hamcrest.Matchers.*; import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.mockito.stubbing.Answer; /** diff --git a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerPerfTest.java b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerPerfTest.java index 665c54c9e1..6933ef5983 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerPerfTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerPerfTest.java @@ -51,7 +51,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.SCMContextProvider; import sonia.scm.Type; import sonia.scm.cache.GuavaCacheManager; diff --git a/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java b/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java index 184831f15a..1e75049178 100644 --- a/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java @@ -41,7 +41,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.hamcrest.Matchers.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.plugin.PluginLoader; /** diff --git a/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java b/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java index a082656016..489ac9f13d 100644 --- a/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java @@ -32,21 +32,23 @@ package sonia.scm.resources; import com.google.common.collect.ImmutableSet; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; + import java.io.IOException; import java.util.List; import java.util.Set; -import org.junit.Test; -import static org.junit.Assert.*; -import org.junit.Before; -import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; + +import static org.junit.Assert.assertEquals; /** * Unit tests for {@link DefaultResourceManager}. * * @author Sebastian Sdorra */ -@RunWith(MockitoJUnitRunner.class) +@RunWith(MockitoJUnitRunner.Silent.class) public class DefaultResourceManagerTest extends ResourceManagerTestBase { private DefaultResourceManager resourceManager; @@ -73,4 +75,4 @@ public class DefaultResourceManagerTest extends ResourceManagerTestBase { assertEquals(1, resources.size()); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/schedule/InjectionEnabledJobTest.java b/scm-webapp/src/test/java/sonia/scm/schedule/InjectionEnabledJobTest.java index 9545577c9f..88516d761c 100644 --- a/scm-webapp/src/test/java/sonia/scm/schedule/InjectionEnabledJobTest.java +++ b/scm-webapp/src/test/java/sonia/scm/schedule/InjectionEnabledJobTest.java @@ -40,7 +40,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; @@ -165,4 +165,4 @@ public class InjectionEnabledJobTest { verify(context).runAsAdmin(Mockito.any(PrivilegedAction.class)); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/schedule/QuartzSchedulerTest.java b/scm-webapp/src/test/java/sonia/scm/schedule/QuartzSchedulerTest.java index 1eca40dede..cd272ee7ba 100644 --- a/scm-webapp/src/test/java/sonia/scm/schedule/QuartzSchedulerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/schedule/QuartzSchedulerTest.java @@ -42,7 +42,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.SchedulerException; @@ -219,4 +219,4 @@ public class QuartzSchedulerTest { } } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/schedule/QuartzTaskTest.java b/scm-webapp/src/test/java/sonia/scm/schedule/QuartzTaskTest.java index 3318a41d18..efaeb702fe 100644 --- a/scm-webapp/src/test/java/sonia/scm/schedule/QuartzTaskTest.java +++ b/scm-webapp/src/test/java/sonia/scm/schedule/QuartzTaskTest.java @@ -39,7 +39,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.quartz.JobKey; import org.quartz.SchedulerException; @@ -87,4 +87,4 @@ public class QuartzTaskTest { task.cancel(); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java index 9f54eb6518..8176ed453c 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java @@ -41,41 +41,38 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwsHeader; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; - import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.PrincipalCollection; - +import org.hamcrest.Matchers; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; - +import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.group.GroupDAO; import sonia.scm.user.User; import sonia.scm.user.UserDAO; import sonia.scm.user.UserTestData; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - +import javax.crypto.spec.SecretKeySpec; import java.security.SecureRandom; - import java.util.Date; import java.util.Set; -import javax.crypto.spec.SecretKeySpec; -import org.hamcrest.Matchers; -import org.junit.Rule; -import org.junit.rules.ExpectedException; -import org.mockito.InjectMocks; -import org.mockito.Mockito; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; + +//~--- JDK imports ------------------------------------------------------------ /** * Unit tests for {@link BearerRealm}. @@ -156,7 +153,6 @@ public class BearerRealmTest { SecureKey key = createSecureKey(); User marvin = UserTestData.createMarvin(); - when(userDAO.get(marvin.getName())).thenReturn(marvin); resolveKey(key); @@ -182,8 +178,6 @@ public class BearerRealmTest { User trillian = UserTestData.createTrillian(); - when(userDAO.get(trillian.getName())).thenReturn(trillian); - SecureKey key = createSecureKey(); resolveKey(key); @@ -216,10 +210,6 @@ public class BearerRealmTest @Test(expected = AuthenticationException.class) public void testDoGetAuthenticationInfoWithoutSignature() { - User trillian = UserTestData.createTrillian(); - - when(userDAO.get(trillian.getName())).thenReturn(trillian); - String compact = Jwts.builder().setSubject("test").compact(); realm.doGetAuthenticationInfo(BearerToken.valueOf(compact)); diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java index 8dd6ed0d53..2b157c4dab 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java @@ -49,7 +49,7 @@ import static org.mockito.Mockito.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import org.junit.Rule; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.group.GroupNames; diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java index baa3de2f56..02b1a6ed1b 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java @@ -54,7 +54,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.group.Group; import sonia.scm.group.GroupDAO; diff --git a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java index f8a07eae83..72aa98091b 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java @@ -47,7 +47,7 @@ import org.junit.Rule; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * Unit test for {@link JwtAccessTokenBuilder}. @@ -157,4 +157,4 @@ public class JwtAccessTokenBuilderTest { return new SecureKey(bytes, System.currentTimeMillis()); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenResolverTest.java b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenResolverTest.java index b7fd897559..689fc4bb35 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenResolverTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenResolverTest.java @@ -56,7 +56,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * Unit tests for {@link JwtAccessTokenResolver}. @@ -236,4 +236,4 @@ public class JwtAccessTokenResolverTest { } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/security/SecureKeyResolverTest.java b/scm-webapp/src/test/java/sonia/scm/security/SecureKeyResolverTest.java index e3bacb4abc..8d708c4677 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/SecureKeyResolverTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/SecureKeyResolverTest.java @@ -42,7 +42,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; diff --git a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java index 9e6d54dc0b..d9d0e52a0c 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java @@ -3,7 +3,7 @@ package sonia.scm.security; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import javax.servlet.http.HttpServletRequest; diff --git a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java index c7f87e7414..37d853011d 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java @@ -31,16 +31,20 @@ package sonia.scm.security; -import javax.servlet.http.HttpServletRequest; -import org.junit.Test; import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.HttpUtil; +import javax.servlet.http.HttpServletRequest; + +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + /** * Unit tests for {@link XsrfAccessTokenEnricher}. * @@ -96,8 +100,7 @@ public class XsrfAccessTokenEnricherTest { public void testEnrichWithDisabledXsrf() { // prepare configuration.setEnabledXsrfProtection(false); - when(request.getHeader(HttpUtil.HEADER_SCM_CLIENT)).thenReturn(HttpUtil.SCM_CLIENT_WUI); - + // execute enricher.enrich(builder); @@ -120,4 +123,4 @@ public class XsrfAccessTokenEnricherTest { verify(builder, never()).custom(Xsrf.TOKEN_KEY, "42"); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/security/XsrfTokenClaimsValidatorTest.java b/scm-webapp/src/test/java/sonia/scm/security/XsrfTokenClaimsValidatorTest.java index 2e47a3cfeb..dbebb2c0cf 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/XsrfTokenClaimsValidatorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/XsrfTokenClaimsValidatorTest.java @@ -40,7 +40,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; /** * Tests {@link XsrfTokenClaimsValidator}. @@ -115,4 +115,4 @@ public class XsrfTokenClaimsValidatorTest { // execute and assert assertTrue(validator.validate(claims)); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/user/UserEventHackTest.java b/scm-webapp/src/test/java/sonia/scm/user/UserEventHackTest.java index b176a6093d..41dd8f72d9 100644 --- a/scm-webapp/src/test/java/sonia/scm/user/UserEventHackTest.java +++ b/scm-webapp/src/test/java/sonia/scm/user/UserEventHackTest.java @@ -39,7 +39,7 @@ import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.HandlerEventType; diff --git a/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java index 7228af07fb..9dd9572913 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java @@ -43,7 +43,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import static org.hamcrest.Matchers.*; diff --git a/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java index 624a0f8e98..71195b7f48 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java @@ -39,7 +39,7 @@ import static org.hamcrest.Matchers.*; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.*; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.security.BearerToken; /** @@ -76,4 +76,4 @@ public class BearerWebTokenGeneratorTest { assertThat(bt.getCredentials(), equalTo("asd")); } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java index c98a9deca0..115b52fa36 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java @@ -39,7 +39,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.security.BearerToken; From 6f796ec0d513ec620b51c2533790eec7463784e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 8 Aug 2018 14:23:18 +0200 Subject: [PATCH 07/13] Update to JAX-RS 2.1 with resteasy 3.6.1 and jetty 9.4 --- pom.xml | 6 +++--- scm-webapp/pom.xml | 2 +- .../sonia/scm/api/v2/resources/ConfigResourceTest.java | 2 +- .../sonia/scm/api/v2/resources/GroupRootResourceTest.java | 4 ++-- .../java/sonia/scm/api/v2/resources/MeResourceTest.java | 2 +- .../scm/api/v2/resources/RepositoryRootResourceTest.java | 6 +++--- .../sonia/scm/api/v2/resources/UserRootResourceTest.java | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 4493dcfd04..e3ec660193 100644 --- a/pom.xml +++ b/pom.xml @@ -552,7 +552,7 @@ 1.1.10 3.0.1 - 2.0.1 + 2.1 1.19.4 2.8.6 4.0 @@ -561,8 +561,8 @@ 1.3.0 - 9.2.10.v20150310 - 9.2.10.v20150310 + 9.4.11.v20180605 + 9.4.11.v20180605 967c8fd521 diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 054ce3d445..67e9c0a43c 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -560,7 +560,7 @@ 2.9.1 1.0 0.8.17 - 3.1.3.Final + 3.5.1.Final Tomcat e1 javascript:S3827 diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java index 5365e9fbde..ed509c727d 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java @@ -60,7 +60,7 @@ public class ConfigResourceTest { @Test @SubjectAware(username = "readOnly") - public void shouldGetGlobalConfig() throws URISyntaxException { + public void shouldGetGlobalConfig() throws Exception { MockHttpRequest request = MockHttpRequest.get("/" + ConfigResource.CONFIG_PATH_V2); MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response); 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 dff9e7e99b..d964e57624 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 @@ -86,7 +86,7 @@ public class GroupRootResourceTest { } @Test - public void shouldGetGroup() throws URISyntaxException { + public void shouldGetGroup() throws Exception { Group group = createDummyGroup(); when(groupManager.get("admin")).thenReturn(group); @@ -199,7 +199,7 @@ public class GroupRootResourceTest { } @Test - public void shouldGetAll() throws URISyntaxException { + public void shouldGetAll() throws Exception { MockHttpRequest request = MockHttpRequest.get("/" + GroupRootResource.GROUPS_PATH_V2); MockHttpResponse response = new MockHttpResponse(); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java index 56c60098fb..60b89ae708 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java @@ -79,7 +79,7 @@ public class MeResourceTest { @Test @SubjectAware(username = "trillian", password = "secret") - public void shouldReturnCurrentlyAuthenticatedUser() throws URISyntaxException { + public void shouldReturnCurrentlyAuthenticatedUser() throws Exception { MockHttpRequest request = MockHttpRequest.get("/" + MeResource.ME_PATH_V2); request.accept(VndMediaType.USER); MockHttpResponse response = new MockHttpResponse(); 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 f0e875e650..09f8be6727 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 @@ -92,7 +92,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldFindExistingRepository() throws URISyntaxException { + public void shouldFindExistingRepository() throws Exception { mockRepository("space", "repo"); MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo"); @@ -105,7 +105,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldMapProperties() throws URISyntaxException { + public void shouldMapProperties() throws Exception { Repository repository = mockRepository("space", "repo"); repository.setProperty("testKey", "testValue"); @@ -118,7 +118,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldGetAll() throws URISyntaxException { + public void shouldGetAll() throws Exception { PageResult singletonPageResult = createSingletonPageResult(mockRepository("space", "repo")); when(repositoryManager.getPage(any(), eq(0), eq(10))).thenReturn(singletonPageResult); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java index 1eee9b2270..342957520d 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java @@ -77,7 +77,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreateFullResponseForAdmin() throws URISyntaxException { + public void shouldCreateFullResponseForAdmin() throws Exception { MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "Neo"); MockHttpResponse response = new MockHttpResponse(); @@ -92,7 +92,7 @@ public class UserRootResourceTest { @Test @SubjectAware(username = "unpriv") - public void shouldCreateLimitedResponseForSimpleUser() throws URISyntaxException { + public void shouldCreateLimitedResponseForSimpleUser() throws Exception { MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "Neo"); MockHttpResponse response = new MockHttpResponse(); @@ -217,7 +217,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreatePageForOnePageOnly() throws URISyntaxException { + public void shouldCreatePageForOnePageOnly() throws Exception { PageResult singletonPageResult = createSingletonPageResult(1); when(userManager.getPage(any(), eq(0), eq(10))).thenReturn(singletonPageResult); MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2); @@ -235,7 +235,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreatePageForMultiplePages() throws URISyntaxException { + public void shouldCreatePageForMultiplePages() throws Exception { PageResult singletonPageResult = createSingletonPageResult(3); when(userManager.getPage(any(), eq(1), eq(1))).thenReturn(singletonPageResult); MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "?page=1&pageSize=1"); From 8f5b2f2fe43d860c2489a50d6e6e842315992cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 8 Aug 2018 14:24:51 +0200 Subject: [PATCH 08/13] Make sub resource level for branch root leaf --- .../resources/BranchCollectionResource.java | 65 ----------- .../scm/api/v2/resources/BranchResource.java | 73 ------------- .../api/v2/resources/BranchRootResource.java | 103 ++++++++++++++++-- .../api/v2/resources/RepositoryResource.java | 1 + .../scm/api/v2/resources/ResourceLinks.java | 8 +- .../v2/resources/BranchRootResourceTest.java | 80 ++++++++++++++ .../api/v2/resources/ResourceLinksMock.java | 1 + .../org.mockito.plugins.MockMaker | 1 + 8 files changed, 180 insertions(+), 152 deletions(-) delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java create mode 100644 scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java create mode 100644 scm-webapp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java deleted file mode 100644 index daac7fdc28..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchCollectionResource.java +++ /dev/null @@ -1,65 +0,0 @@ -package sonia.scm.api.v2.resources; - -import com.webcohesion.enunciate.metadata.rs.ResponseCode; -import com.webcohesion.enunciate.metadata.rs.StatusCodes; -import com.webcohesion.enunciate.metadata.rs.TypeHint; -import sonia.scm.repository.Branches; -import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.RepositoryNotFoundException; -import sonia.scm.repository.api.CommandNotSupportedException; -import sonia.scm.repository.api.RepositoryService; -import sonia.scm.repository.api.RepositoryServiceFactory; -import sonia.scm.web.VndMediaType; - -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; -import java.io.IOException; - -public class BranchCollectionResource { - - private final RepositoryServiceFactory servicefactory; - private final BranchCollectionToDtoMapper branchCollectionToDtoMapper; - - @Inject - public BranchCollectionResource(RepositoryServiceFactory servicefactory, BranchCollectionToDtoMapper branchCollectionToDtoMapper) { - this.servicefactory = servicefactory; - this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; - } - - /** - * Returns the branches for a repository. - * - * Note: This method requires "repository" privilege. - * - * @param namespace the namespace of the repository - * @param name the name of the repository - * - */ - @GET - @Path("") - @Produces(VndMediaType.BRANCH_COLLECTION) - @TypeHint(CollectionDto.class) - @StatusCodes({ - @ResponseCode(code = 200, condition = "success"), - @ResponseCode(code = 400, condition = "branches not supported for given repository"), - @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), - @ResponseCode(code = 403, condition = "not authorized, the current user does not have the \"group\" privilege"), - @ResponseCode(code = 404, condition = "not found, no repository found for the given namespace and name"), - @ResponseCode(code = 500, condition = "internal server error") - }) - public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { - try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { - Branches branches = repositoryService.getBranchesCommand().getBranches(); - return Response.ok(branchCollectionToDtoMapper.map(namespace, name, branches.getBranches())).build(); - } catch (CommandNotSupportedException ex) { - return Response.status(Response.Status.BAD_REQUEST).build(); - } catch (RepositoryNotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java deleted file mode 100644 index 9d28fbb31c..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchResource.java +++ /dev/null @@ -1,73 +0,0 @@ -package sonia.scm.api.v2.resources; - -import com.google.inject.Inject; -import com.webcohesion.enunciate.metadata.rs.ResponseCode; -import com.webcohesion.enunciate.metadata.rs.StatusCodes; -import com.webcohesion.enunciate.metadata.rs.TypeHint; -import sonia.scm.repository.Branches; -import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.RepositoryNotFoundException; -import sonia.scm.repository.api.CommandNotSupportedException; -import sonia.scm.repository.api.RepositoryService; -import sonia.scm.repository.api.RepositoryServiceFactory; -import sonia.scm.web.VndMediaType; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; -import java.io.IOException; - -public class BranchResource { - - private final RepositoryServiceFactory servicefactory; - private final BranchToBranchDtoMapper branchToDtoMapper; - - @Inject - public BranchResource(RepositoryServiceFactory servicefactory, BranchToBranchDtoMapper branchToDtoMapper) { - this.servicefactory = servicefactory; - this.branchToDtoMapper = branchToDtoMapper; - } - - /** - * Returns a branch for a repository. - * - * Note: This method requires "repository" privilege. - * - * @param namespace the namespace of the repository - * @param name the name of the repository - * @param branchName the name of the branch - * - */ - @GET - @Path("") - @Produces(VndMediaType.BRANCH) - @TypeHint(BranchDto.class) - @StatusCodes({ - @ResponseCode(code = 200, condition = "success"), - @ResponseCode(code = 400, condition = "branches not supported for given repository"), - @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), - @ResponseCode(code = 403, condition = "not authorized, the current user has no privileges to read the branch"), - @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available or repository not found"), - @ResponseCode(code = 500, condition = "internal server error") - }) - public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { - try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { - Branches branches = repositoryService.getBranchesCommand().getBranches(); - return branches.getBranches() - .stream() - .filter(branch -> branchName.equals(branch.getName())) - .findFirst() - .map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name))) - .map(Response::ok) - .orElse(Response.status(Response.Status.NOT_FOUND)) - .build(); - } catch (CommandNotSupportedException ex) { - return Response.status(Response.Status.BAD_REQUEST).build(); - } catch (RepositoryNotFoundException e) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index a656aa36a4..fbf48279f3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -1,27 +1,110 @@ package sonia.scm.api.v2.resources; +import com.webcohesion.enunciate.metadata.rs.ResponseCode; +import com.webcohesion.enunciate.metadata.rs.StatusCodes; +import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.repository.Branches; +import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RepositoryNotFoundException; +import sonia.scm.repository.api.CommandNotSupportedException; +import sonia.scm.repository.api.RepositoryService; +import sonia.scm.repository.api.RepositoryServiceFactory; +import sonia.scm.web.VndMediaType; + import javax.inject.Inject; -import javax.inject.Provider; +import javax.ws.rs.GET; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.IOException; public class BranchRootResource { - private final Provider branchCollectionResource; - private final Provider branchResource; + private final RepositoryServiceFactory servicefactory; + private final BranchToBranchDtoMapper branchToDtoMapper; + private final BranchCollectionToDtoMapper branchCollectionToDtoMapper; @Inject - public BranchRootResource(Provider branchCollectionResource, Provider branchResource) { - this.branchCollectionResource = branchCollectionResource; - this.branchResource = branchResource; + public BranchRootResource(RepositoryServiceFactory servicefactory, BranchToBranchDtoMapper branchToDtoMapper, BranchCollectionToDtoMapper branchCollectionToDtoMapper) { + this.servicefactory = servicefactory; + this.branchToDtoMapper = branchToDtoMapper; + this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; } + /** + * Returns a branch for a repository. + * + * Note: This method requires "repository" privilege. + * + * @param namespace the namespace of the repository + * @param name the name of the repository + * @param branchName the name of the branch + * + */ + @GET @Path("{branch}") - public BranchResource getBranchResource() { - return branchResource.get(); + @Produces(VndMediaType.BRANCH) + @TypeHint(BranchDto.class) + @StatusCodes({ + @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 400, condition = "branches not supported for given repository"), + @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), + @ResponseCode(code = 403, condition = "not authorized, the current user has no privileges to read the branch"), + @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available or repository not found"), + @ResponseCode(code = 500, condition = "internal server error") + }) + public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { + System.out.println("in branch resource"); + try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { + Branches branches = repositoryService.getBranchesCommand().getBranches(); + System.out.println("found branches: " + branches); + return branches.getBranches() + .stream() + .filter(branch -> branchName.equals(branch.getName())) + .findFirst() + .map(branch -> branchToDtoMapper.map(branch, new NamespaceAndName(namespace, name))) + .map(Response::ok) + .orElse(Response.status(Response.Status.NOT_FOUND)) + .build(); + } catch (CommandNotSupportedException ex) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } catch (RepositoryNotFoundException e) { + System.out.println("got RepositoryNotFoundException"); + return Response.status(Response.Status.NOT_FOUND).build(); + } } + /** + * Returns the branches for a repository. + * + * Note: This method requires "repository" privilege. + * + * @param namespace the namespace of the repository + * @param name the name of the repository + * + */ + @GET @Path("") - public BranchCollectionResource getBranchCollectionResource() { - return branchCollectionResource.get(); + @Produces(VndMediaType.BRANCH_COLLECTION) + @TypeHint(CollectionDto.class) + @StatusCodes({ + @ResponseCode(code = 200, condition = "success"), + @ResponseCode(code = 400, condition = "branches not supported for given repository"), + @ResponseCode(code = 401, condition = "not authenticated / invalid credentials"), + @ResponseCode(code = 403, condition = "not authorized, the current user does not have the \"group\" privilege"), + @ResponseCode(code = 404, condition = "not found, no repository found for the given namespace and name"), + @ResponseCode(code = 500, condition = "internal server error") + }) + public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { + try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { + Branches branches = repositoryService.getBranchesCommand().getBranches(); + return Response.ok(branchCollectionToDtoMapper.map(namespace, name, branches.getBranches())).build(); + } catch (CommandNotSupportedException ex) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } catch (RepositoryNotFoundException e) { + return Response.status(Response.Status.NOT_FOUND).build(); + } } } 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 8fdaa00a19..61104dfffc 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 @@ -137,6 +137,7 @@ public class RepositoryResource { @Path("branches/") public BranchRootResource branches(@PathParam("namespace") String namespace, @PathParam("name") String name) { + System.out.println("got request for branches"); return branchRootResource.get(); } 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 31e7d45007..9453f39581 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 @@ -191,11 +191,11 @@ class ResourceLinks { private final LinkBuilder branchLinkBuilder; BranchLinks(UriInfo uriInfo) { - branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class, BranchResource.class); + branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class); } String self(NamespaceAndName namespaceAndName, String branch) { - return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("getBranchResource").parameters().method("get").parameters(branch).href(); + return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("get").parameters(branch).href(); } } @@ -207,11 +207,11 @@ class ResourceLinks { private final LinkBuilder branchLinkBuilder; BranchCollectionLinks(UriInfo uriInfo) { - branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class, BranchCollectionResource.class); + branchLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, BranchRootResource.class); } String self(String namespace, String name) { - return branchLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("branches").parameters().method("getBranchCollectionResource").parameters().method("getAll").parameters().href(); + return branchLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("branches").parameters().method("getAll").parameters().href(); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java new file mode 100644 index 0000000000..711a5cf196 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java @@ -0,0 +1,80 @@ +package sonia.scm.api.v2.resources; + +import org.jboss.resteasy.core.Dispatcher; +import org.jboss.resteasy.mock.MockDispatcherFactory; +import org.jboss.resteasy.mock.MockHttpRequest; +import org.jboss.resteasy.mock.MockHttpResponse; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import sonia.scm.repository.Branch; +import sonia.scm.repository.Branches; +import sonia.scm.repository.NamespaceAndName; +import sonia.scm.repository.api.BranchesCommandBuilder; +import sonia.scm.repository.api.RepositoryService; +import sonia.scm.repository.api.RepositoryServiceFactory; + +import java.net.URI; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.Silent.class) +public class BranchRootResourceTest { + + private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); + + private final URI baseUri = URI.create("/"); + private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri); + + @Mock + private RepositoryServiceFactory serviceFactory; + @Mock + private RepositoryService service; + @Mock + private BranchesCommandBuilder branchesCommandBuilder; + + @InjectMocks + private BranchToBranchDtoMapperImpl branchToDtoMapper; + + @Before + public void prepareEnvironment() throws Exception { + BranchCollectionToDtoMapper branchCollectionToDtoMapper = new BranchCollectionToDtoMapper(branchToDtoMapper, resourceLinks); + BranchRootResource branchRootResource = new BranchRootResource(serviceFactory, branchToDtoMapper, branchCollectionToDtoMapper); + RepositoryRootResource repositoryRootResource = new RepositoryRootResource(MockProvider.of(new RepositoryResource(null, null, null, null, MockProvider.of(branchRootResource), null, null, null)), null); + dispatcher.getRegistry().addSingletonResource(repositoryRootResource); + + when(serviceFactory.create(new NamespaceAndName("space", "repo"))).thenReturn(service); + when(service.getBranchesCommand()).thenReturn(branchesCommandBuilder); + } + + @Test + public void shouldHandleMissingBranch() throws Exception { + when(branchesCommandBuilder.getBranches()).thenReturn(new Branches()); + + MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/branches/master"); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + assertEquals(404, response.getStatus()); + } + + @Test + public void shouldFindExistingBranch() throws Exception { + when(branchesCommandBuilder.getBranches()).thenReturn(new Branches(new Branch("master", "revision"))); + + MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/branches/master"); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + assertEquals(200, response.getStatus()); + System.out.println(response.getContentAsString()); + assertTrue(response.getContentAsString().contains("\"revision\":\"revision\"")); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java index b5fe5c4da4..e24e0e659c 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java @@ -25,6 +25,7 @@ public class ResourceLinksMock { when(resourceLinks.sourceCollection()).thenReturn(new ResourceLinks.SourceCollectionLinks(uriInfo)); when(resourceLinks.permissionCollection()).thenReturn(new ResourceLinks.PermissionCollectionLinks(uriInfo)); when(resourceLinks.config()).thenReturn(new ResourceLinks.ConfigLinks(uriInfo)); + when(resourceLinks.branch()).thenReturn(new ResourceLinks.BranchLinks(uriInfo)); return resourceLinks; } } diff --git a/scm-webapp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/scm-webapp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..1f0955d450 --- /dev/null +++ b/scm-webapp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline From 4baac8e83c7d7c055d210f7c6e1e6208175ec20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 8 Aug 2018 15:15:29 +0200 Subject: [PATCH 09/13] Update animal sniffer --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e3ec660193..7cbbf5df36 100644 --- a/pom.xml +++ b/pom.xml @@ -233,7 +233,7 @@ org.codehaus.mojo animal-sniffer-maven-plugin - 1.15 + 1.17 org.codehaus.mojo.signature From 1c93551e5cc17f5c7666de7b87af6829e6c9cd8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 8 Aug 2018 17:13:24 +0200 Subject: [PATCH 10/13] Add source and changeset links to branch --- .../api/v2/resources/BranchRootResource.java | 6 ++++ .../v2/resources/BranchToBranchDtoMapper.java | 7 +++- .../v2/resources/ChangesetRootResource.java | 25 +++++++------ .../RepositoryToRepositoryDtoMapper.java | 4 +-- .../scm/api/v2/resources/ResourceLinks.java | 36 ++++++++++++------- .../api/v2/resources/SourceRootResource.java | 25 +++++++------ .../api/v2/resources/ResourceLinksMock.java | 4 +-- .../api/v2/resources/ResourceLinksTest.java | 24 +++++++++++-- 8 files changed, 91 insertions(+), 40 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index fbf48279f3..293827b0cf 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -76,6 +76,12 @@ public class BranchRootResource { } } + @Path("{branch}/changesets/") + @GET + public Response history(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) { + return null; + } + /** * Returns the branches for a repository. * diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java index edced65c44..8d616ffb77 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java @@ -11,6 +11,7 @@ import sonia.scm.repository.NamespaceAndName; import javax.inject.Inject; +import static de.otto.edison.hal.Link.linkBuilder; import static de.otto.edison.hal.Links.linkingTo; @Mapper @@ -24,7 +25,11 @@ public abstract class BranchToBranchDtoMapper { @AfterMapping void appendLinks(@MappingTarget BranchDto target, @Context NamespaceAndName namespaceAndName) { - Links.Builder linksBuilder = linkingTo().self(resourceLinks.branch().self(namespaceAndName, target.getName())); + Links.Builder linksBuilder = linkingTo() + .self(resourceLinks.branch().self(namespaceAndName, target.getName())) + .single(linkBuilder("history", resourceLinks.branch().history(namespaceAndName, target.getName())).build()) + .single(linkBuilder("changeset", resourceLinks.changeset().changeset(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision())).build()) + .single(linkBuilder("source", resourceLinks.source().source(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision())).build()); target.add(linksBuilder.build()); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java index 1681a27cd4..42ffbdd6c1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java @@ -1,20 +1,25 @@ package sonia.scm.api.v2.resources; -import javax.inject.Inject; -import javax.inject.Provider; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; public class ChangesetRootResource { - private final Provider changesetCollectionResource; - - @Inject - public ChangesetRootResource(Provider changesetCollectionResource) { - this.changesetCollectionResource = changesetCollectionResource; + @GET + @Path("") + public Response getAll(@DefaultValue("0") @QueryParam("page") int page, + @DefaultValue("10") @QueryParam("pageSize") int pageSize, + @QueryParam("sortBy") String sortBy, + @DefaultValue("false") @QueryParam("desc") boolean desc) { + throw new UnsupportedOperationException(); } - @Path("") - public ChangesetCollectionResource getChangesetCollectionResource() { - return changesetCollectionResource.get(); + @GET + @Path("{revision}") + public Response get() { + throw new UnsupportedOperationException(); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index cb89f0ea63..ca30a09286 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -35,8 +35,8 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper sourceCollectionResource; - - @Inject - public SourceRootResource(Provider sourceCollectionResource) { - this.sourceCollectionResource = sourceCollectionResource; + @GET + @Path("") + public Response getAll(@DefaultValue("0") @QueryParam("page") int page, + @DefaultValue("10") @QueryParam("pageSize") int pageSize, + @QueryParam("sortBy") String sortBy, + @DefaultValue("false") @QueryParam("desc") boolean desc) { + throw new UnsupportedOperationException(); } - @Path("") - public SourceCollectionResource getSourceCollectionResource() { - return sourceCollectionResource.get(); + @GET + @Path("{revision}") + public Response get() { + throw new UnsupportedOperationException(); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java index de657ec5cb..882d754329 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksMock.java @@ -21,8 +21,8 @@ public class ResourceLinksMock { when(resourceLinks.repositoryCollection()).thenReturn(new ResourceLinks.RepositoryCollectionLinks(uriInfo)); when(resourceLinks.tagCollection()).thenReturn(new ResourceLinks.TagCollectionLinks(uriInfo)); when(resourceLinks.branchCollection()).thenReturn(new ResourceLinks.BranchCollectionLinks(uriInfo)); - when(resourceLinks.changesetCollection()).thenReturn(new ResourceLinks.ChangesetCollectionLinks(uriInfo)); - when(resourceLinks.sourceCollection()).thenReturn(new ResourceLinks.SourceCollectionLinks(uriInfo)); + when(resourceLinks.changeset()).thenReturn(new ResourceLinks.ChangesetLinks(uriInfo)); + when(resourceLinks.source()).thenReturn(new ResourceLinks.SourceLinks(uriInfo)); when(resourceLinks.permissionCollection()).thenReturn(new ResourceLinks.PermissionCollectionLinks(uriInfo)); when(resourceLinks.config()).thenReturn(new ResourceLinks.ConfigLinks(uriInfo)); when(resourceLinks.branch()).thenReturn(new ResourceLinks.BranchLinks(uriInfo)); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java index a9be9f7450..000e628f26 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ResourceLinksTest.java @@ -121,21 +121,39 @@ public class ResourceLinksTest { assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master", url); } + @Test + public void shouldCreateCorrectBranchHiostoryUrl() { + String url = resourceLinks.branch().history(new NamespaceAndName("space", "name"), "master"); + assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master/changesets/", url); + } + + @Test + public void shouldCreateCorrectBranchChangesetUrl() { + String url = resourceLinks.changeset().changeset("space", "name", "revision"); + assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/changesets/revision", url); + } + + @Test + public void shouldCreateCorrectBranchSourceUrl() { + String url = resourceLinks.source().source("space", "name", "revision"); + assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/sources/revision", url); + } + @Test public void shouldCreateCorrectChangesetCollectionUrl() { - String url = resourceLinks.changesetCollection().self("space", "repo"); + String url = resourceLinks.changeset().self("space", "repo"); assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/changesets/", url); } @Test public void shouldCreateCorrectSourceCollectionUrl() { - String url = resourceLinks.sourceCollection().self("space", "repo"); + String url = resourceLinks.source().self("space", "repo"); assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url); } @Test public void shouldCreateCorrectPermissionCollectionUrl() { - String url = resourceLinks.sourceCollection().self("space", "repo"); + String url = resourceLinks.source().self("space", "repo"); assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url); } From 041c94fa55b8e30b8fccc3d0384ec545cb4c298f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 9 Aug 2018 08:07:28 +0200 Subject: [PATCH 11/13] Delete unused sub resources --- .../resources/ChangesetCollectionResource.java | 18 ------------------ .../v2/resources/SourceCollectionResource.java | 18 ------------------ 2 files changed, 36 deletions(-) delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionResource.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceCollectionResource.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionResource.java deleted file mode 100644 index d42494a270..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionResource.java +++ /dev/null @@ -1,18 +0,0 @@ -package sonia.scm.api.v2.resources; - -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; - -public class ChangesetCollectionResource { - @GET - @Path("") - public Response getAll(@DefaultValue("0") @QueryParam("page") int page, - @DefaultValue("10") @QueryParam("pageSize") int pageSize, - @QueryParam("sortBy") String sortBy, - @DefaultValue("false") @QueryParam("desc") boolean desc) { - throw new UnsupportedOperationException(); - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceCollectionResource.java deleted file mode 100644 index d3f00a0b51..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceCollectionResource.java +++ /dev/null @@ -1,18 +0,0 @@ -package sonia.scm.api.v2.resources; - -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; - -public class SourceCollectionResource { - @GET - @Path("") - public Response getAll(@DefaultValue("0") @QueryParam("page") int page, - @DefaultValue("10") @QueryParam("pageSize") int pageSize, - @QueryParam("sortBy") String sortBy, - @DefaultValue("false") @QueryParam("desc") boolean desc) { - throw new UnsupportedOperationException(); - } -} From 8e0af3354f0ff907e582d0ed9e5a429d8aeecc32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 9 Aug 2018 09:17:07 +0200 Subject: [PATCH 12/13] Backed out changeset e5f1c37895b4 --- pom.xml | 6 +++--- scm-webapp/pom.xml | 2 +- .../sonia/scm/api/v2/resources/ConfigResourceTest.java | 2 +- .../sonia/scm/api/v2/resources/GroupRootResourceTest.java | 4 ++-- .../java/sonia/scm/api/v2/resources/MeResourceTest.java | 2 +- .../scm/api/v2/resources/RepositoryRootResourceTest.java | 6 +++--- .../sonia/scm/api/v2/resources/UserRootResourceTest.java | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 319bb62784..a16ff50415 100644 --- a/pom.xml +++ b/pom.xml @@ -553,7 +553,7 @@ 1.1.10 3.0.1 - 2.1 + 2.0.1 1.19.4 2.8.6 4.0 @@ -562,8 +562,8 @@ 1.3.0 - 9.4.11.v20180605 - 9.4.11.v20180605 + 9.2.10.v20150310 + 9.2.10.v20150310 967c8fd521 diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 67e9c0a43c..054ce3d445 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -560,7 +560,7 @@ 2.9.1 1.0 0.8.17 - 3.5.1.Final + 3.1.3.Final Tomcat e1 javascript:S3827 diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java index ed509c727d..5365e9fbde 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java @@ -60,7 +60,7 @@ public class ConfigResourceTest { @Test @SubjectAware(username = "readOnly") - public void shouldGetGlobalConfig() throws Exception { + public void shouldGetGlobalConfig() throws URISyntaxException { MockHttpRequest request = MockHttpRequest.get("/" + ConfigResource.CONFIG_PATH_V2); MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response); 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 d964e57624..dff9e7e99b 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 @@ -86,7 +86,7 @@ public class GroupRootResourceTest { } @Test - public void shouldGetGroup() throws Exception { + public void shouldGetGroup() throws URISyntaxException { Group group = createDummyGroup(); when(groupManager.get("admin")).thenReturn(group); @@ -199,7 +199,7 @@ public class GroupRootResourceTest { } @Test - public void shouldGetAll() throws Exception { + public void shouldGetAll() throws URISyntaxException { MockHttpRequest request = MockHttpRequest.get("/" + GroupRootResource.GROUPS_PATH_V2); MockHttpResponse response = new MockHttpResponse(); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java index 60b89ae708..56c60098fb 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java @@ -79,7 +79,7 @@ public class MeResourceTest { @Test @SubjectAware(username = "trillian", password = "secret") - public void shouldReturnCurrentlyAuthenticatedUser() throws Exception { + public void shouldReturnCurrentlyAuthenticatedUser() throws URISyntaxException { MockHttpRequest request = MockHttpRequest.get("/" + MeResource.ME_PATH_V2); request.accept(VndMediaType.USER); MockHttpResponse response = new MockHttpResponse(); 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 28a908566b..888d4d6f25 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 @@ -90,7 +90,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldFindExistingRepository() throws Exception { + public void shouldFindExistingRepository() throws URISyntaxException { mockRepository("space", "repo"); MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo"); @@ -103,7 +103,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldMapProperties() throws Exception { + public void shouldMapProperties() throws URISyntaxException { Repository repository = mockRepository("space", "repo"); repository.setProperty("testKey", "testValue"); @@ -116,7 +116,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldGetAll() throws Exception { + public void shouldGetAll() throws URISyntaxException { PageResult singletonPageResult = createSingletonPageResult(mockRepository("space", "repo")); when(repositoryManager.getPage(any(), eq(0), eq(10))).thenReturn(singletonPageResult); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java index 342957520d..1eee9b2270 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java @@ -77,7 +77,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreateFullResponseForAdmin() throws Exception { + public void shouldCreateFullResponseForAdmin() throws URISyntaxException { MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "Neo"); MockHttpResponse response = new MockHttpResponse(); @@ -92,7 +92,7 @@ public class UserRootResourceTest { @Test @SubjectAware(username = "unpriv") - public void shouldCreateLimitedResponseForSimpleUser() throws Exception { + public void shouldCreateLimitedResponseForSimpleUser() throws URISyntaxException { MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "Neo"); MockHttpResponse response = new MockHttpResponse(); @@ -217,7 +217,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreatePageForOnePageOnly() throws Exception { + public void shouldCreatePageForOnePageOnly() throws URISyntaxException { PageResult singletonPageResult = createSingletonPageResult(1); when(userManager.getPage(any(), eq(0), eq(10))).thenReturn(singletonPageResult); MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2); @@ -235,7 +235,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreatePageForMultiplePages() throws Exception { + public void shouldCreatePageForMultiplePages() throws URISyntaxException { PageResult singletonPageResult = createSingletonPageResult(3); when(userManager.getPage(any(), eq(1), eq(1))).thenReturn(singletonPageResult); MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "?page=1&pageSize=1"); From efc72b21ec9c0e3d444df7081abdcb01b0fef613 Mon Sep 17 00:00:00 2001 From: Philipp Czora Date: Thu, 9 Aug 2018 11:21:29 +0200 Subject: [PATCH 13/13] Minor changes due to review --- .../sonia/scm/repository/api/BranchesCommandBuilder.java | 4 ---- .../java/sonia/scm/api/v2/resources/BranchRootResource.java | 5 +---- .../java/sonia/scm/api/v2/resources/RepositoryResource.java | 1 - .../src/test/java/sonia/scm/security/BearerRealmTest.java | 2 -- 4 files changed, 1 insertion(+), 11 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java index 784c9534fd..5a456de936 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java @@ -29,11 +29,8 @@ * */ - package sonia.scm.repository.api; -//~--- non-JDK imports -------------------------------------------------------- - import com.google.common.base.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +46,6 @@ import sonia.scm.repository.spi.BranchesCommand; import java.io.IOException; -//~--- JDK imports ------------------------------------------------------------ /** * The branches command list all repository branches.
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index 293827b0cf..b06b5b9eba 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -56,10 +56,8 @@ public class BranchRootResource { @ResponseCode(code = 500, condition = "internal server error") }) public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { - System.out.println("in branch resource"); try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); - System.out.println("found branches: " + branches); return branches.getBranches() .stream() .filter(branch -> branchName.equals(branch.getName())) @@ -71,7 +69,6 @@ public class BranchRootResource { } catch (CommandNotSupportedException ex) { return Response.status(Response.Status.BAD_REQUEST).build(); } catch (RepositoryNotFoundException e) { - System.out.println("got RepositoryNotFoundException"); return Response.status(Response.Status.NOT_FOUND).build(); } } @@ -79,7 +76,7 @@ public class BranchRootResource { @Path("{branch}/changesets/") @GET public Response history(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) { - return null; + throw new UnsupportedOperationException(); } /** 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 b4e427b9d5..43aa6de608 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 @@ -138,7 +138,6 @@ public class RepositoryResource { @Path("branches/") public BranchRootResource branches(@PathParam("namespace") String namespace, @PathParam("name") String name) { - System.out.println("got request for branches"); return branchRootResource.get(); } diff --git a/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java index 8176ed453c..e6061e61a1 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/BearerRealmTest.java @@ -72,8 +72,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.when; -//~--- JDK imports ------------------------------------------------------------ - /** * Unit tests for {@link BearerRealm}. *