Peer-Review

This commit is contained in:
René Pfeuffer
2018-08-21 11:47:02 +02:00
parent 4e1778cac1
commit 778881a2fb
7 changed files with 64 additions and 61 deletions

View File

@@ -5,7 +5,7 @@ import java.text.MessageFormat;
public class PermissionAlreadyExistsException extends RepositoryException { public class PermissionAlreadyExistsException extends RepositoryException {
public PermissionAlreadyExistsException(Repository repository, String permissionName) { public PermissionAlreadyExistsException(Repository repository, String permissionName) {
super(MessageFormat.format("the permission {0} of the repository {1}/{2} is already exists", permissionName, repository.getNamespace(), repository.getName())); super(MessageFormat.format("the permission {0} of the repository {1}/{2} already exists", permissionName, repository.getNamespace(), repository.getName()));
} }
} }

View File

@@ -38,7 +38,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.Provider;
/** /**
* @author mkarray
* @since 2.0.0 * @since 2.0.0
*/ */
@Provider @Provider

View File

@@ -38,7 +38,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.Provider;
/** /**
* @author mkarray
* @since 2.0.0 * @since 2.0.0
*/ */
@Provider @Provider

View File

@@ -38,7 +38,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.Provider;
/** /**
* @author mkarray
* @since 2.0.0 * @since 2.0.0
*/ */
@Provider @Provider

View File

