Skip to content

Commit 0256a0f

Browse files
Merge branch 'develop' into prodpatch-6.8-globus-no-locking
2 parents ccf04b3 + a042fc5 commit 0256a0f

File tree

4 files changed

+58
-13
lines changed

4 files changed

+58
-13
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
### Dataset version summaries API changedFileMetaData count fix
2+
3+
The endpoint ``{id}/versions/compareSummary`` was previously returning an incorrect count for
4+
the ``changedFileMetaData`` field.
5+
The logic for calculating this count has been fixed to accurately reflect the total number of file metadata changes
6+
across all files in the dataset version.
7+
8+
### Related issues
9+
10+
- https://github.com/IQSS/dataverse/issues/11921

src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,12 +1760,7 @@ private JsonObjectBuilder getFileSummaryAsJson(){
17601760
job.add("replaced", 0);
17611761
}
17621762

1763-
if (!changedFileMetadata.isEmpty()) {
1764-
job.add("changedFileMetaData", changedFileMetadata.size());
1765-
1766-
} else{
1767-
job.add("changedFileMetaData", 0);
1768-
}
1763+
job.add("changedFileMetaData", getTotalFileMetadataChangesCount());
17691764

17701765
if (!changedVariableMetadata.isEmpty()) {
17711766
job.add("changedVariableMetadata", changedVariableMetadata.size());
@@ -1907,4 +1902,26 @@ private JsonObjectBuilder filesDiffJson(FileMetadata fileMetadata) {
19071902
}
19081903
return job;
19091904
}
1905+
1906+
/**
1907+
* Calculates the total number of individual file metadata field changes
1908+
* across all files tracked in the {@code changedFileMetadataDiff} map.
1909+
*
1910+
* @return The total count of all file metadata field changes.
1911+
*/
1912+
private int getTotalFileMetadataChangesCount() {
1913+
int totalChanges = 0;
1914+
1915+
if (this.changedFileMetadataDiff == null) {
1916+
return 0;
1917+
}
1918+
1919+
for (Map<String, List<String>> fileSpecificDiffs : this.changedFileMetadataDiff.values()) {
1920+
if (fileSpecificDiffs != null) {
1921+
totalChanges += fileSpecificDiffs.size();
1922+
}
1923+
}
1924+
1925+
return totalChanges;
1926+
}
19101927
}

src/test/java/edu/harvard/iq/dataverse/DatasetVersionDifferenceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ public void testGetSummaryAsJson(){
447447
JsonPath dataFile = JsonPath.from(JsonUtil.prettyPrint(obj));
448448

449449
assertTrue("true".equalsIgnoreCase(dataFile.getString("termsAccessChanged")));
450-
assertEquals(2,(Long.parseLong(dataFile.getString("files.changedFileMetaData"))));
450+
assertEquals(1,(Long.parseLong(dataFile.getString("files.changedFileMetaData"))));
451451
assertEquals(0,(Long.parseLong(dataFile.getString("testMetadataBlock.deleted"))));
452452
assertEquals(1, (int) (Long.parseLong(dataFile.getString("testMetadataBlock.added"))));
453453
assertEquals(1,(Long.parseLong(dataFile.getString("files.added"))));

src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6612,12 +6612,21 @@ public void testSummaryDatasetVersionsDifferencesAPI() throws InterruptedExcepti
66126612
.add("Data")
66136613
);
66146614
JsonObject jsonObj = json.build();
6615+
66156616
String pathToFile = "src/main/webapp/resources/images/dataverse-icon-1200.png";
66166617
Response uploadResponse = UtilIT.uploadFileViaNative(String.valueOf(datasetId), pathToFile, jsonObj, apiToken);
66176618
uploadResponse.prettyPrint();
66186619
uploadResponse.then().assertThat()
66196620
.statusCode(OK.getStatusCode());
6620-
Integer modifyFileId = UtilIT.getDataFileIdFromResponse(uploadResponse);
6621+
Integer firstFileToModify = UtilIT.getDataFileIdFromResponse(uploadResponse);
6622+
6623+
pathToFile = "src/test/resources/images/coffeeshop.png";
6624+
uploadResponse = UtilIT.uploadFileViaNative(String.valueOf(datasetId), pathToFile, jsonObj, apiToken);
6625+
uploadResponse.prettyPrint();
6626+
uploadResponse.then().assertThat()
6627+
.statusCode(OK.getStatusCode());
6628+
Integer secondFileToModify = UtilIT.getDataFileIdFromResponse(uploadResponse);
6629+
66216630
pathToFile = "src/main/webapp/resources/images/dataverseproject_logo.jpg";
66226631
uploadResponse = UtilIT.uploadFileViaNative(String.valueOf(datasetId), pathToFile, jsonObj, apiToken);
66236632
uploadResponse.then().assertThat()
@@ -6670,9 +6679,18 @@ public void testSummaryDatasetVersionsDifferencesAPI() throws InterruptedExcepti
66706679
replaceResponse.then().assertThat()
66716680
.statusCode(OK.getStatusCode());
66726681

6673-
// Test modify by restricting the file
6674-
Response restrictResponse = UtilIT.restrictFile(modifyFileId.toString(), true, apiToken);
6675-
restrictResponse.prettyPrint();
6682+
// Test modify first file by adding a new category
6683+
Response setFileCategoriesResponse = UtilIT.setFileCategories(firstFileToModify.toString(), apiToken, List.of("Category"));
6684+
setFileCategoriesResponse.then().assertThat()
6685+
.statusCode(OK.getStatusCode());
6686+
6687+
// Test modify first file by restricting it
6688+
Response restrictResponse = UtilIT.restrictFile(firstFileToModify.toString(), true, apiToken);
6689+
restrictResponse.then().assertThat()
6690+
.statusCode(OK.getStatusCode());
6691+
6692+
// Test modify second file by restricting it
6693+
restrictResponse = UtilIT.restrictFile(secondFileToModify.toString(), true, apiToken);
66766694
restrictResponse.then().assertThat()
66776695
.statusCode(OK.getStatusCode());
66786696

@@ -6682,7 +6700,6 @@ public void testSummaryDatasetVersionsDifferencesAPI() throws InterruptedExcepti
66826700
updateTerms.then().assertThat()
66836701
.statusCode(OK.getStatusCode());
66846702

6685-
66866703
Response compareResponse = UtilIT.summaryDatasetVersionDifferences(datasetPersistentId, apiToken);
66876704
compareResponse.prettyPrint();
66886705

@@ -6701,7 +6718,8 @@ public void testSummaryDatasetVersionsDifferencesAPI() throws InterruptedExcepti
67016718
.body("data[0].summary.'Life Sciences Metadata'.added", equalTo(2))
67026719
.body("data[0].summary.'Life Sciences Metadata'.deleted", equalTo(0))
67036720
.body("data[0].summary.files.added", equalTo(1))
6704-
.body("data[0].summary.files.changedFileMetaData", equalTo(2))
6721+
// Expected total file metadata field changes: 3 (File 1 has 2 modifications + File 2 has 1 modification)
6722+
.body("data[0].summary.files.changedFileMetaData", equalTo(3))
67056723
.statusCode(OK.getStatusCode());
67066724

67076725
//user with no privileges will only see the published version

0 commit comments

Comments
 (0)