CST-12467 fix solr query for findSourcesByTarget, add ITs

This commit is contained in:
Andrea Bollini
2023-11-03 21:48:24 +01:00
parent a144caa2c2
commit b16045b82f
2 changed files with 111 additions and 1 deletions

View File

@@ -412,7 +412,7 @@ public class QAEventServiceImpl implements QAEventService {
solrQuery.setRows(0);
solrQuery.addFilterQuery(SOURCE + ":\"" + sourceName + "\"");
if (target != null) {
solrQuery.addFilterQuery(target + ":" + target.toString());
solrQuery.addFilterQuery("resource_uuid:" + target.toString());
}
solrQuery.setFacet(true);
solrQuery.setFacetMinCount(1);
@@ -463,6 +463,7 @@ public class QAEventServiceImpl implements QAEventService {
return Arrays.stream(getSupportedSources())
.map((sourceName) -> findSource(sourceName, target))
.sorted(comparing(QASource::getTotalEvents).reversed())
.filter(source -> source.getTotalEvents() > 0)
.skip(offset)
.limit(pageSize)
.collect(Collectors.toList());

View File

@@ -21,6 +21,7 @@ import org.dspace.builder.CommunityBuilder;
import org.dspace.builder.ItemBuilder;
import org.dspace.builder.QAEventBuilder;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.Item;
import org.dspace.content.QAEvent;
import org.dspace.services.ConfigurationService;
@@ -189,6 +190,106 @@ public class QASourceRestRepositoryIT extends AbstractControllerIntegrationTest
}
@Test
public void testFindAllByTarget() throws Exception {
context.turnOffAuthorisationSystem();
Community com = CommunityBuilder.createCommunity(context).withName("Test community").build();
Collection col = CollectionBuilder.createCollection(context, com).withName("Test collection").build();
Item target1 = ItemBuilder.createItem(context, col).withTitle("Test item1").build();
Item target2 = ItemBuilder.createItem(context, col).withTitle("Test item2").build();
createEvent("openaire", "TOPIC/OPENAIRE/1", target1);
createEvent("openaire", "TOPIC/OPENAIRE/2", target1);
createEvent("test-source", "TOPIC/TEST/1", target1);
createEvent("test-source", "TOPIC/TEST/1", target2);
context.restoreAuthSystemState();
String authToken = getAuthToken(admin.getEmail(), password);
getClient(authToken)
.perform(get("/api/integration/qualityassurancesources/search/byTarget").param("target",
target1.getID().toString()))
.andExpect(status().isOk()).andExpect(content().contentType(contentType))
.andExpect(jsonPath("$._embedded.qualityassurancesources",
contains(matchQASourceEntry("openaire:" + target1.getID().toString(), 2),
matchQASourceEntry("test-source:" + target1.getID().toString(), 1))))
.andExpect(jsonPath("$.page.size", is(20)))
.andExpect(jsonPath("$.page.totalElements", is(2)));
getClient(authToken)
.perform(get("/api/integration/qualityassurancesources/search/byTarget").param("target",
target2.getID().toString()))
.andExpect(status().isOk()).andExpect(content().contentType(contentType))
.andExpect(jsonPath("$._embedded.qualityassurancesources",
contains(matchQASourceEntry("test-source:" + target2.getID().toString(), 1))))
.andExpect(jsonPath("$.page.size", is(20)))
.andExpect(jsonPath("$.page.totalElements", is(1)));
}
@Test
public void testFindByTargetBadRequest() throws Exception {
context.turnOffAuthorisationSystem();
Community com = CommunityBuilder.createCommunity(context).withName("Test community").build();
Collection col = CollectionBuilder.createCollection(context, com).withName("Test collection").build();
Item target1 = ItemBuilder.createItem(context, col).withTitle("Test item1").build();
Item target2 = ItemBuilder.createItem(context, col).withTitle("Test item2").build();
createEvent("openaire", "TOPIC/OPENAIRE/1", target1);
createEvent("openaire", "TOPIC/OPENAIRE/2", target1);
createEvent("test-source", "TOPIC/TEST/1", target1);
createEvent("test-source", "TOPIC/TEST/1", target2);
context.restoreAuthSystemState();
String authToken = getAuthToken(admin.getEmail(), password);
getClient(authToken)
.perform(get("/api/integration/qualityassurancesources/search/byTarget"))
.andExpect(status().isBadRequest());
}
@Test
public void testFindByTargetUnauthorized() throws Exception {
context.turnOffAuthorisationSystem();
Community com = CommunityBuilder.createCommunity(context).withName("Test community").build();
Collection col = CollectionBuilder.createCollection(context, com).withName("Test collection").build();
Item target1 = ItemBuilder.createItem(context, col).withTitle("Test item1").build();
Item target2 = ItemBuilder.createItem(context, col).withTitle("Test item2").build();
createEvent("openaire", "TOPIC/OPENAIRE/1", target1);
createEvent("openaire", "TOPIC/OPENAIRE/2", target1);
createEvent("test-source", "TOPIC/TEST/1", target1);
createEvent("test-source", "TOPIC/TEST/1", target2);
context.restoreAuthSystemState();
getClient()
.perform(get("/api/integration/qualityassurancesources/search/byTarget").param("target",
target1.getID().toString()))
.andExpect(status().isUnauthorized());
}
@Test
public void testFindByTargetForbidden() throws Exception {
context.turnOffAuthorisationSystem();
Community com = CommunityBuilder.createCommunity(context).withName("Test community").build();
Collection col = CollectionBuilder.createCollection(context, com).withName("Test collection").build();
Item target1 = ItemBuilder.createItem(context, col).withTitle("Test item1").build();
Item target2 = ItemBuilder.createItem(context, col).withTitle("Test item2").build();
createEvent("openaire", "TOPIC/OPENAIRE/1", target1);
createEvent("openaire", "TOPIC/OPENAIRE/2", target1);
createEvent("test-source", "TOPIC/TEST/1", target1);
createEvent("test-source", "TOPIC/TEST/1", target2);
context.restoreAuthSystemState();
String authToken = getAuthToken(eperson.getEmail(), password);
getClient(authToken)
.perform(get("/api/integration/qualityassurancesources/search/byTarget").param("target",
target1.getID().toString()))
.andExpect(status().isForbidden());
}
private QAEvent createEvent(String source, String topic, String title) {
return QAEventBuilder.createTarget(context, target)
.withSource(source)
@@ -197,4 +298,12 @@ public class QASourceRestRepositoryIT extends AbstractControllerIntegrationTest
.build();
}
private QAEvent createEvent(String source, String topic, Item item) {
return QAEventBuilder.createTarget(context, item)
.withSource(source)
.withTopic(topic)
.withTitle(item.getName())
.build();
}
}