diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/RelationshipRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/RelationshipRestRepository.java index 75e3443cec..d16bd33498 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/RelationshipRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/RelationshipRestRepository.java @@ -38,6 +38,7 @@ import org.dspace.content.service.RelationshipTypeService; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.eperson.EPerson; +import org.dspace.services.RequestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -72,6 +73,9 @@ public class RelationshipRestRepository extends DSpaceRestRepository authorList = itemService.getMetadata(leftItem, "dc", "contributor", "author", Item.ANY); + assertThat(authorList.size(), equalTo(1)); + assertThat(authorList.get(0).getValue(), equalTo("familyName, firstName")); + assertThat(authorList.get(0).getMetadataField().getMetadataSchema().getName(), equalTo("dc")); + assertThat(authorList.get(0).getMetadataField().getElement(), equalTo("contributor")); + assertThat(authorList.get(0).getMetadataField().getQualifier(), equalTo("author")); + assertNull(authorList.get(0).getAuthority()); + + List relationshipMetadataList = itemService + .getMetadata(leftItem, "relation", "isAuthorOfPublication", null, Item.ANY); + assertThat(relationshipMetadataList.size(), equalTo(0)); + } + + @Test + public void testAuthorDeleteRelationshipCopyToRightItem() throws Exception { + initPublicationAuthor(); + + getClient(adminAuthToken).perform( + delete("/api/core/relationships/" + relationship.getID() + "?copyVirtualMetadata=right")) + .andExpect(status().isNoContent()); + + leftItem = itemService.find(context, leftItem.getID()); + List authorList = itemService.getMetadata(leftItem, "dc", "contributor", "author", Item.ANY); + assertThat(authorList.size(), equalTo(0)); + + List relationshipMetadataList = itemService + .getMetadata(leftItem, "relation", "isAuthorOfPublication", null, Item.ANY); + assertThat(relationshipMetadataList.size(), equalTo(0)); + } + + @Test + public void testDeleteAuthorRelationshipCopyToBothItems() throws Exception { + initPublicationAuthor(); + + getClient(adminAuthToken).perform( + delete("/api/core/relationships/" + relationship.getID() + "?copyVirtualMetadata=all")) + .andExpect(status().isNoContent()); + + leftItem = itemService.find(context, leftItem.getID()); + List authorList = itemService.getMetadata(leftItem, "dc", "contributor", "author", Item.ANY); + assertThat(authorList.size(), equalTo(1)); + assertThat(authorList.get(0).getValue(), equalTo("familyName, firstName")); + assertThat(authorList.get(0).getMetadataField().getMetadataSchema().getName(), equalTo("dc")); + assertThat(authorList.get(0).getMetadataField().getElement(), equalTo("contributor")); + assertThat(authorList.get(0).getMetadataField().getQualifier(), equalTo("author")); + assertNull(authorList.get(0).getAuthority()); + + List relationshipMetadataList = itemService + .getMetadata(leftItem, "relation", "isAuthorOfPublication", null, Item.ANY); + assertThat(relationshipMetadataList.size(), equalTo(0)); + } + + @Test + public void testDeleteJournalRelationshipCopyToLeftItem() throws Exception { + initJournalVolumeIssue(); + + getClient(adminAuthToken).perform( + delete("/api/core/relationships/" + relationship.getID() + "?copyVirtualMetadata=left")) + .andExpect(status().isNoContent()); + + leftItem = itemService.find(context, leftItem.getID()); + List volumeList = + itemService.getMetadata(leftItem, "publicationvolume", "volumeNumber", null, Item.ANY); + assertThat(volumeList.size(), equalTo(1)); + assertThat(volumeList.get(0).getValue(), equalTo("30")); + + rightItem = itemService.find(context, rightItem.getID()); + List issueList = + itemService.getMetadata(rightItem, "publicationissue", "issueNumber", null, Item.ANY); + assertThat(issueList.size(), equalTo(0)); + } + + @Test + public void testJournalDeleteRelationshipCopyToRightItem() throws Exception { + initJournalVolumeIssue(); + + getClient(adminAuthToken).perform( + delete("/api/core/relationships/" + relationship.getID() + "?copyVirtualMetadata=right")) + .andExpect(status().isNoContent()); + + leftItem = itemService.find(context, leftItem.getID()); + List volumeList = + itemService.getMetadata(leftItem, "publicationvolume", "volumeNumber", null, Item.ANY); + assertThat(volumeList.size(), equalTo(0)); + + rightItem = itemService.find(context, rightItem.getID()); + List issueList = + itemService.getMetadata(rightItem, "publicationissue", "issueNumber", null, Item.ANY); + assertThat(issueList.size(), equalTo(1)); + assertThat(issueList.get(0).getValue(), equalTo("2")); + } + + @Test + public void testDeleteJournalRelationshipCopyToBothItems() throws Exception { + initJournalVolumeIssue(); + + getClient(adminAuthToken).perform( + delete("/api/core/relationships/" + relationship.getID() + "?copyVirtualMetadata=all")) + .andExpect(status().isNoContent()); + + leftItem = itemService.find(context, leftItem.getID()); + List volumeList = + itemService.getMetadata(leftItem, "publicationvolume", "volumeNumber", null, Item.ANY); + assertThat(volumeList.size(), equalTo(1)); + assertThat(volumeList.get(0).getValue(), equalTo("30")); + + rightItem = itemService.find(context, rightItem.getID()); + List issueList = + itemService.getMetadata(rightItem, "publicationissue", "issueNumber", null, Item.ANY); + assertThat(issueList.size(), equalTo(1)); + assertThat(issueList.get(0).getValue(), equalTo("2")); + } +} diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/RelationshipTypeRestRepositoryIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/RelationshipTypeRestRepositoryIT.java index 79bf523c26..7bfd124fbb 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/RelationshipTypeRestRepositoryIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/RelationshipTypeRestRepositoryIT.java @@ -42,7 +42,7 @@ public class RelationshipTypeRestRepositoryIT extends AbstractEntityIntegrationT @Test public void findAllRelationshipTypesTest() throws SQLException { - assertEquals(10, relationshipTypeService.findAll(context).size()); + assertEquals(11, relationshipTypeService.findAll(context).size()); } @Test @@ -142,7 +142,7 @@ public class RelationshipTypeRestRepositoryIT extends AbstractEntityIntegrationT //We expect a 200 OK status .andExpect(status().isOk()) //The type has to be 'discover' - .andExpect(jsonPath("$.page.totalElements", is(10))) + .andExpect(jsonPath("$.page.totalElements", is(11))) //There needs to be a self link to this endpoint .andExpect(jsonPath("$._links.self.href", containsString("api/core/relationshiptypes"))) //We have 4 facets in the default configuration, they need to all be present in the embedded section @@ -156,7 +156,8 @@ public class RelationshipTypeRestRepositoryIT extends AbstractEntityIntegrationT RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(6)), RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(7)), RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(8)), - RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(9))) + RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(9)), + RelationshipTypeMatcher.matchRelationshipTypeEntry(relationshipTypes.get(10))) )); } diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/builder/ItemBuilder.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/builder/ItemBuilder.java index 28a600a3c3..cb195cf026 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/builder/ItemBuilder.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/builder/ItemBuilder.java @@ -84,6 +84,14 @@ public class ItemBuilder extends AbstractDSpaceObjectBuilder { return addMetadataValue(item, "relationship", "type", null, relationshipType); } + public ItemBuilder withPublicationIssueNumber(final String issueNumber) { + return addMetadataValue(item, "publicationissue", "issueNumber", null, issueNumber); + } + + public ItemBuilder withPublicationVolumeNumber(final String volumeNumber) { + return addMetadataValue(item, "publicationvolume", "volumeNumber", null, volumeNumber); + } + public ItemBuilder makeUnDiscoverable() { item.setDiscoverable(false); return this; diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractEntityIntegrationTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractEntityIntegrationTest.java index 5308551aaf..a193c0a616 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractEntityIntegrationTest.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractEntityIntegrationTest.java @@ -89,6 +89,11 @@ public class AbstractEntityIntegrationTest extends AbstractControllerIntegration null, 1, 1).build(); + RelationshipTypeBuilder.createRelationshipTypeBuilder(context, journalIssue, journalVolume, + "isJournalVolumeOfIssue", "isIssueOfJournalVolume", + null, null, null, + null).build(); + RelationshipTypeBuilder.createRelationshipTypeBuilder(context, publication, orgUnit, "isAuthorOfPublication", "isPublicationOfAuthor", 0, null, 0, null).build();