From 0738cb1ff4cd903d04b8e7d451388c0bc7ce344f Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 17 Jun 2020 15:40:39 +0200 Subject: [PATCH 1/3] find single changeset for shortened changesetId --- .../ui-webapp/src/repos/modules/changesets.ts | 2 +- .../v2/resources/ChangesetRootResource.java | 22 +++++++++------ .../resources/ChangesetRootResourceTest.java | 28 ++++++++++++++++++- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/scm-ui/ui-webapp/src/repos/modules/changesets.ts b/scm-ui/ui-webapp/src/repos/modules/changesets.ts index 3b1380ee45..4cf2cd249f 100644 --- a/scm-ui/ui-webapp/src/repos/modules/changesets.ts +++ b/scm-ui/ui-webapp/src/repos/modules/changesets.ts @@ -204,7 +204,7 @@ export default function reducer( ...state[_key], byId: { ..._oldByIds, - [changeset.id]: changeset + [payload.id]: changeset } } }; 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 2f3d8e7eef..f370f2de5a 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 @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; @@ -154,15 +154,21 @@ public class ChangesetRootResource { .setStartChangeset(id) .setEndChangeset(id) .getChangesets(); - if (changesets != null && changesets.getChangesets() != null && !changesets.getChangesets().isEmpty()) { - Optional changeset = changesets.getChangesets().stream().filter(ch -> ch.getId().equals(id)).findFirst(); - if (!changeset.isPresent()) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - return Response.ok(changesetToChangesetDtoMapper.map(changeset.get(), repository)).build(); - } else { + + if (changesets == null || changesets.getChangesets() == null || changesets.getChangesets().isEmpty()) { return Response.status(Response.Status.NOT_FOUND).build(); } + Optional changeset = changesets + .getChangesets() + .stream() + .filter(c -> c.getId().startsWith(id)) + .findFirst(); + + if (!changeset.isPresent()) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + return Response.ok(changesetToChangesetDtoMapper.map(changeset.get(), repository)).build(); } } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java index 319ca0944d..18298c83ff 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java @@ -25,7 +25,6 @@ package sonia.scm.api.v2.resources; -import com.google.inject.util.Providers; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.support.SubjectThreadState; @@ -196,4 +195,31 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { assertTrue(response.getContentAsString().contains(String.format("\"description\":\"%s\"", commit))); } + @Test + public void shouldGetChangeSetForShortenedCommitId() throws Exception { + String id = "revision_123"; + Instant creationDate = Instant.now(); + String authorName = "name"; + String authorEmail = "em@i.l"; + String commit = "my branch commit"; + ChangesetPagingResult changesetPagingResult = mock(ChangesetPagingResult.class); + List changesetList = Lists.newArrayList(new Changeset(id, Date.from(creationDate).getTime(), new Person(authorName, authorEmail), commit)); + when(changesetPagingResult.getChangesets()).thenReturn(changesetList); + when(changesetPagingResult.getTotal()).thenReturn(1); + when(logCommandBuilder.setEndChangeset(anyString())).thenReturn(logCommandBuilder); + when(logCommandBuilder.setStartChangeset(anyString())).thenReturn(logCommandBuilder); + when(logCommandBuilder.getChangesets()).thenReturn(changesetPagingResult); + MockHttpRequest request = MockHttpRequest + .get(CHANGESET_URL + "rev") + .accept(VndMediaType.CHANGESET); + MockHttpResponse response = new MockHttpResponse(); + dispatcher.invoke(request, response); + assertEquals(200, response.getStatus()); + log.info("Response :{}", response.getContentAsString()); + assertTrue(response.getContentAsString().contains(String.format("\"id\":\"%s\"", id))); + assertTrue(response.getContentAsString().contains(String.format("\"name\":\"%s\"", authorName))); + assertTrue(response.getContentAsString().contains(String.format("\"mail\":\"%s\"", authorEmail))); + assertTrue(response.getContentAsString().contains(String.format("\"description\":\"%s\"", commit))); + } + } From 0b7e000860c514e86e87117e5fda4703618ccedb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 17 Jun 2020 16:26:21 +0200 Subject: [PATCH 2/3] simplified fetch of single changeset --- .../v2/resources/ChangesetRootResource.java | 25 ++++-------- .../resources/ChangesetRootResourceTest.java | 40 ++++++------------- 2 files changed, 19 insertions(+), 46 deletions(-) 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 f370f2de5a..723dc91b38 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 @@ -50,6 +50,9 @@ import javax.ws.rs.core.Response; import java.io.IOException; import java.util.Optional; +import static sonia.scm.ContextEntry.ContextBuilder.entity; +import static sonia.scm.NotFoundException.notFound; + @Slf4j public class ChangesetRootResource { @@ -150,25 +153,11 @@ public class ChangesetRootResource { try (RepositoryService repositoryService = serviceFactory.create(new NamespaceAndName(namespace, name))) { Repository repository = repositoryService.getRepository(); RepositoryPermissions.read(repository).check(); - ChangesetPagingResult changesets = repositoryService.getLogCommand() - .setStartChangeset(id) - .setEndChangeset(id) - .getChangesets(); - - if (changesets == null || changesets.getChangesets() == null || changesets.getChangesets().isEmpty()) { - return Response.status(Response.Status.NOT_FOUND).build(); + Changeset changeset = repositoryService.getLogCommand().getChangeset(id); + if (changeset == null) { + throw notFound(entity(Changeset.class, id).in(repository)); } - Optional changeset = changesets - .getChangesets() - .stream() - .filter(c -> c.getId().startsWith(id)) - .findFirst(); - - if (!changeset.isPresent()) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - - return Response.ok(changesetToChangesetDtoMapper.map(changeset.get(), repository)).build(); + return Response.ok(changesetToChangesetDtoMapper.map(changeset, repository)).build(); } } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java index 18298c83ff..55ad6871c7 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; +import com.google.inject.util.Providers; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.support.SubjectThreadState; @@ -175,20 +176,18 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { String authorName = "name"; String authorEmail = "em@i.l"; String commit = "my branch commit"; - ChangesetPagingResult changesetPagingResult = mock(ChangesetPagingResult.class); - List changesetList = Lists.newArrayList(new Changeset(id, Date.from(creationDate).getTime(), new Person(authorName, authorEmail), commit)); - when(changesetPagingResult.getChangesets()).thenReturn(changesetList); - when(changesetPagingResult.getTotal()).thenReturn(1); - when(logCommandBuilder.setEndChangeset(anyString())).thenReturn(logCommandBuilder); - when(logCommandBuilder.setStartChangeset(anyString())).thenReturn(logCommandBuilder); - when(logCommandBuilder.getChangesets()).thenReturn(changesetPagingResult); + + when(logCommandBuilder.getChangeset(id)).thenReturn( + new Changeset(id, Date.from(creationDate).getTime(), new Person(authorName, authorEmail), commit) + ); + MockHttpRequest request = MockHttpRequest .get(CHANGESET_URL + id) .accept(VndMediaType.CHANGESET); MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response); + assertEquals(200, response.getStatus()); - log.info("Response :{}", response.getContentAsString()); assertTrue(response.getContentAsString().contains(String.format("\"id\":\"%s\"", id))); assertTrue(response.getContentAsString().contains(String.format("\"name\":\"%s\"", authorName))); assertTrue(response.getContentAsString().contains(String.format("\"mail\":\"%s\"", authorEmail))); @@ -196,30 +195,15 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { } @Test - public void shouldGetChangeSetForShortenedCommitId() throws Exception { - String id = "revision_123"; - Instant creationDate = Instant.now(); - String authorName = "name"; - String authorEmail = "em@i.l"; - String commit = "my branch commit"; - ChangesetPagingResult changesetPagingResult = mock(ChangesetPagingResult.class); - List changesetList = Lists.newArrayList(new Changeset(id, Date.from(creationDate).getTime(), new Person(authorName, authorEmail), commit)); - when(changesetPagingResult.getChangesets()).thenReturn(changesetList); - when(changesetPagingResult.getTotal()).thenReturn(1); - when(logCommandBuilder.setEndChangeset(anyString())).thenReturn(logCommandBuilder); - when(logCommandBuilder.setStartChangeset(anyString())).thenReturn(logCommandBuilder); - when(logCommandBuilder.getChangesets()).thenReturn(changesetPagingResult); + public void shouldReturnNotFoundForNonExistingChangeset() throws Exception { MockHttpRequest request = MockHttpRequest - .get(CHANGESET_URL + "rev") + .get(CHANGESET_URL + "abcd") .accept(VndMediaType.CHANGESET); + MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response); - assertEquals(200, response.getStatus()); - log.info("Response :{}", response.getContentAsString()); - assertTrue(response.getContentAsString().contains(String.format("\"id\":\"%s\"", id))); - assertTrue(response.getContentAsString().contains(String.format("\"name\":\"%s\"", authorName))); - assertTrue(response.getContentAsString().contains(String.format("\"mail\":\"%s\"", authorEmail))); - assertTrue(response.getContentAsString().contains(String.format("\"description\":\"%s\"", commit))); + + assertEquals(404, response.getStatus()); } } From c16c6e006e9da3f8fdc2c29baa6f67c4a62a41ae Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 17 Jun 2020 17:25:41 +0200 Subject: [PATCH 3/3] removes unused import --- .../java/sonia/scm/api/v2/resources/ChangesetRootResource.java | 1 - 1 file changed, 1 deletion(-) 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 723dc91b38..12151c8217 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 @@ -48,7 +48,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import java.io.IOException; -import java.util.Optional; import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound;