Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Edit Metadata API endpoint - support empty values #11273

Draft
wants to merge 31 commits into
base: develop
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
e5cfcbc
Refactor: Datasets.validateDatasetFieldValues
GPortas Feb 19, 2025
01cb7b4
Changed: dataset field validation logic moved to new DatasetFieldVali…
GPortas Feb 19, 2025
77f94d0
Changed: updated testAddUpdateDatasetViaNativeAPI IT
GPortas Feb 19, 2025
09089cd
Changed: using new DatasetFieldServiceBean method for knowing require…
GPortas Feb 20, 2025
aa5690a
Added: DatasetFieldValidatorTest and minor renamings
GPortas Feb 21, 2025
ac02c79
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Feb 21, 2025
fe77364
Stash: UpdateDatasetFieldsCommand WIP
GPortas Feb 24, 2025
3038fca
Fixed: missing jakarta ejb and inject annotations for DatasetFieldsVa…
GPortas Feb 24, 2025
3778021
Refactor: using UpdateDatasetFieldsCommand in editVersionMetadata API…
GPortas Feb 24, 2025
d5ad310
Changed: renamed bundle string
GPortas Feb 24, 2025
e12b62c
Fixed: DatasetsIT assertion
GPortas Feb 24, 2025
dfab42c
Stash: refactoring UpdateDatasetFieldsCommand
GPortas Feb 24, 2025
6a227f5
Refactor: UpdateDatasetFieldsCommand
GPortas Feb 24, 2025
aa2d49e
Stash: UpdateDatasetFieldsCommandTest WIP
GPortas Feb 25, 2025
0f00413
Stash: UpdateDatasetFieldsCommandTest happy path tests WIP
GPortas Feb 25, 2025
baa674e
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Feb 25, 2025
585bd61
Added: test cases to UpdateDatasetFieldsCommandTest
GPortas Feb 25, 2025
8dcacc2
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Feb 26, 2025
9c22b58
Added: controlled vocabulary test cases to UpdateDatasetFieldsCommand…
GPortas Feb 26, 2025
eea544a
Changed: resetDatasetField for compound fields behavior in UpdateData…
GPortas Feb 26, 2025
a1a3222
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Feb 26, 2025
d2075cf
Changed: restored resetDatasetField for compound fields behavior in U…
GPortas Feb 26, 2025
079ce4f
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Feb 27, 2025
7288d8b
Changed: allowing empty controlled vocabulary fields in edit metadata…
GPortas Mar 1, 2025
57c9855
Merge branch 'develop' of github.com:IQSS/dataverse into 11243-editme…
GPortas Mar 1, 2025
64e457d
Added: test cases to testAddUpdateDatasetViaNativeAPI
GPortas Mar 1, 2025
39615fd
Added: new mechanism in AbstractApiBean to detect outdated dataset up…
GPortas Mar 2, 2025
3902ef0
Added: test cases to testAddUpdateDatasetViaNativeAPI for sourceInter…
GPortas Mar 2, 2025
52ea3a2
Added: docs for sourceInternalVersionNumber query param
GPortas Mar 2, 2025
0865db0
Added: docs for edit metadata endpoint fields removal
GPortas Mar 2, 2025
96d84c8
Added: release notes for #11243
GPortas Mar 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added: test cases to UpdateDatasetFieldsCommandTest
  • Loading branch information
GPortas committed Feb 25, 2025
commit 585bd61ea7554e65aeec51ffae9c54a54c4d5320
Original file line number Diff line number Diff line change
Expand Up @@ -59,23 +59,123 @@ public void execute_invalidFields_shouldThrowException() {

CommandException exception = assertThrows(InvalidCommandArgumentsException.class, () -> sut.execute(commandContextMock));

assertEquals(
BundleUtil.getStringFromBundle("updateDatasetFieldsCommand.api.processDatasetUpdate.parseError", List.of("validation error")),
exception.getMessage()
);
assertEquals(BundleUtil.getStringFromBundle("updateDatasetFieldsCommand.api.processDatasetUpdate.parseError", List.of("validation error")),
exception.getMessage());
}

