Fixed authorityKey in facet endpoint response and constructed a test for this

This commit is contained in:
Raf Ponsaerts
2021-03-17 12:42:47 +01:00
parent ece20cf1d4
commit 7bacbe73d4
4 changed files with 45 additions and 25 deletions

View File

@@ -73,6 +73,10 @@ public class ItemBuilder extends AbstractDSpaceObjectBuilder<Item> {
public ItemBuilder withAuthor(final String authorName) { public ItemBuilder withAuthor(final String authorName) {
return addMetadataValue(item, MetadataSchemaEnum.DC.getName(), "contributor", "author", authorName); return addMetadataValue(item, MetadataSchemaEnum.DC.getName(), "contributor", "author", authorName);
} }
public ItemBuilder withAuthor(final String authorName, final String authority, final int confidence) {
return addMetadataValue(item, MetadataSchemaEnum.DC.getName(), "contributor", "author",
null, authorName, authority, confidence);
}
public ItemBuilder withPersonIdentifierFirstName(final String personIdentifierFirstName) { public ItemBuilder withPersonIdentifierFirstName(final String personIdentifierFirstName) {
return addMetadataValue(item, "person", "givenName", null, personIdentifierFirstName); return addMetadataValue(item, "person", "givenName", null, personIdentifierFirstName);

View File

@@ -22,7 +22,6 @@ public class SearchFacetValueRest extends RestAddressableModel {
@JsonIgnore @JsonIgnore
private String filterValue; private String filterValue;
private long count; private long count;
@JsonIgnore
private String authorityKey; private String authorityKey;
@JsonIgnore @JsonIgnore
private String sortValue; private String sortValue;

View File

@@ -50,6 +50,7 @@ import org.dspace.content.Collection;
import org.dspace.content.Community; import org.dspace.content.Community;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.content.WorkspaceItem; import org.dspace.content.WorkspaceItem;
import org.dspace.content.authority.Choices;
import org.dspace.content.authority.service.MetadataAuthorityService; import org.dspace.content.authority.service.MetadataAuthorityService;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
@@ -188,10 +189,15 @@ public class DiscoveryRestControllerIT extends AbstractControllerIntegrationTest
@Test @Test
public void discoverFacetsAuthorWithAuthorityWithSizeParameter() throws Exception { public void discoverFacetsAuthorWithAuthorityWithSizeParameter() throws Exception {
configurationService.setProperty("choices.plugin.dc.subject", configurationService.setProperty("choices.plugin.dc.contributor.author",
"SolrSubjectAuthority"); "SolrAuthorAuthority");
configurationService.setProperty("authority.controlled.dc.subject", configurationService.setProperty("authority.controlled.dc.contributor.author",
"true"); "true");
configurationService.setProperty("discovery.browse.authority.ignore-prefered.author", true);
configurationService.setProperty("discovery.index.authority.ignore-prefered.dc.contributor.author", true);
configurationService.setProperty("discovery.browse.authority.ignore-variants.author", true);
configurationService.setProperty("discovery.index.authority.ignore-variants.dc.contributor.author", true);
metadataAuthorityService.clearCache(); metadataAuthorityService.clearCache();
@@ -213,38 +219,38 @@ public class DiscoveryRestControllerIT extends AbstractControllerIntegrationTest
Item publicItem1 = ItemBuilder.createItem(context, col1) Item publicItem1 = ItemBuilder.createItem(context, col1)
.withTitle("Public item 1") .withTitle("Public item 1")
.withIssueDate("2017-10-17") .withIssueDate("2017-10-17")
.withAuthor("Smith, Donald") .withAuthor("Smith, Donald", "test_authority", Choices.CF_ACCEPTED)
.withAuthor("Doe, John") .withAuthor("Doe, John", "test_authority_2", Choices.CF_ACCEPTED)
.withSubject("History of religion", "VR110102", 600) .withSubject("History of religion")
.build(); .build();
Item publicItem2 = ItemBuilder.createItem(context, col2) Item publicItem2 = ItemBuilder.createItem(context, col2)
.withTitle("Public item 2") .withTitle("Public item 2")
.withIssueDate("2016-02-13") .withIssueDate("2016-02-13")
.withAuthor("Smith, Maria") .withAuthor("Smith, Maria", "test_authority_3", Choices.CF_ACCEPTED)
.withAuthor("Doe, Jane") .withAuthor("Doe, Jane", "test_authority_4", Choices.CF_ACCEPTED)
.withSubject("Church studies", "VR110103", 600) .withSubject("Church studies")
.withSubject("History of religion", "VR110102", 600) .withSubject("History of religion")
.build(); .build();
Item publicItem3 = ItemBuilder.createItem(context, col2) Item publicItem3 = ItemBuilder.createItem(context, col2)
.withTitle("Public item 2") .withTitle("Public item 2")
.withIssueDate("2016-02-13") .withIssueDate("2016-02-13")
.withAuthor("Smith, Maria") .withAuthor("Smith, Maria", "test_authority_3", Choices.CF_ACCEPTED)
.withAuthor("Doe, Jane") .withAuthor("Doe, Jane", "test_authority_4", Choices.CF_ACCEPTED)
.withAuthor("test, test") .withAuthor("test, test", "test_authority_5", Choices.CF_ACCEPTED)
.withAuthor("test2, test2") .withAuthor("test2, test2", "test_authority_6", Choices.CF_ACCEPTED)
.withAuthor("Maybe, Maybe") .withAuthor("Maybe, Maybe", "test_authority_7", Choices.CF_ACCEPTED)
.withSubject("Missionary studies", "VR110104", 600) .withSubject("Missionary studies")
.withSubject("Church studies", "VR110103", 600) .withSubject("Church studies")
.withSubject("History of religion", "VR110102", 600) .withSubject("History of religion")
.build(); .build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
//** WHEN ** //** WHEN **
//An anonymous user browses this endpoint to find the objects in the system and enters a size of 2 //An anonymous user browses this endpoint to find the objects in the system and enters a size of 2
getClient().perform(get("/api/discover/facets/subject") getClient().perform(get("/api/discover/facets/author")
.param("size", "2")) .param("size", "2"))
//** THEN ** //** THEN **
@@ -253,12 +259,12 @@ public class DiscoveryRestControllerIT extends AbstractControllerIntegrationTest
//The type needs to be 'discover' //The type needs to be 'discover'
.andExpect(jsonPath("$.type", is("discover"))) .andExpect(jsonPath("$.type", is("discover")))
//The name of the facet needs to be seubject, because that's what we called //The name of the facet needs to be seubject, because that's what we called
.andExpect(jsonPath("$.name", is("subject"))) .andExpect(jsonPath("$.name", is("author")))
//Because we've constructed such a structure so that we have more than 2 (size) subjects, there //Because we've constructed such a structure so that we have more than 2 (size) subjects, there
// needs to be a next link // needs to be a next link
.andExpect(jsonPath("$._links.next.href", containsString("api/discover/facets/subject?page"))) .andExpect(jsonPath("$._links.next.href", containsString("api/discover/facets/author?page")))
//There always needs to be a self link //There always needs to be a self link
.andExpect(jsonPath("$._links.self.href", containsString("api/discover/facets/subject"))) .andExpect(jsonPath("$._links.self.href", containsString("api/discover/facets/author")))
//Because there are more subjects than is represented (because of the size param), hasMore has to //Because there are more subjects than is represented (because of the size param), hasMore has to
// be true // be true
//The page object needs to be present and just like specified in the matcher //The page object needs to be present and just like specified in the matcher
@@ -268,8 +274,8 @@ public class DiscoveryRestControllerIT extends AbstractControllerIntegrationTest
// up in different items // up in different items
//These subjects are the most used ones. Only two show up because of the size. //These subjects are the most used ones. Only two show up because of the size.
.andExpect(jsonPath("$._embedded.values", containsInAnyOrder( .andExpect(jsonPath("$._embedded.values", containsInAnyOrder(
FacetValueMatcher.entrySubject("History of religion", "VR110102", 3), FacetValueMatcher.entryAuthorWithAuthority("Doe, Jane", "test_authority_4", 2),
FacetValueMatcher.entrySubject("Church studies", "VR110103", 2) FacetValueMatcher.entryAuthorWithAuthority("Smith, Maria", "test_authority_3", 2)
))); )));
} }

View File

@@ -28,6 +28,17 @@ public class FacetValueMatcher {
); );
} }
public static Matcher<? super Object> entryAuthorWithAuthority(String label, String authority, int count) {
return allOf(
hasJsonPath("$.authorityKey", is(authority)),
hasJsonPath("$.count", is(count)),
hasJsonPath("$.label", is(label)),
hasJsonPath("$.type", is("discover")),
hasJsonPath("$._links.search.href", containsString("api/discover/search/objects")),
hasJsonPath("$._links.search.href", containsString("f.author=" + authority + ",authority"))
);
}
public static Matcher<? super Object> entrySubject(String label, int count) { public static Matcher<? super Object> entrySubject(String label, int count) {
return allOf( return allOf(
hasJsonPath("$.label", is(label)), hasJsonPath("$.label", is(label)),