Skip to content

Commit 2066c4b

Browse files
committed
''API inconsistency for release time between JsonParser and JsonPrinter
1 parent 08b9c86 commit 2066c4b

3 files changed

Lines changed: 46 additions & 1 deletion

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
## Bug
2+
API inconsistency for release time between JsonParser/JsonPrinter has been addressed. For backward compatibility new "releaseTime" and original "releaseDate" will be allowed in the Json giving preferance to the new "releaseTime" field. Also, "releaseTime" field will populate the db with date/time. The original "releaseDate" field will continue to truncated to the date only.

src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,13 @@ public DatasetVersion parseDatasetVersion(JsonObject obj, DatasetVersion dsv) th
460460
if (versionStateStr != null) {
461461
dsv.setVersionState(DatasetVersion.VersionState.valueOf(versionStateStr));
462462
}
463-
dsv.setReleaseTime(parseDate(obj.getString("releaseDate", null)));
463+
// Checking "releaseTime" to be consistent with JsonPrinter which outputs this field as 'releaseTime' with full timestamp
464+
if (obj.containsKey("releaseTime")) {
465+
dsv.setReleaseTime(parseTime(obj.getString("releaseTime", null)));
466+
} else {
467+
// Accept 'releaseDate' to remain backward compatible. This truncates to date only!
468+
dsv.setReleaseTime(parseDate(obj.getString("releaseDate", null)));
469+
}
464470
dsv.setLastUpdateTime(parseTime(obj.getString("lastUpdateTime", null)));
465471
dsv.setCreateTime(parseTime(obj.getString("createTime", null)));
466472
dsv.setArchiveTime(parseTime(obj.getString("archiveTime", null)));

src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
2222
import edu.harvard.iq.dataverse.license.LicenseServiceBean;
2323
import edu.harvard.iq.dataverse.mocks.MockDatasetFieldSvc;
24+
import edu.harvard.iq.dataverse.pidproviders.doi.AbstractDOIProvider;
2425
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
2526
import org.junit.jupiter.api.AfterAll;
2627
import org.junit.jupiter.api.Assumptions;
@@ -43,6 +44,7 @@
4344
import java.io.StringReader;
4445
import java.math.BigDecimal;
4546
import java.text.ParseException;
47+
import java.time.Instant;
4648
import java.util.*;
4749

4850
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -918,4 +920,39 @@ public void testGuestbookResponse() throws JsonParseException {
918920
assertTrue(e.getMessage().contains("Guestbook Response entry is required but not present"));
919921
}
920922
}
923+
924+
// Testing that output of JsonPrinter can be used as input to JsonParser
925+
// Additional tests can be added but this was created for Issue: API inconsistency for release time between JsonParser/JsonPrinter #11594
926+
@Test
927+
public void testDatasetVersionJsonPrinterJsonParser() throws JsonParseException {
928+
// Set up to prevent NullPointerExceptions
929+
String sut = "foobar";
930+
DatasetType foobar = new DatasetType();
931+
foobar.setName(sut);
932+
TermsOfUseAndAccess termsOfUseAndAccess = new TermsOfUseAndAccess();
933+
termsOfUseAndAccess.setTermsOfUse("TOU");
934+
settingsSvc = new MockSettingsSvc();
935+
DatasetType datasetType = new DatasetType();
936+
datasetType.setName(DatasetType.DEFAULT_DATASET_TYPE);
937+
datasetType.setId(1l);
938+
Mockito.when(datasetTypeService.getByName(DatasetType.DEFAULT_DATASET_TYPE)).thenReturn(datasetType);
939+
JsonParser jsonParser = new JsonParser(datasetFieldTypeSvc, null, settingsSvc, licenseService, datasetTypeService);
940+
941+
Dataset ds = new Dataset();
942+
DatasetVersion dsv1 = new DatasetVersion();
943+
DatasetVersion dsv2 = new DatasetVersion();
944+
945+
ds.setGlobalId(new GlobalId(AbstractDOIProvider.DOI_PROTOCOL,"10.5072","FK2/BYM3IW", "/", AbstractDOIProvider.DOI_RESOLVER_URL, null));
946+
ds.setDatasetType(foobar);
947+
dsv1.setDataset(ds);
948+
dsv1.setReleaseTime(Date.from(Instant.now()));
949+
dsv1.setVersionState(DatasetVersion.VersionState.RELEASED);
950+
dsv1.setTermsOfUseAndAccess(termsOfUseAndAccess);
951+
952+
// Test output of JsonPrinter can be used as input to JsonParser
953+
JsonObject json = JsonPrinter.json(dsv1, false).build();
954+
jsonParser.parseDatasetVersion(json, dsv2);
955+
956+
assertEquals(dsv1.getReleaseTime().toString(), dsv2.getReleaseTime().toString());
957+
}
921958
}

0 commit comments

Comments
 (0)