@@ -6,11 +6,25 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
import com.webcohesion.enunciate.metadata.rs.TypeHint; import com.webcohesion.enunciate.metadata.rs.TypeHint;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import sonia.scm.repository.*; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.PermissionAlreadyExistsException;
import sonia.scm.repository.PermissionNotFoundException;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryNotFoundException;
import sonia.scm.repository.RepositoryPermissions;
import sonia.scm.web.VndMediaType; import sonia.scm.web.VndMediaType;
import javax.inject.Inject; import javax.inject.Inject;
import javax.ws.rs.*; import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
@@ -58,7 +72,7 @@ public class PermissionRootResource {
checkPermissionAlreadyExists(permission, repository); checkPermissionAlreadyExists(permission, repository);
repository.getPermissions().add(dtoToModelMapper.map(permission)); repository.getPermissions().add(dtoToModelMapper.map(permission));
manager.modify(repository); manager.modify(repository);
return Response.created(URI.create(resourceLinks.permission().self(namespace,name,permission.getName()))).build(); return Response.created(URI.create(resourceLinks.permission().self(namespace, name, permission.getName()))).build();
} }
@@ -84,8 +98,8 @@ public class PermissionRootResource {
return Response.ok( return Response.ok(
repository.getPermissions() repository.getPermissions()
.stream() .stream()
.filter(permission -> StringUtils.isNotBlank(permission.getName()) && permission.getName().equals(permissionName)) .filter(permission -> permissionName.equals(permission.getName()))
.map(permission -> modelToDtoMapper.map(permission, new NamespaceAndName(repository.getNamespace(),repository.getName()))) .map(permission -> modelToDtoMapper.map(permission, new NamespaceAndName(repository.getNamespace(), repository.getName())))
.findFirst() .findFirst()
.orElseThrow(() -> new PermissionNotFoundException(repository, permissionName)) .orElseThrow(() -> new PermissionNotFoundException(repository, permissionName))
).build(); ).build();
@@ -113,7 +127,7 @@ public class PermissionRootResource {
Repository repository = checkPermission(namespace, name); Repository repository = checkPermission(namespace, name);
List<PermissionDto> permissionDtoList = repository.getPermissions() List<PermissionDto> permissionDtoList = repository.getPermissions()
.stream() .stream()
.map(per -> modelToDtoMapper.map(per, new NamespaceAndName(repository.getNamespace(),repository.getName()))) .map(per -> modelToDtoMapper.map(per, new NamespaceAndName(repository.getNamespace(), repository.getName())))
.collect(Collectors.toList()); .collect(Collectors.toList());
return Response.ok(permissionDtoList).build(); return Response.ok(permissionDtoList).build();
} }
@@ -185,7 +199,6 @@ public class PermissionRootResource {
} }
/** /**
* check if the actual user is permitted to manage the repository permissions * check if the actual user is permitted to manage the repository permissions
* return the repository if the user is permitted * return the repository if the user is permitted
@@ -207,6 +220,7 @@ public class PermissionRootResource {
/** /**
* throw exception if the user is not permitted * throw exception if the user is not permitted
*
* @param repository * @param repository
*/ */
protected void checkUserPermitted(Repository repository) { protected void checkUserPermitted(Repository repository) {

View File

@@ -38,7 +38,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.Provider;
/** /**
* @author mkarray
* @since 2.0.0 * @since 2.0.0
*/ */
@Provider @Provider

View File

@@ -2,8 +2,6 @@ package sonia.scm.api.v2.resources;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.sdorra.shiro.ShiroRule;
import com.github.sdorra.shiro.SubjectAware;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import lombok.ToString; import lombok.ToString;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -15,7 +13,6 @@ import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse; import org.jboss.resteasy.mock.MockHttpResponse;
import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.HttpRequest;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
@@ -25,7 +22,11 @@ import org.junit.runner.RunWith;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.repository.*; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Permission;
import sonia.scm.repository.PermissionType;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.web.VndMediaType; import sonia.scm.web.VndMediaType;
import java.io.IOException; import java.io.IOException;
@@ -42,14 +43,13 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import static org.junit.jupiter.api.DynamicTest.dynamicTest; import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks; import static org.mockito.MockitoAnnotations.initMocks;
@SubjectAware(
username = "trillian",
password = "secret",
configuration = "classpath:sonia/scm/repository/shiro.ini"
)
@RunWith(MockitoJUnitRunner.Silent.class) @RunWith(MockitoJUnitRunner.Silent.class)
@Slf4j @Slf4j
public class PermissionRootResourceTest { public class PermissionRootResourceTest {
@@ -93,9 +93,6 @@ public class PermissionRootResourceTest {
private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
@Rule
public ShiroRule shiro = new ShiroRule();
@Mock @Mock
private RepositoryManager repositoryManager; private RepositoryManager repositoryManager;
@@ -163,13 +160,13 @@ public class PermissionRootResourceTest {
} }
@Test @Test
public void shouldGetAllPermissions() { public void shouldGetAllPermissions() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
assertGettingExpectedPermissions(ImmutableList.copyOf(TEST_PERMISSIONS)); assertGettingExpectedPermissions(ImmutableList.copyOf(TEST_PERMISSIONS));
} }
@Test @Test
public void shouldGetPermissionByName() { public void shouldGetPermissionByName() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission expectedPermission = TEST_PERMISSIONS.get(0); Permission expectedPermission = TEST_PERMISSIONS.get(0);
assertExpectedRequest(requestGETPermission assertExpectedRequest(requestGETPermission
@@ -192,7 +189,7 @@ public class PermissionRootResourceTest {
} }
@Test @Test
public void shouldGetCreatedPermissions() { public void shouldGetCreatedPermissions() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission newPermission = new Permission("new_group_perm", PermissionType.WRITE, true); Permission newPermission = new Permission("new_group_perm", PermissionType.WRITE, true);
ArrayList<Permission> permissions = Lists.newArrayList(TEST_PERMISSIONS); ArrayList<Permission> permissions = Lists.newArrayList(TEST_PERMISSIONS);
@@ -209,7 +206,7 @@ public class PermissionRootResourceTest {
} }
@Test @Test
public void shouldNotAddExistingPermission() { public void shouldNotAddExistingPermission() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission newPermission = TEST_PERMISSIONS.get(0); Permission newPermission = TEST_PERMISSIONS.get(0);
assertExpectedRequest(requestPOSTPermission assertExpectedRequest(requestPOSTPermission
@@ -219,7 +216,7 @@ public class PermissionRootResourceTest {
} }
@Test @Test
public void shouldGetUpdatedPermissions() { public void shouldGetUpdatedPermissions() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission modifiedPermission = TEST_PERMISSIONS.get(0); Permission modifiedPermission = TEST_PERMISSIONS.get(0);
// modify the type to owner // modify the type to owner
@@ -238,7 +235,7 @@ public class PermissionRootResourceTest {
@Test @Test
public void shouldDeletePermissions() { public void shouldDeletePermissions() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission deletedPermission = TEST_PERMISSIONS.get(0); Permission deletedPermission = TEST_PERMISSIONS.get(0);
ImmutableList<Permission> expectedPermissions = ImmutableList.copyOf(TEST_PERMISSIONS.subList(1, TEST_PERMISSIONS.size())); ImmutableList<Permission> expectedPermissions = ImmutableList.copyOf(TEST_PERMISSIONS.subList(1, TEST_PERMISSIONS.size()));
@@ -253,7 +250,7 @@ public class PermissionRootResourceTest {
} }
@Test @Test
public void deletingNotExistingPermissionShouldProcess() { public void deletingNotExistingPermissionShouldProcess() throws URISyntaxException {
authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS); authorizedUserHasARepositoryWithPermissions(TEST_PERMISSIONS);
Permission deletedPermission = TEST_PERMISSIONS.get(0); Permission deletedPermission = TEST_PERMISSIONS.get(0);
ImmutableList<Permission> expectedPermissions = ImmutableList.copyOf(TEST_PERMISSIONS.subList(1, TEST_PERMISSIONS.size())); ImmutableList<Permission> expectedPermissions = ImmutableList.copyOf(TEST_PERMISSIONS.subList(1, TEST_PERMISSIONS.size()));
@@ -275,7 +272,7 @@ public class PermissionRootResourceTest {
assertGettingExpectedPermissions(expectedPermissions); assertGettingExpectedPermissions(expectedPermissions);
} }
private void assertGettingExpectedPermissions(ImmutableList<Permission> expectedPermissions) { private void assertGettingExpectedPermissions(ImmutableList<Permission> expectedPermissions) throws URISyntaxException {
assertExpectedRequest(requestGETAllPermissions assertExpectedRequest(requestGETAllPermissions
.expectedResponseStatus(200) .expectedResponseStatus(200)
.responseValidator((response) -> { .responseValidator((response) -> {
@@ -337,17 +334,13 @@ public class PermissionRootResourceTest {
.map(entry -> dynamicTest("the endpoint " + entry.description + " should return the status code " + entry.expectedResponseStatus, () -> assertExpectedRequest(entry))); .map(entry -> dynamicTest("the endpoint " + entry.description + " should return the status code " + entry.expectedResponseStatus, () -> assertExpectedRequest(entry)));
} }
private MockHttpResponse assertExpectedRequest(ExpectedRequest entry) { private MockHttpResponse assertExpectedRequest(ExpectedRequest entry) throws URISyntaxException {
MockHttpResponse response = new MockHttpResponse(); MockHttpResponse response = new MockHttpResponse();
HttpRequest request = null; HttpRequest request = null;
try {
request = MockHttpRequest request = MockHttpRequest
.create(entry.method, "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + entry.path) .create(entry.method, "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + entry.path)
.content(entry.content) .content(entry.content)
.contentType(VndMediaType.PERMISSION); .contentType(VndMediaType.PERMISSION);
} catch (URISyntaxException e) {
fail(e.getMessage());
}
dispatcher.invoke(request, response); dispatcher.invoke(request, response);
log.info("Test the Request :{}", entry); log.info("Test the Request :{}", entry);
assertThat(entry.expectedResponseStatus) assertThat(entry.expectedResponseStatus)