Use namespace and name for exceptions instead of technical id

This commit is contained in:
René Pfeuffer
2019-03-05 10:42:06 +01:00
parent 4e6dd62cb5
commit 8928ca9676
6 changed files with 56 additions and 25 deletions

View File

@@ -35,6 +35,7 @@ import java.net.URL;
import static java.util.Collections.singletonList;
import static java.util.stream.Stream.of;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK;
@@ -196,6 +197,26 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
verify(repositoryManager).modify(anyObject());
}
@Test
public void shouldHandleUpdateForConcurrentlyChangedRepository() throws Exception {
mockRepository("space", "repo", 1337);
URL url = Resources.getResource("sonia/scm/api/v2/repository-test-update.json");
byte[] repository = Resources.toByteArray(url);
MockHttpRequest request = MockHttpRequest
.put("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo")
.contentType(VndMediaType.REPOSITORY)
.content(repository);
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
assertEquals(SC_CONFLICT, response.getStatus());
assertThat(response.getContentAsString()).contains("space/repo");
verify(repositoryManager, never()).modify(anyObject());
}
@Test
public void shouldHandleUpdateForExistingRepositoryForChangedNamespace() throws Exception {
mockRepository("wrong", "repo");
@@ -313,9 +334,16 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
}
private Repository mockRepository(String namespace, String name) {
return mockRepository(namespace, name, 0);
}
private Repository mockRepository(String namespace, String name, long lastModified) {
Repository repository = new Repository();
repository.setNamespace(namespace);
repository.setName(name);
if (lastModified > 0) {
repository.setLastModified(lastModified);
}
String id = namespace + "-" + name;
repository.setId(id);
when(repositoryManager.get(new NamespaceAndName(namespace, name))).thenReturn(repository);

View File

@@ -123,9 +123,12 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase<Repository> {
createTestRepository();
}
@Test(expected = AlreadyExistsException.class)
@Test
public void testCreateExisting() {
createTestRepository();
Repository testRepository = createTestRepository();
String expectedNamespaceAndName = testRepository.getNamespaceAndName().logString();
thrown.expect(AlreadyExistsException.class);
thrown.expectMessage(expectedNamespaceAndName);
createTestRepository();
}
@@ -392,18 +395,6 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase<Repository> {
assertNotNull(repository.getNamespace());
}
private void createUriTestRepositories(RepositoryManager m) {
mockedNamespace = "namespace";
createRepository(m, new Repository("1", "hg", "namespace", "scm"));
createRepository(m, new Repository("2", "hg", "namespace", "scm-test"));
createRepository(m, new Repository("3", "git", "namespace", "test-1"));
createRepository(m, new Repository("4", "git", "namespace", "test-2"));
mockedNamespace = "other";
createRepository(m, new Repository("1", "hg", "other", "scm"));
createRepository(m, new Repository("2", "hg", "other", "scm-test"));
}
//~--- methods --------------------------------------------------------------
@Override