Skip to content

Commit

Permalink
100414: Missing search result statistics code cleanup + extra test
Browse files Browse the repository at this point in the history
  • Loading branch information
Atmire-Kristof committed May 11, 2023
1 parent 583b38a commit 0528b4d
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 75 deletions.
Expand Up @@ -7,16 +7,20 @@
*/
package org.dspace.app.rest.converter;

import java.sql.SQLException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.dspace.app.rest.model.PageRest;
import org.dspace.app.rest.model.SearchEventRest;
import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.utils.DSpaceObjectResolver;
import org.dspace.app.rest.utils.ScopeResolver;
import org.dspace.app.util.service.DSpaceObjectUtils;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.discovery.IndexableObject;
import org.dspace.usage.UsageEvent;
Expand All @@ -26,22 +30,37 @@

@Component
public class SearchEventConverter {
/* Log4j logger */
private static final Logger log = Logger.getLogger(SearchEventConverter.class);

@Autowired
private ScopeResolver scopeResolver;

@Autowired
private DSpaceObjectResolver dSpaceObjectResolver;
private DSpaceObjectUtils dSpaceObjectUtils;

private final Integer[] allowedClickedObjectTypes =
new Integer[]{Constants.COMMUNITY, Constants.COLLECTION, Constants.ITEM};

public UsageSearchEvent convert(Context context, HttpServletRequest request, SearchEventRest searchEventRest) {
UsageSearchEvent usageSearchEvent = new UsageSearchEvent(UsageEvent.Action.SEARCH, request, context,
null);
usageSearchEvent.setQuery(searchEventRest.getQuery());
usageSearchEvent.setDsoType(searchEventRest.getDsoType());
if (searchEventRest.getObject() != null) {
IndexableObject object = dSpaceObjectResolver.resolveObject(context, searchEventRest.getObject());
if (object != null && object.getIndexedObject() instanceof DSpaceObject) {
usageSearchEvent.setObject((DSpaceObject) object.getIndexedObject());
if (searchEventRest.getClickedObject() != null) {
try {
DSpaceObject clickedObject =
dSpaceObjectUtils.findDSpaceObject(context, searchEventRest.getClickedObject());
if (clickedObject != null &&
Arrays.asList(allowedClickedObjectTypes).contains(clickedObject.getType())) {
usageSearchEvent.setObject(clickedObject);
} else {
throw new IllegalArgumentException("UUID " + searchEventRest.getClickedObject() +
" was expected to resolve to a Community, Collection or Item, but didn't resolve to any");
}
} catch (SQLException e) {
log.warn("Unable to retrieve DSpace Object with ID " + searchEventRest.getClickedObject() +
" from the database", e);
}
}
if (searchEventRest.getScope() != null) {
Expand Down
Expand Up @@ -25,7 +25,7 @@ public class SearchEventRest extends BaseObjectRest<UUID> {
private UUID scope;
private String configuration;
private String dsoType;
private UUID object;
private UUID clickedObject;
private List<SearchResultsRest.AppliedFilter> appliedFilters;
private SearchResultsRest.Sorting sort;
private PageRest page;
Expand Down Expand Up @@ -99,11 +99,11 @@ public void setDsoType(String dsoType) {
this.dsoType = dsoType;
}

public UUID getObject() {
return object;
public UUID getClickedObject() {
return clickedObject;
}

public void setObject(UUID object) {
this.object = object;
public void setClickedObject(UUID clickedObject) {
this.clickedObject = clickedObject;
}
}

This file was deleted.

Expand Up @@ -413,7 +413,7 @@ public void postTestSuccesEmptyQuery() throws Exception {
}

@Test
public void postTestWithObjectSuccess() throws Exception {
public void postTestWithClickedObjectSuccess() throws Exception {

context.turnOffAuthorisationSystem();

Expand Down Expand Up @@ -441,10 +441,10 @@ public void postTestWithObjectSuccess() throws Exception {
SearchEventRest searchEventRest = new SearchEventRest();

searchEventRest.setQuery("test");
searchEventRest.setScope(publicItem1.getID());
searchEventRest.setScope(col1.getID());
searchEventRest.setConfiguration("default");
searchEventRest.setDsoType("item");
searchEventRest.setObject(publicItem1.getID());
searchEventRest.setClickedObject(publicItem1.getID());

SearchResultsRest.Sorting sort = new SearchResultsRest.Sorting("title", "desc");
searchEventRest.setSort(sort);
Expand All @@ -466,4 +466,59 @@ public void postTestWithObjectSuccess() throws Exception {
.andExpect(status().isCreated());

}

@Test
public void postTestWithClickedObjectNotExisting() throws Exception {

context.turnOffAuthorisationSystem();

//** GIVEN **
//1. A community-collection structure with one parent community with sub-community and two collections.
parentCommunity = CommunityBuilder.createCommunity(context)
.withName("Parent Community")
.build();
Community child1 = CommunityBuilder.createSubCommunity(context, parentCommunity)
.withName("Sub Community")
.build();
Collection col1 = CollectionBuilder.createCollection(context, child1).withName("Collection 1").build();
Collection col2 = CollectionBuilder.createCollection(context, child1).withName("Collection 2").build();

//2. Three public items that are readable by Anonymous with different subjects
Item publicItem1 = ItemBuilder.createItem(context, col1)
.withTitle("Public item 1")
.withIssueDate("2017-10-17")
.withAuthor("Smith, Donald").withAuthor("Doe, John")
.withSubject("ExtraEntry")
.build();

context.restoreAuthSystemState();

SearchEventRest searchEventRest = new SearchEventRest();

searchEventRest.setQuery("test");
searchEventRest.setScope(col1.getID());
searchEventRest.setConfiguration("default");
searchEventRest.setDsoType("item");
searchEventRest.setClickedObject(UUID.randomUUID());

SearchResultsRest.Sorting sort = new SearchResultsRest.Sorting("title", "desc");
searchEventRest.setSort(sort);

PageRest pageRest = new PageRest(5, 20, 4, 1);
searchEventRest.setPage(pageRest);

SearchResultsRest.AppliedFilter appliedFilter =
new SearchResultsRest.AppliedFilter("author", "contains", "test","test");
List<SearchResultsRest.AppliedFilter> appliedFilterList = new LinkedList<>();
appliedFilterList.add(appliedFilter);
searchEventRest.setAppliedFilters(appliedFilterList);

ObjectMapper mapper = new ObjectMapper();

getClient().perform(post("/api/statistics/searchevents")
.content(mapper.writeValueAsBytes(searchEventRest))
.contentType(contentType))
.andExpect(status().isBadRequest());

}
}

0 comments on commit 0528b4d

Please sign in to comment.