100553: Removed possibility to updated schema name, element and qualifier

This commit is contained in:
Alexandre Vryghem
2023-04-03 13:05:50 +02:00
parent 96b2437e24
commit a26f6bc80e
4 changed files with 114 additions and 37 deletions

View File

@@ -313,21 +313,23 @@ public class MetadataFieldRestRepository extends DSpaceRestRepository<MetadataFi
throw new UnprocessableEntityException("Cannot parse JSON in request body", e);
}
if (metadataFieldRest == null || isBlank(metadataFieldRest.getElement())) {
throw new UnprocessableEntityException("metadata element (in request body) cannot be blank");
MetadataField metadataField = metadataFieldService.find(context, id);
if (metadataField == null) {
throw new ResourceNotFoundException("metadata field with id: " + id + " not found");
}
if (!Objects.equals(metadataFieldRest.getElement(), metadataField.getElement())) {
throw new UnprocessableEntityException("Metadata element cannot be updated.");
}
if (!Objects.equals(metadataFieldRest.getQualifier(), metadataField.getQualifier())) {
throw new UnprocessableEntityException("Metadata qualifier cannot be updated.");
}
if (!Objects.equals(id, metadataFieldRest.getId())) {
throw new UnprocessableEntityException("ID in request body doesn't match path ID");
}
MetadataField metadataField = metadataFieldService.find(context, id);
if (metadataField == null) {
throw new ResourceNotFoundException("metadata field with id: " + id + " not found");
}
metadataField.setElement(metadataFieldRest.getElement());
metadataField.setQualifier(metadataFieldRest.getQualifier());
metadataField.setScopeNote(metadataFieldRest.getScopeNote());
try {

View File

@@ -147,8 +147,13 @@ public class MetadataSchemaRestRepository extends DSpaceRestRepository<MetadataS
throw new UnprocessableEntityException("Cannot parse JSON in request body", e);
}
if (metadataSchemaRest == null || isBlank(metadataSchemaRest.getPrefix())) {
throw new UnprocessableEntityException("metadata schema name cannot be blank");
MetadataSchema metadataSchema = metadataSchemaService.find(context, id);
if (metadataSchema == null) {
throw new ResourceNotFoundException("metadata schema with id: " + id + " not found");
}
if (!Objects.equals(metadataSchemaRest.getPrefix(), metadataSchema.getName())) {
throw new UnprocessableEntityException("Metadata schema name cannot be updated.");
}
if (isBlank(metadataSchemaRest.getNamespace())) {
throw new UnprocessableEntityException("metadata schema namespace cannot be blank");
@@ -158,12 +163,6 @@ public class MetadataSchemaRestRepository extends DSpaceRestRepository<MetadataS
throw new UnprocessableEntityException("ID in request doesn't match path ID");
}
MetadataSchema metadataSchema = metadataSchemaService.find(context, id);
if (metadataSchema == null) {
throw new ResourceNotFoundException("metadata schema with id: " + id + " not found");
}
metadataSchema.setName(metadataSchemaRest.getPrefix());
metadataSchema.setNamespace(metadataSchemaRest.getNamespace());
try {

View File

@@ -202,7 +202,7 @@ public class MetadataSchemaRestRepositoryIT extends AbstractControllerIntegratio
MetadataSchemaRest metadataSchemaRest = new MetadataSchemaRest();
metadataSchemaRest.setId(metadataSchema.getID());
metadataSchemaRest.setPrefix(TEST_NAME_UPDATED);
metadataSchemaRest.setPrefix(TEST_NAME);
metadataSchemaRest.setNamespace(TEST_NAMESPACE_UPDATED);
getClient(getAuthToken(admin.getEmail(), password))
@@ -214,7 +214,33 @@ public class MetadataSchemaRestRepositoryIT extends AbstractControllerIntegratio
getClient().perform(get("/api/core/metadataschemas/" + metadataSchema.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$", MetadataschemaMatcher
.matchEntry(TEST_NAME_UPDATED, TEST_NAMESPACE_UPDATED)));
.matchEntry(TEST_NAME, TEST_NAMESPACE_UPDATED)));
}
@Test
public void update_schemaNameShouldThrowError() throws Exception {
context.turnOffAuthorisationSystem();
MetadataSchema metadataSchema = MetadataSchemaBuilder.createMetadataSchema(context, TEST_NAME, TEST_NAMESPACE)
.build();
context.restoreAuthSystemState();
MetadataSchemaRest metadataSchemaRest = new MetadataSchemaRest();
metadataSchemaRest.setId(metadataSchema.getID());
metadataSchemaRest.setPrefix(TEST_NAME_UPDATED);
metadataSchemaRest.setNamespace(TEST_NAMESPACE_UPDATED);
getClient(getAuthToken(admin.getEmail(), password))
.perform(put("/api/core/metadataschemas/" + metadataSchema.getID())
.content(new ObjectMapper().writeValueAsBytes(metadataSchemaRest))
.contentType(contentType))
.andExpect(status().isUnprocessableEntity());
getClient().perform(get("/api/core/metadataschemas/" + metadataSchema.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$", MetadataschemaMatcher
.matchEntry(TEST_NAME, TEST_NAMESPACE)));
}
@Test

View File

