From 69e1fc4002f38a4421490cd1de2a905c530e0203 Mon Sep 17 00:00:00 2001 From: Jared Whiklo Date: Thu, 9 Jun 2022 08:54:25 -0600 Subject: [PATCH] Use Set to deduplicate any extra versions (#1992) Resolves https://fedora-repository.atlassian.net/browse/FCREPO-3655 --- .../java/org/fcrepo/http/api/FedoraVersioning.java | 6 +++--- .../integration/http/api/FedoraVersioningIT.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/fcrepo-http-api/src/main/java/org/fcrepo/http/api/FedoraVersioning.java b/fcrepo-http-api/src/main/java/org/fcrepo/http/api/FedoraVersioning.java index e9175b27d5..e953c28e12 100644 --- a/fcrepo-http-api/src/main/java/org/fcrepo/http/api/FedoraVersioning.java +++ b/fcrepo-http-api/src/main/java/org/fcrepo/http/api/FedoraVersioning.java @@ -38,10 +38,10 @@ import java.net.URI; import java.time.Instant; import java.time.ZoneId; -import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.stream.Collectors; import static javax.ws.rs.core.Response.Status.METHOD_NOT_ALLOWED; @@ -179,7 +179,7 @@ public Response getVersionList(@HeaderParam("Accept") final String acceptValue) final String extUrl = identifierConverter().toDomain(externalPath()); final URI parentUri = URI.create(extUrl); - final List versionLinks = new ArrayList<>(); + final Set versionLinks = new HashSet<>(); versionLinks.add(Link.fromUri(parentUri).rel("original").build()); versionLinks.add(Link.fromUri(parentUri).rel("timegate").build()); // So we don't collect the children twice, store them in an array. diff --git a/fcrepo-http-api/src/test/java/org/fcrepo/integration/http/api/FedoraVersioningIT.java b/fcrepo-http-api/src/test/java/org/fcrepo/integration/http/api/FedoraVersioningIT.java index e6cff69079..d399e08a52 100644 --- a/fcrepo-http-api/src/test/java/org/fcrepo/integration/http/api/FedoraVersioningIT.java +++ b/fcrepo-http-api/src/test/java/org/fcrepo/integration/http/api/FedoraVersioningIT.java @@ -189,6 +189,18 @@ public void getTimeMapForContainerWithSingleVersion() throws Exception { verifyTimemapResponse(subjectUri, id, now()); } + @Test + public void testResponseForMultipleMementosInASecond() throws Exception { + final var v1 = now(); + createVersionedContainer(id); + TimeUnit.SECONDS.sleep(1); + + final var v2 = now(); + createMemento(subjectUri); + createMemento(subjectUri); + verifyTimemapResponse(subjectUri, id, new String[]{v1, v2}, v1, v2); + } + @Test public void getTimeMapFromBinaryWithMultipleVersions() throws Exception { final var v1 = now();