74685: Refactor RelationshipMetadataServiceTest to use Builders

This commit is contained in:
Marie Verdonck
2020-11-20 14:52:02 +01:00
parent 894ec569f1
commit 8e2e564b6d
2 changed files with 133 additions and 156 deletions

View File

@@ -106,6 +106,11 @@ public class ItemBuilder extends AbstractDSpaceObjectBuilder<Item> {
return addMetadataValue(item, MetadataSchemaEnum.DC.getName(), "description", "provenance", provenanceData); return addMetadataValue(item, MetadataSchemaEnum.DC.getName(), "description", "provenance", provenanceData);
} }
public ItemBuilder withMetadata(final String schema, final String element, final String qualifier,
final String value) {
return addMetadataValue(item, schema, element, qualifier, value);
}
public ItemBuilder makeUnDiscoverable() { public ItemBuilder makeUnDiscoverable() {
item.setDiscoverable(false); item.setDiscoverable(false);
return this; return this;

View File

@@ -11,14 +11,18 @@ import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.apache.logging.log4j.Logger; import org.dspace.AbstractIntegrationTestWithDatabase;
import org.dspace.AbstractUnitTest;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.builder.CollectionBuilder;
import org.dspace.builder.CommunityBuilder;
import org.dspace.builder.EntityTypeBuilder;
import org.dspace.builder.ItemBuilder;
import org.dspace.builder.RelationshipBuilder;
import org.dspace.builder.RelationshipTypeBuilder;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService; import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService; import org.dspace.content.service.CommunityService;
@@ -29,14 +33,10 @@ import org.dspace.content.service.ItemService;
import org.dspace.content.service.RelationshipService; import org.dspace.content.service.RelationshipService;
import org.dspace.content.service.RelationshipTypeService; import org.dspace.content.service.RelationshipTypeService;
import org.dspace.content.service.WorkspaceItemService; import org.dspace.content.service.WorkspaceItemService;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
public class RelationshipMetadataServiceTest extends AbstractUnitTest { public class RelationshipMetadataServiceTest extends AbstractIntegrationTestWithDatabase {
private static final Logger log = org.apache.logging.log4j.LogManager
.getLogger(RelationshipMetadataServiceTest.class);
protected RelationshipMetadataService relationshipMetadataService = ContentServiceFactory protected RelationshipMetadataService relationshipMetadataService = ContentServiceFactory
.getInstance().getRelationshipMetadataService(); .getInstance().getRelationshipMetadataService();
@@ -53,6 +53,7 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
Item leftItem; Item leftItem;
Item rightItem; Item rightItem;
Collection col;
Relationship relationship; Relationship relationship;
RelationshipType isAuthorOfPublicationRelationshipType; RelationshipType isAuthorOfPublicationRelationshipType;
@@ -65,61 +66,38 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
*/ */
@Before @Before
@Override @Override
public void init() { public void setUp() throws Exception {
super.init(); super.setUp();
try {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
Community community = communityService.create(null, context); Community community = CommunityBuilder.createCommunity(context).build();
Collection col = collectionService.create(context, community); col = CollectionBuilder.createCollection(context, community).build();
WorkspaceItem leftIs = workspaceItemService.create(context, col, false);
WorkspaceItem rightIs = workspaceItemService.create(context, col, false);
leftItem = installItemService.installItem(context, leftIs); leftItem = ItemBuilder.createItem(context, col).build();
rightItem = installItemService.installItem(context, rightIs); rightItem = ItemBuilder.createItem(context, col).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
} catch (AuthorizeException ex) {
log.error("Authorization Error in init", ex);
fail("Authorization Error in init: " + ex.getMessage());
} catch (SQLException ex) {
log.error("SQL Error in init", ex);
fail("SQL Error in init: " + ex.getMessage());
}
}
/**
* This method will be run after every test as per @After. It will
* clean resources initialized by the @Before methods.
*
* Other methods can be annotated with @After here or in subclasses
* but no execution order is guaranteed
*/
@After
@Override
public void destroy() {
context.abort();
super.destroy();
} }
/** /**
* Common function to convert leftItem to a publication item, convert rightItem to an author item, * Common function to convert leftItem to a publication item, convert rightItem to an author item,
* and relating them to each other stored in the relationship field * and relating them to each other stored in the relationship field
*/ */
private void initPublicationAuthor() throws SQLException, AuthorizeException { private void initPublicationAuthor() {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
itemService.addMetadata(context, leftItem, "relationship", "type", null, null, "Publication"); EntityType publicationEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Publication").build();
itemService.addMetadata(context, rightItem, "relationship", "type", null, null, "Author"); EntityType authorEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Author").build();
itemService.addMetadata(context, rightItem, "person", "familyName", null, null, "familyName"); leftItem = ItemBuilder.createItem(context, col).withRelationshipType("Publication").build();
itemService.addMetadata(context, rightItem, "person", "givenName", null, null, "firstName"); rightItem = ItemBuilder.createItem(context, col).withRelationshipType("Author")
EntityType publicationEntityType = entityTypeService.create(context, "Publication"); .withPersonIdentifierLastName("familyName")
EntityType authorEntityType = entityTypeService.create(context, "Author"); .withPersonIdentifierFirstName("firstName").build();
isAuthorOfPublicationRelationshipType = relationshipTypeService isAuthorOfPublicationRelationshipType =
.create(context, publicationEntityType, authorEntityType, RelationshipTypeBuilder.createRelationshipTypeBuilder(context, publicationEntityType, authorEntityType,
"isAuthorOfPublication", "isPublicationOfAuthor", "isAuthorOfPublication", "isPublicationOfAuthor",
null, null, null, null); null, null, null, null).build();
relationship = relationshipService.create(context, leftItem, rightItem, relationship =
isAuthorOfPublicationRelationshipType, 0, 0); RelationshipBuilder.createRelationshipBuilder(context, leftItem, rightItem,
isAuthorOfPublicationRelationshipType).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
} }
@@ -128,20 +106,22 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
* and relating them to each other stored in the relationship field * and relating them to each other stored in the relationship field
*/ */
private void initPublicationAuthorWithCopyParams(boolean copyToLeft, boolean copyToRight) private void initPublicationAuthorWithCopyParams(boolean copyToLeft, boolean copyToRight)
throws SQLException, AuthorizeException { throws SQLException {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
itemService.addMetadata(context, leftItem, "relationship", "type", null, null, "Publication"); EntityType publicationEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Publication").build();
itemService.addMetadata(context, rightItem, "relationship", "type", null, null, "Author"); EntityType authorEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Author").build();
itemService.addMetadata(context, rightItem, "person", "familyName", null, null, "familyName"); leftItem = ItemBuilder.createItem(context, col).withRelationshipType("Publication").build();
itemService.addMetadata(context, rightItem, "person", "givenName", null, null, "firstName"); rightItem = ItemBuilder.createItem(context, col).withRelationshipType("Author")
EntityType publicationEntityType = entityTypeService.create(context, "Publication"); .withPersonIdentifierLastName("familyName")
EntityType authorEntityType = entityTypeService.create(context, "Author"); .withPersonIdentifierFirstName("firstName").build();
RelationshipType isAuthorOfPublication = relationshipTypeService RelationshipType isAuthorOfPublication =
.create(context, publicationEntityType, authorEntityType, RelationshipTypeBuilder.createRelationshipTypeBuilder(context, publicationEntityType, authorEntityType,
"isAuthorOfPublication", "isPublicationOfAuthor", "isAuthorOfPublication", "isPublicationOfAuthor",
null, null, null, null, copyToLeft, copyToRight); null, null, null, null)
.withCopyToLeft(copyToLeft).withCopyToRight(copyToRight).build();
relationship = relationshipService.create(context, leftItem, rightItem, isAuthorOfPublication, 0, 0); relationship =
RelationshipBuilder.createRelationshipBuilder(context, leftItem, rightItem, isAuthorOfPublication).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
} }
@@ -149,25 +129,28 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
* Common function to convert leftItem to a journal issue item, convert rightItem to a journal volume item, * Common function to convert leftItem to a journal issue item, convert rightItem to a journal volume item,
* and relating them to each other stored in the relationship field * and relating them to each other stored in the relationship field
*/ */
private void initJournalVolumeIssue() throws SQLException, AuthorizeException { private void initJournalVolumeIssue() {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
itemService.addMetadata(context, leftItem, "relationship", "type", null, null, "JournalIssue"); EntityType journalIssueEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "JournalIssue").build();
itemService.addMetadata(context, rightItem, "relationship", "type", null, null, "JournalVolume"); EntityType publicationVolumeEntityType =
itemService.addMetadata(context, leftItem, "publicationissue", "issueNumber", null, null, "2"); EntityTypeBuilder.createEntityTypeBuilder(context, "JournalVolume").build();
itemService.addMetadata(context, rightItem, "publicationvolume", "volumeNumber", null, null, "30"); leftItem = ItemBuilder.createItem(context, col).withRelationshipType("JournalIssue")
EntityType journalIssueEntityType = entityTypeService.create(context, "JournalIssue"); .withPublicationIssueNumber("2").build();
EntityType publicationVolumeEntityType = entityTypeService.create(context, "JournalVolume"); rightItem = ItemBuilder.createItem(context, col).withRelationshipType("JournalVolume")
RelationshipType isIssueOfVolume = relationshipTypeService .withPublicationVolumeNumber("30").build();
.create(context, journalIssueEntityType, publicationVolumeEntityType, RelationshipType isIssueOfVolume =
RelationshipTypeBuilder
.createRelationshipTypeBuilder(context, journalIssueEntityType, publicationVolumeEntityType,
"isJournalVolumeOfIssue", "isIssueOfJournalVolume", "isJournalVolumeOfIssue", "isIssueOfJournalVolume",
null, null, null, null); null, null, null, null).build();
relationship = relationshipService.create(context, leftItem, rightItem, isIssueOfVolume, 0, 0); relationship =
RelationshipBuilder.createRelationshipBuilder(context, leftItem, rightItem, isIssueOfVolume).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
} }
@Test @Test
public void testGetAuthorRelationshipMetadata() throws SQLException, AuthorizeException { public void testGetAuthorRelationshipMetadata() {
initPublicationAuthor(); initPublicationAuthor();
//leftItem is the publication //leftItem is the publication
//verify the dc.contributor.author virtual metadata //verify the dc.contributor.author virtual metadata
@@ -268,7 +251,7 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
} }
@Test @Test
public void testGetJournalRelationshipMetadata() throws SQLException, AuthorizeException { public void testGetJournalRelationshipMetadata() {
initJournalVolumeIssue(); initJournalVolumeIssue();
//leftItem is the journal issue item //leftItem is the journal issue item
@@ -458,20 +441,15 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
assertThat(relationshipService.findNextRightPlaceByRightItem(context, rightItem), equalTo(1)); assertThat(relationshipService.findNextRightPlaceByRightItem(context, rightItem), equalTo(1));
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
Community community = communityService.create(null, context); Community community = CommunityBuilder.createCommunity(context).build();
Collection col = collectionService.create(context, community); Collection col = CollectionBuilder.createCollection(context, community).build();
WorkspaceItem is = workspaceItemService.create(context, col, false); Item secondItem = ItemBuilder.createItem(context, col).withRelationshipType("Publication").build();
Item secondItem = installItemService.installItem(context, is); RelationshipBuilder.createRelationshipBuilder(context, secondItem, rightItem,
itemService.addMetadata(context, secondItem, "relationship", "type", null, null, "Publication"); isAuthorOfPublicationRelationshipType).build();
relationshipService.create(context, secondItem, rightItem,
isAuthorOfPublicationRelationshipType, 0, 0);
context.restoreAuthSystemState(); context.restoreAuthSystemState();
assertThat(relationshipService.findNextRightPlaceByRightItem(context, rightItem), equalTo(2)); assertThat(relationshipService.findNextRightPlaceByRightItem(context, rightItem), equalTo(2));
} }
@Test @Test
@@ -482,16 +460,15 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
assertThat(relationshipService.findNextLeftPlaceByLeftItem(context, leftItem), equalTo(1)); assertThat(relationshipService.findNextLeftPlaceByLeftItem(context, leftItem), equalTo(1));
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
Community community = communityService.create(null, context); Community community = CommunityBuilder.createCommunity(context).build();
Collection col = CollectionBuilder.createCollection(context, community).build();
Collection col = collectionService.create(context, community); Item secondAuthor = ItemBuilder.createItem(context, col).withRelationshipType("Author")
WorkspaceItem is = workspaceItemService.create(context, col, false); .withPersonIdentifierFirstName("firstName")
Item secondAuthor = installItemService.installItem(context, is); .withPersonIdentifierLastName("familyName").build();
itemService.addMetadata(context, secondAuthor, "relationship", "type", null, null, "Author");
itemService.addMetadata(context, secondAuthor, "person", "familyName", null, null, "familyName"); RelationshipBuilder.createRelationshipBuilder(context, leftItem, secondAuthor,
itemService.addMetadata(context, secondAuthor, "person", "givenName", null, null, "firstName"); isAuthorOfPublicationRelationshipType).build();
relationshipService.create(context, leftItem, secondAuthor,
isAuthorOfPublicationRelationshipType, 0, 0);
context.restoreAuthSystemState(); context.restoreAuthSystemState();
assertThat(relationshipService.findNextLeftPlaceByLeftItem(context, leftItem), equalTo(2)); assertThat(relationshipService.findNextLeftPlaceByLeftItem(context, leftItem), equalTo(2));
@@ -504,51 +481,46 @@ public class RelationshipMetadataServiceTest extends AbstractUnitTest {
// Journal, JournalVolume, JournalIssue, Publication items, related to each other using the relationship types // Journal, JournalVolume, JournalIssue, Publication items, related to each other using the relationship types
// isJournalOfVolume, isJournalVolumeOfIssue, isJournalIssueOfPublication. // isJournalOfVolume, isJournalVolumeOfIssue, isJournalIssueOfPublication.
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
EntityType publicationEntityType = entityTypeService.create(context, "Publication"); EntityType publicationEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Publication").build();
EntityType journalIssueEntityType = entityTypeService.create(context, "JournalIssue"); EntityType journalIssueEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "JournalIssue").build();
EntityType journalVolumeEntityType = entityTypeService.create(context, "JournalVolume"); EntityType journalVolumeEntityType =
EntityType journalEntityType = entityTypeService.create(context, "Journal"); EntityTypeBuilder.createEntityTypeBuilder(context, "JournalVolume").build();
RelationshipType isJournalVolumeOfIssueRelationshipType = relationshipTypeService EntityType journalEntityType = EntityTypeBuilder.createEntityTypeBuilder(context, "Journal").build();
.create(context, journalIssueEntityType, journalVolumeEntityType, RelationshipType isJournalVolumeOfIssueRelationshipType =
"isIssueOfJournalVolume", "isJournalVolumeOfIssue", RelationshipTypeBuilder.createRelationshipTypeBuilder(context, journalIssueEntityType,
null, null, null, null); journalVolumeEntityType, "isIssueOfJournalVolume", "isJournalVolumeOfIssue", null, null, null, null)
RelationshipType isJournalVolumeOfJournalRelationshipType = relationshipTypeService .build();
.create(context, journalVolumeEntityType, journalEntityType, RelationshipType isJournalVolumeOfJournalRelationshipType =
"isJournalOfVolume", "isVolumeOfJournal", RelationshipTypeBuilder.createRelationshipTypeBuilder(context, journalVolumeEntityType,
null, null, null, null); journalEntityType, "isJournalOfVolume", "isVolumeOfJournal", null, null, null, null)
RelationshipType isJournalIssueOfPublicationRelationshipType = relationshipTypeService .build();
.create(context, publicationEntityType, journalIssueEntityType, RelationshipType isJournalIssueOfPublicationRelationshipType =
"isJournalIssueOfPublication", "isPublicationOfJournalIssue", RelationshipTypeBuilder.createRelationshipTypeBuilder(context, publicationEntityType,
null, null, null, null); journalIssueEntityType, "isJournalIssueOfPublication", "isPublicationOfJournalIssue", null, null, null,
null)
.build();
Community community = communityService.create(null, context); Community community = CommunityBuilder.createCommunity(context).build();
Collection collection = collectionService.create(context, community); Collection collection = CollectionBuilder.createCollection(context, community).build();
WorkspaceItem iss = workspaceItemService.create(context, collection, false); Item journalIssue = ItemBuilder.createItem(context, collection).withRelationshipType("JournalIssue").build();
Item journalIssue = installItemService.installItem(context, iss); Item journalVolume = ItemBuilder.createItem(context, collection)
itemService.addMetadata(context, journalIssue, "relationship", "type", null, null, "JournalIssue"); .withPublicationVolumeNumber("30")
WorkspaceItem vol = workspaceItemService.create(context, collection, false); .withRelationshipType("JournalVolume").build();
Item journalVolume = installItemService.installItem(context, vol); Item journal = ItemBuilder.createItem(context, collection)
itemService.addMetadata(context, journalVolume, "publicationvolume", "volumeNumber", null, null, "30"); .withMetadata("creativeworkseries", "issn", null, "issn journal")
itemService.addMetadata(context, journalVolume, "relationship", "type", null, null, "JournalVolume"); .withRelationshipType("Journal").build();
WorkspaceItem jour = workspaceItemService.create(context, collection, false); RelationshipBuilder.createRelationshipBuilder(context, journalIssue, journalVolume,
Item journal = installItemService.installItem(context, jour); isJournalVolumeOfIssueRelationshipType).build();
itemService.addMetadata(context, journal, "creativeworkseries", "issn", null, null, "issn journal"); RelationshipBuilder.createRelationshipBuilder(context, journalVolume, journal,
itemService.addMetadata(context, journal, "relationship", "type", null, null, "Journal"); isJournalVolumeOfJournalRelationshipType).build();
relationship =
relationshipService
.create(context, journalIssue, journalVolume, isJournalVolumeOfIssueRelationshipType, 0, 0);
relationship =
relationshipService.create(context, journalVolume, journal, isJournalVolumeOfJournalRelationshipType, 0, 0);
WorkspaceItem pub = workspaceItemService.create(context, collection, false); Item publication = ItemBuilder.createItem(context, collection)
Item publication = installItemService.installItem(context, pub); .withTitle("Pub 1")
itemService.addMetadata(context, publication, "dc", "title", null, null, "Pub 1"); .withRelationshipType("Publication").build();
itemService.addMetadata(context, publication, "relationship", "type", null, null, "Publication");
relationship = RelationshipBuilder.createRelationshipBuilder(context, publication, journalIssue,
relationshipService isJournalIssueOfPublicationRelationshipType).build();
.create(context, publication, journalIssue, isJournalIssueOfPublicationRelationshipType, 0, 0);
context.restoreAuthSystemState(); context.restoreAuthSystemState();
// Query for the publication itemService.getMetadata(publication, Item.ANY, Item.ANY, null, Item.ANY, true); // Query for the publication itemService.getMetadata(publication, Item.ANY, Item.ANY, null, Item.ANY, true);