@@ -832,31 +832,81 @@ public class MetadatafieldRestRepositoryIT extends AbstractControllerIntegration
context.turnOffAuthorisationSystem();
MetadataField metadataField = MetadataFieldBuilder.createMetadataField(context, ELEMENT, QUALIFIER, SCOPE_NOTE)
.build();
.build();
context.restoreAuthSystemState();
MetadataFieldRest metadataFieldRest = new MetadataFieldRest();
metadataFieldRest.setId(metadataField.getID());
metadataFieldRest.setElement(ELEMENT);
metadataFieldRest.setQualifier(QUALIFIER);
metadataFieldRest.setScopeNote(SCOPE_NOTE_UPDATED);
getClient(getAuthToken(admin.getEmail(), password))
.perform(put("/api/core/metadatafields/" + metadataField.getID())
.content(new ObjectMapper().writeValueAsBytes(metadataFieldRest))
.contentType(contentType))
.andExpect(status().isOk());
}
@Test
public void update_elementShouldThrowError() throws Exception {
context.turnOffAuthorisationSystem();
MetadataField metadataField = MetadataFieldBuilder.createMetadataField(context, ELEMENT, QUALIFIER, SCOPE_NOTE)
.build();
context.restoreAuthSystemState();
MetadataFieldRest metadataFieldRest = new MetadataFieldRest();
metadataFieldRest.setId(metadataField.getID());
metadataFieldRest.setElement(ELEMENT_UPDATED);
metadataFieldRest.setQualifier(QUALIFIER);
metadataFieldRest.setScopeNote(SCOPE_NOTE_UPDATED);
getClient(getAuthToken(admin.getEmail(), password))
.perform(put("/api/core/metadatafields/" + metadataField.getID())
.content(new ObjectMapper().writeValueAsBytes(metadataFieldRest))
.contentType(contentType))
.andExpect(status().isUnprocessableEntity());
getClient().perform(get("/api/core/metadatafields/" + metadataField.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$", MetadataFieldMatcher.matchMetadataFieldByKeys(
metadataSchema.getName(), ELEMENT, QUALIFIER)
));
}
@Test
public void update_qualifierShouldThrowError() throws Exception {
context.turnOffAuthorisationSystem();
MetadataField metadataField = MetadataFieldBuilder.createMetadataField(context, ELEMENT, QUALIFIER, SCOPE_NOTE)
.build();
context.restoreAuthSystemState();
MetadataFieldRest metadataFieldRest = new MetadataFieldRest();
metadataFieldRest.setId(metadataField.getID());
metadataFieldRest.setElement(ELEMENT);
metadataFieldRest.setQualifier(QUALIFIER_UPDATED);
metadataFieldRest.setScopeNote(SCOPE_NOTE_UPDATED);
getClient(getAuthToken(admin.getEmail(), password))
.perform(put("/api/core/metadatafields/" + metadataField.getID())
.content(new ObjectMapper().writeValueAsBytes(metadataFieldRest))
.contentType(contentType))
.andExpect(status().isOk());
.content(new ObjectMapper().writeValueAsBytes(metadataFieldRest))
.contentType(contentType))
.andExpect(status().isUnprocessableEntity());
getClient().perform(get("/api/core/metadatafields/" + metadataField.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$", MetadataFieldMatcher.matchMetadataFieldByKeys(
metadataSchema.getName(), ELEMENT_UPDATED, QUALIFIER_UPDATED)
));
.andExpect(status().isOk())
.andExpect(jsonPath("$", MetadataFieldMatcher.matchMetadataFieldByKeys(
metadataSchema.getName(), ELEMENT, QUALIFIER)
));
}
@Test
public void update_checkUpdatedInIndex() throws Exception {
public void update_checkNotUpdatedInIndex() throws Exception {
context.turnOffAuthorisationSystem();
MetadataField metadataField = MetadataFieldBuilder.createMetadataField(context, ELEMENT, QUALIFIER, SCOPE_NOTE)
@@ -885,27 +935,27 @@ public class MetadatafieldRestRepositoryIT extends AbstractControllerIntegration
.perform(put("/api/core/metadatafields/" + metadataField.getID())
.content(new ObjectMapper().writeValueAsBytes(metadataFieldRest))
.contentType(contentType))
.andExpect(status().isOk());
.andExpect(status().isUnprocessableEntity());
// new metadata field found in index
// new metadata field not found in index
getClient().perform(get(SEARCH_BYFIELDNAME_ENDPOINT)
.param("schema", metadataSchema.getName())
.param("element", ELEMENT_UPDATED)
.param("qualifier", QUALIFIER_UPDATED))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.metadatafields", Matchers.hasItem(
MetadataFieldMatcher.matchMetadataFieldByKeys(metadataSchema.getName(),
ELEMENT_UPDATED, QUALIFIER_UPDATED))
))
.andExpect(jsonPath("$.page.totalElements", is(1)));
.andExpect(jsonPath("$.page.totalElements", is(0)));
// original metadata field not found in index
// original metadata field found in index
getClient().perform(get(SEARCH_BYFIELDNAME_ENDPOINT)
.param("schema", metadataSchema.getName())
.param("element", metadataField.getElement())
.param("qualifier", metadataField.getQualifier()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.page.totalElements", is(0)));
.andExpect(jsonPath("$._embedded.metadatafields", Matchers.hasItem(
MetadataFieldMatcher.matchMetadataFieldByKeys(metadataSchema.getName(),
ELEMENT, QUALIFIER))
))
.andExpect(jsonPath("$.page.totalElements", is(1)));
}
@Test