@Test
public void execute_withValidFields_updatesFields() throws CommandException {
List<DatasetField> testUpdatedFields = new ArrayList<>();
sut = new UpdateDatasetFieldsCommand(datasetMock, testUpdatedFields, true, dataverseRequestStub, updateDatasetVersionCommandStub);
public void execute_withSingleDatasetField_replaceDataTrue_updatesField() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, false);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "updated");

sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, true, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();

assertEquals("updated", result.getLatestVersion().getDatasetField(fieldType).getValue());
}

@Test
public void execute_withSingleEmptyDatasetField_replaceDataTrue_updatesFieldToEmpty() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, false);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "");

sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, true, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();

assertTrue(result.getLatestVersion().getDatasetField(fieldType).isEmpty());
}

@Test
public void execute_withSingleDatasetField_replaceDataFalse_doesNotUpdateField() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, false);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "updated");

sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, false, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();

assertEquals("original", result.getLatestVersion().getDatasetField(fieldType).getValue());
}

@Test
public void execute_withMultipleDatasetField_replaceDataFalse_updatesField() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, true);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "updated");

sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, false, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();

assertEquals(2, result.getLatestVersion().getDatasetField(fieldType).getDatasetFieldValues().size());
}

@Test
public void execute_withMultipleDatasetField_replaceDataTrue_updatesField() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, true);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "updated");

when(datasetFieldsValidatorMock.validateFields(testUpdatedFields, datasetVersionMock)).thenReturn("");
when(datasetVersionMock.getDatasetFields()).thenReturn(new ArrayList<>());
sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, true, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();

assertEquals(1, result.getLatestVersion().getDatasetField(fieldType).getDatasetFieldValues().size());
}

@Test
public void execute_withMultipleEmptyDatasetField_replaceDataTrue_updatesFieldToEmpty() throws CommandException {
DatasetFieldType fieldType = new DatasetFieldType("test", DatasetFieldType.FieldType.TEXT, true);
DatasetVersion datasetVersion = prepareDatasetVersionWithSingleValueField(fieldType, "original");
List<DatasetField> updatedFields = createUpdatedSingleValueField(fieldType, "");

sut = new UpdateDatasetFieldsCommand(datasetMock, updatedFields, true, dataverseRequestStub, updateDatasetVersionCommandStub);
when(datasetFieldsValidatorMock.validateFields(updatedFields, datasetVersion)).thenReturn("");

Dataset result = sut.execute(commandContextMock);
verify(commandContextMock).engine();
assertNotNull(result);

assertTrue(result.getLatestVersion().getDatasetField(fieldType).isEmpty());
}

private DatasetVersion prepareDatasetVersionWithSingleValueField(DatasetFieldType fieldType, String originalValue) {
DatasetVersion datasetVersion = new DatasetVersion();
datasetVersion.setTermsOfUseAndAccess(new TermsOfUseAndAccess());

List<DatasetField> fields = new ArrayList<>();
DatasetField field = new DatasetField();
field.setDatasetFieldType(fieldType);
field.setSingleValue(originalValue);
fields.add(field);
datasetVersion.setDatasetFields(fields);

when(datasetMock.getOrCreateEditVersion()).thenReturn(datasetVersion);
when(datasetMock.getLatestVersion()).thenReturn(datasetVersion);

return datasetVersion;
}

private List<DatasetField> createUpdatedSingleValueField(DatasetFieldType fieldType, String updatedValue) {
List<DatasetField> updatedFields = new ArrayList<>();
DatasetField updatedField = new DatasetField();
updatedField.setDatasetFieldType(fieldType);
updatedField.setSingleValue(updatedValue);
updatedFields.add(updatedField);
return updatedFields;
}
}
Loading