Skip to content

Commit

Permalink
fixes for json output
Browse files Browse the repository at this point in the history
  • Loading branch information
stevenwinship committed Oct 22, 2024
1 parent 842f04b commit c5adf92
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1839,7 +1839,7 @@ public JsonObjectBuilder compareVersionsAsJson() {
JsonObjectBuilder job = new NullSafeJsonBuilder();
JsonObjectBuilder jobVersion = new NullSafeJsonBuilder();
jobVersion.add("versionNumber", originalVersion.getFriendlyVersionNumber());
jobVersion.add("createdDate", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(originalVersion.getCreateTime()));
jobVersion.add("lastUpdatedDate", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(originalVersion.getLastUpdateTime()));
job.add("oldVersion", jobVersion);
jobVersion = new NullSafeJsonBuilder();
jobVersion.add("versionNumber", newVersion.getFriendlyVersionNumber());
Expand Down Expand Up @@ -1879,22 +1879,36 @@ public JsonObjectBuilder compareVersionsAsJson() {
if (!addedFiles.isEmpty()) {
JsonArrayBuilder jab = Json.createArrayBuilder();
addedFiles.forEach(f -> {
jab.add(new NullSafeJsonBuilder().add("fileName", f.getDataFile().getDisplayName()));
jab.add(filesDiffJson(f));
});
job.add("filesAdded", jab);
}
if (!removedFiles.isEmpty()) {
JsonArrayBuilder jab = Json.createArrayBuilder();
removedFiles.forEach(f -> {
jab.add(new NullSafeJsonBuilder().add("fileName", f.getDataFile().getDisplayName()));
jab.add(filesDiffJson(f));
});
job.add("filesRemoved", jab);
}
if (!replacedFiles.isEmpty()) {
JsonArrayBuilder jabReplaced = Json.createArrayBuilder();
replacedFiles.forEach(fm -> {
if (fm.length == 2) {
JsonObjectBuilder jobReplaced = new NullSafeJsonBuilder();
jobReplaced.add("oldFile", filesDiffJson(fm[0]));
jobReplaced.add("newFile", filesDiffJson(fm[1]));
jabReplaced.add(jobReplaced);
}
});
job.add("filesReplaced", jabReplaced);
}
if (!changedFileMetadata.isEmpty()) {
changedFileMetadataDiff.entrySet().forEach(entry -> {
JsonArrayBuilder jab = Json.createArrayBuilder();
JsonObjectBuilder jobChanged = new NullSafeJsonBuilder();
jobChanged.add("fileName", entry.getKey().getDataFile().getDisplayName());
jobChanged.add(entry.getKey().getDataFile().getChecksumType().name(), entry.getKey().getDataFile().getChecksumValue());
jobChanged.add("fileId", entry.getKey().getDataFile().getId());
entry.getValue().entrySet().forEach(e -> {
JsonObjectBuilder jobDiffField = new NullSafeJsonBuilder();
jobDiffField.add("fieldName",e.getKey());
Expand Down Expand Up @@ -1925,4 +1939,21 @@ public JsonObjectBuilder compareVersionsAsJson() {

return job;
}
private JsonObjectBuilder filesDiffJson(FileMetadata fileMetadata) {
NullSafeJsonBuilder job = new NullSafeJsonBuilder();
DataFile df = fileMetadata.getDataFile();
List<DataFileTag> tags = df.getTags();
job.add("fileName", df.getDisplayName())
.add(df.getChecksumType().name(), df.getChecksumValue())
.add("type",df.getContentType())
.add("fileId", df.getId())
.add("description", df.getDescription())
.add("isRestricted", df.isRestricted());
if (df.getTags() != null && !df.getTags().isEmpty()) {
JsonArrayBuilder jabTags = Json.createArrayBuilder();
df.getTags().forEach(t -> jabTags.add(t.getTypeLabel()));
job.add("tags", jabTags);
}
return job;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

public class DatasetVersionDifferenceTest {

static Long fileId = Long.valueOf(0);
@Test
public void testCompareVersionsAsJson() {

Expand All @@ -30,15 +31,23 @@ public void testCompareVersionsAsJson() {
TermsOfUseAndAccess toa = new TermsOfUseAndAccess();
toa.setDisclaimer("disclaimer");
dv2.setTermsOfUseAndAccess(toa);
dv2.getFileMetadatas().remove(1);
DatasetField dsf = new DatasetField();
dsf.setDatasetFieldType(new DatasetFieldType("Author", DatasetFieldType.FieldType.TEXT, true));
MetadataBlock mb = new MetadataBlock();
mb.setDisplayName("testMetadataBlock");
dsf.getDatasetFieldType().setMetadataBlock(mb);
dsf.setSingleValue("TEST");
dv2.getDatasetFields().add(dsf);
dv2.getFileMetadatas().get(2).setRestricted(!dv2.getFileMetadatas().get(2).isRestricted());
// modify file at index 0
dv2.getFileMetadatas().get(0).setRestricted(!dv2.getFileMetadatas().get(2).isRestricted());

FileMetadata addedFile = initFile(dv2); // add a new file
FileMetadata removedFile = dv2.getFileMetadatas().get(1); // remove the second file
dv2.getFileMetadatas().remove(1);
FileMetadata replacedFile = dv2.getFileMetadatas().get(1); // the third file is now at index 1 since the second file was removed
FileMetadata replacementFile = initFile(dv2, replacedFile.getDataFile().getId()); // replace the third file with a new file
dv2.getFileMetadatas().remove(1);

DatasetVersionDifference dvd = new DatasetVersionDifference(dv2, dv1);

JsonObjectBuilder json = dvd.compareVersionsAsJson();
Expand All @@ -47,7 +56,11 @@ public void testCompareVersionsAsJson() {

JsonPath dataFile = JsonPath.from(JsonUtil.prettyPrint(obj));
assertTrue("TEST".equalsIgnoreCase(dataFile.getString("metadataChanges[0].changed[0].newValue")));
assertTrue("true".equalsIgnoreCase(dataFile.getString("fileChanges[0].changes[0].newValue")));
assertTrue(addedFile.getLabel().equalsIgnoreCase(dataFile.getString("filesAdded[0].fileName")));
assertTrue(removedFile.getLabel().equalsIgnoreCase(dataFile.getString("filesRemoved[0].fileName")));
assertTrue(replacedFile.getLabel().equalsIgnoreCase(dataFile.getString("filesReplaced[0].oldFile.fileName")));
assertTrue(replacementFile.getLabel().equalsIgnoreCase(dataFile.getString("filesReplaced[0].newFile.fileName")));
assertTrue("true".equalsIgnoreCase(dataFile.getString("fileChanges[0].changed[0].newValue")));
assertTrue("disclaimer".equalsIgnoreCase(dataFile.getString("TermsOfAccess.changed[0].newValue")));
}
private DatasetVersion initDatasetVersion(Long id, Dataset ds, DatasetVersion.VersionState vs) {
Expand All @@ -63,32 +76,44 @@ private DatasetVersion initDatasetVersion(Long id, Dataset ds, DatasetVersion.Ve
}
dv.setId(id);
dv.setCreateTime(now());
dv.setLastUpdateTime(now());
dv.setTermsOfUseAndAccess(new TermsOfUseAndAccess());
dv.setFileMetadatas(initFiles(dv));
return dv;
}
private List<FileMetadata> initFiles(DatasetVersion dsv) {
List<FileMetadata> fileMetadata = new ArrayList<>();
for (int i=0; i < 4; i++) {
FileMetadata fm = new FileMetadata();
fm.setDatasetVersion(dsv);
DataFile df = new DataFile();
DataTable dt = new DataTable();
dt.setOriginalFileName("filename"+i+".txt");
df.setId(Long.valueOf(i));
df.setDescription("Desc"+i);
df.setRestricted(false);
df.setFilesize(100 + i);
df.setChecksumType(DataFile.ChecksumType.MD5);
df.setChecksumValue("value"+i);
df.setDataTable(dt);
df.setOwner(dsv.getDataset());
fm.setDataFile(df);
fm.setLabel("Label"+i);
fileMetadata.add(fm);
df.setFileMetadatas(fileMetadata);

List<FileMetadata> fileMetadatas = new ArrayList<>();
fileId = 0L;
for (int i=0; i < 10; i++) {
FileMetadata fm = initFile(dsv);
fileMetadatas.add(fm);
}
return fileMetadata;
return fileMetadatas;
}
private FileMetadata initFile(DatasetVersion dsv) {
return initFile(dsv, null);
}
private FileMetadata initFile(DatasetVersion dsv, Long prevId) {
Long id = fileId++;
FileMetadata fm = new FileMetadata();
DataFile df = new DataFile();
fm.setDatasetVersion(dsv);
DataTable dt = new DataTable();
dt.setOriginalFileName("filename"+id+".txt");
df.setId(id);
df.setDescription("Desc"+id);
df.setRestricted(false);
df.setFilesize(100 + id);
df.setChecksumType(DataFile.ChecksumType.MD5);
df.setChecksumValue("value"+id);
df.setDataTable(dt);
df.setOwner(dsv.getDataset());
df.getFileMetadatas().add(fm);
df.setPreviousDataFileId(prevId);
fm.setId(id);
fm.setDataFile(df);
fm.setLabel("Label"+id);
dsv.getFileMetadatas().add(fm);
return fm;
}
}
37 changes: 31 additions & 6 deletions src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -5170,7 +5170,7 @@ public void testGetCanDownloadAtLeastOneFile() {
}

@Test
public void testCompareDatasetVersionsAPI() {
public void testCompareDatasetVersionsAPI() throws InterruptedException {

Response createUser = UtilIT.createRandomUser();
assertEquals(200, createUser.getStatusCode());
Expand Down Expand Up @@ -5202,6 +5202,12 @@ public void testCompareDatasetVersionsAPI() {
.statusCode(OK.getStatusCode());
Integer deleteFileId = UtilIT.getDataFileIdFromResponse(uploadResponse);

pathToFile = "src/main/webapp/resources/images/fav/favicon-16x16.png";
uploadResponse = UtilIT.uploadFileViaNative(String.valueOf(datasetId), pathToFile, apiToken);
uploadResponse.then().assertThat()
.statusCode(OK.getStatusCode());
Integer replaceFileId = UtilIT.getDataFileIdFromResponse(uploadResponse);

Response publishDataverse = UtilIT.publishDataverseViaSword(dataverseAlias, apiToken);
assertEquals(200, publishDataverse.getStatusCode());

Expand All @@ -5214,10 +5220,20 @@ public void testCompareDatasetVersionsAPI() {
addDataToPublishedVersion.then().assertThat().statusCode(OK.getStatusCode());

// Test adding a file
pathToFile = "src/main/webapp/resources/images/dataverseproject.png";
uploadResponse = UtilIT.uploadFileViaNative(String.valueOf(datasetId), pathToFile, apiToken);
uploadResponse.prettyPrint();
uploadResponse.then().assertThat()
pathToFile = "src/test/resources/tab/test.tab";
Response uploadTabularFileResponse = UtilIT.uploadFileViaNative(Integer.toString(datasetId), pathToFile, Json.createObjectBuilder().build(), apiToken);
uploadTabularFileResponse.prettyPrint();
uploadTabularFileResponse.then().assertThat()
.statusCode(OK.getStatusCode());
Integer addedFileId = UtilIT.getDataFileIdFromResponse(uploadTabularFileResponse);

// Ensure tabular file is ingested
sleep(2000);

String tabularTagName = "Survey";
Response setFileTabularTagsResponse = UtilIT.setFileTabularTags(String.valueOf(addedFileId), apiToken, List.of(tabularTagName));
setFileTabularTagsResponse.prettyPrint();
setFileTabularTagsResponse.then().assertThat()
.statusCode(OK.getStatusCode());

// Test removing a file
Expand All @@ -5226,6 +5242,12 @@ public void testCompareDatasetVersionsAPI() {
uploadResponse.then().assertThat()
.statusCode(NO_CONTENT.getStatusCode());

// Test Replacing a file
Response replaceResponse = UtilIT.replaceFile(String.valueOf(replaceFileId), "src/main/webapp/resources/images/fav/favicon-32x32.png", apiToken);
replaceResponse.prettyPrint();
replaceResponse.then().assertThat()
.statusCode(OK.getStatusCode());

// Test modify by restricting the file
Response restrictResponse = UtilIT.restrictFile(modifyFileId.toString(), true, apiToken);
restrictResponse.prettyPrint();
Expand All @@ -5250,10 +5272,13 @@ public void testCompareDatasetVersionsAPI() {
.body("data.metadataChanges[1].changed[0].fieldName", CoreMatchers.equalTo("Design Type"))
.body("data.metadataChanges[1].changed[0].oldValue", CoreMatchers.containsString(""))
.body("data.metadataChanges[1].changed[0].newValue", CoreMatchers.containsString("Parallel Group Design; Nested Case Control Design"))
.body("data.filesAdded[0].fileName", CoreMatchers.equalTo("dataverseproject.png"))
.body("data.filesAdded[0].fileName", CoreMatchers.equalTo("test.tab"))
.body("data.filesAdded[0].tags[0]", CoreMatchers.equalTo("Survey"))
.body("data.filesRemoved[0].fileName", CoreMatchers.equalTo("dataverseproject_logo.jpg"))
.body("data.fileChanges[0].fileName", CoreMatchers.equalTo("dataverse-icon-1200.png"))
.body("data.fileChanges[0].changed[0].newValue", CoreMatchers.equalTo("true"))
.body("data.filesReplaced[0].oldFile.fileName", CoreMatchers.equalTo("favicon-16x16.png"))
.body("data.filesReplaced[0].newFile.fileName", CoreMatchers.equalTo("favicon-32x32.png"))
.body("data.TermsOfAccess", CoreMatchers.notNullValue())
.statusCode(OK.getStatusCode());
}
Expand Down

0 comments on commit c5adf92

Please sign in to comment.