mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-17 06:53:09 +00:00
Merge pull request #2418 from atmire/entities-feedback-2019-04
Configurable entities feedback
This commit is contained in:
@@ -1501,17 +1501,16 @@ prevent the generation of resource policy entry values with null dspace_object a
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getEntityTypeStringFromMetadata(List<MetadataValue> list) {
|
private String getEntityTypeStringFromMetadata(List<MetadataValue> list) {
|
||||||
String entityType = null;
|
|
||||||
for (MetadataValue mdv : list) {
|
for (MetadataValue mdv : list) {
|
||||||
if (StringUtils.equals(mdv.getMetadataField().getMetadataSchema().getName(),
|
if (StringUtils.equals(mdv.getMetadataField().getMetadataSchema().getName(),
|
||||||
"relationship")
|
"relationship")
|
||||||
&& StringUtils.equals(mdv.getMetadataField().getElement(),
|
&& StringUtils.equals(mdv.getMetadataField().getElement(),
|
||||||
"type")) {
|
"type")) {
|
||||||
|
|
||||||
entityType = mdv.getValue();
|
return mdv.getValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return entityType;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RelationshipMetadataValue constructResultingMetadataValue(Item item, String value,
|
private RelationshipMetadataValue constructResultingMetadataValue(Item item, String value,
|
||||||
|
@@ -248,10 +248,7 @@ public class RelationshipServiceImpl implements RelationshipService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String leftEntityType = list.get(0).getValue();
|
String leftEntityType = list.get(0).getValue();
|
||||||
if (!StringUtils.equals(leftEntityType, entityTypeToProcess.getLabel())) {
|
return StringUtils.equals(leftEntityType, entityTypeToProcess.getLabel());
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Relationship find(Context context, int id) throws SQLException {
|
public Relationship find(Context context, int id) throws SQLException {
|
||||||
|
@@ -20,6 +20,7 @@ import org.dspace.core.Context;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +37,11 @@ public class EntityTypeRestRepository extends DSpaceRestRepository<EntityTypeRes
|
|||||||
|
|
||||||
public EntityTypeRest findOne(Context context, Integer integer) {
|
public EntityTypeRest findOne(Context context, Integer integer) {
|
||||||
try {
|
try {
|
||||||
return entityTypeConverter.fromModel(entityTypeService.find(context, integer));
|
EntityType entityType = entityTypeService.find(context, integer);
|
||||||
|
if (entityType == null) {
|
||||||
|
throw new ResourceNotFoundException("The entityType for ID: " + integer + " could not be found");
|
||||||
|
}
|
||||||
|
return entityTypeConverter.fromModel(entityType);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
throw new RuntimeException(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
|
@@ -146,8 +146,8 @@ public class WorkflowItemRestRepository extends DSpaceRestRepository<WorkflowIte
|
|||||||
@Override
|
@Override
|
||||||
protected WorkflowItemRest createAndReturn(Context context, List<String> stringList) {
|
protected WorkflowItemRest createAndReturn(Context context, List<String> stringList) {
|
||||||
XmlWorkflowItem source;
|
XmlWorkflowItem source;
|
||||||
if (stringList.isEmpty()) {
|
if (stringList == null || stringList.isEmpty() || stringList.size() > 1) {
|
||||||
throw new UnprocessableEntityException("The given URI list could not be parsed and is empty as a result");
|
throw new UnprocessableEntityException("The given URI list could not be properly parsed to one result");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
source = submissionService.createWorkflowItem(context, stringList.get(0));
|
source = submissionService.createWorkflowItem(context, stringList.get(0));
|
||||||
|
@@ -10,14 +10,10 @@ package org.dspace.app.rest;
|
|||||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
import org.dspace.app.rest.matcher.EntityTypeMatcher;
|
import org.dspace.app.rest.matcher.EntityTypeMatcher;
|
||||||
import org.dspace.app.rest.test.AbstractEntityIntegrationTest;
|
import org.dspace.app.rest.test.AbstractEntityIntegrationTest;
|
||||||
import org.dspace.content.EntityType;
|
import org.dspace.content.EntityType;
|
||||||
@@ -31,59 +27,6 @@ public class EntityTypeRestRepositoryIT extends AbstractEntityIntegrationTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private EntityTypeService entityTypeService;
|
private EntityTypeService entityTypeService;
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findAllEntityTypesSizeTest() throws SQLException {
|
|
||||||
assertEquals(7, entityTypeService.findAll(context).size());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findPublicationEntityTypeTest() throws SQLException {
|
|
||||||
String type = "Publication";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findPersonEntityTypeTest() throws SQLException {
|
|
||||||
String type = "Person";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findProjectEntityTypeTest() throws SQLException {
|
|
||||||
String type = "Project";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findOrgUnitEntityTypeTest() throws SQLException {
|
|
||||||
String type = "OrgUnit";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findJournalEntityTypeTest() throws SQLException {
|
|
||||||
String type = "Journal";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findJournalVolumeEntityTypeTest() throws SQLException {
|
|
||||||
String type = "JournalVolume";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void findJournalIssueEntityTypeTest() throws SQLException {
|
|
||||||
String type = "JournalIssue";
|
|
||||||
checkEntityType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkEntityType(String type) throws SQLException {
|
|
||||||
EntityType entityType = entityTypeService.findByEntityType(context, type);
|
|
||||||
assertNotNull(entityType);
|
|
||||||
assertEquals(type, entityType.getLabel());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAllEntityTypeEndpoint() throws Exception {
|
public void getAllEntityTypeEndpoint() throws Exception {
|
||||||
//When we call this facets endpoint
|
//When we call this facets endpoint
|
||||||
@@ -109,4 +52,60 @@ public class EntityTypeRestRepositoryIT extends AbstractEntityIntegrationTest {
|
|||||||
.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "JournalIssue"))
|
.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "JournalIssue"))
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAllEntityTypeEndpointWithPaging() throws Exception {
|
||||||
|
getClient().perform(get("/api/core/entitytypes").param("size", "5"))
|
||||||
|
|
||||||
|
//We expect a 200 OK status
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
//The type has to be 'discover'
|
||||||
|
.andExpect(jsonPath("$.page.size", is(5)))
|
||||||
|
.andExpect(jsonPath("$.page.totalElements", is(7)))
|
||||||
|
.andExpect(jsonPath("$.page.totalPages", is(2)))
|
||||||
|
//There needs to be a self link to this endpoint
|
||||||
|
.andExpect(jsonPath("$._links.self.href", containsString("api/core/entitytypes")))
|
||||||
|
//We have 4 facets in the default configuration, they need to all be present in the embedded section
|
||||||
|
.andExpect(jsonPath("$._embedded.entitytypes", containsInAnyOrder(
|
||||||
|
EntityTypeMatcher
|
||||||
|
.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "Publication")),
|
||||||
|
EntityTypeMatcher.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "Person")),
|
||||||
|
EntityTypeMatcher.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "Project")),
|
||||||
|
EntityTypeMatcher.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "OrgUnit")),
|
||||||
|
EntityTypeMatcher.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "Journal"))
|
||||||
|
)));
|
||||||
|
|
||||||
|
getClient().perform(get("/api/core/entitytypes").param("size", "5").param("page", "1"))
|
||||||
|
|
||||||
|
//We expect a 200 OK status
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
//The type has to be 'discover'
|
||||||
|
.andExpect(jsonPath("$.page.size", is(5)))
|
||||||
|
.andExpect(jsonPath("$.page.totalElements", is(7)))
|
||||||
|
.andExpect(jsonPath("$.page.totalPages", is(2)))
|
||||||
|
.andExpect(jsonPath("$.page.number", is(1)))
|
||||||
|
//There needs to be a self link to this endpoint
|
||||||
|
.andExpect(jsonPath("$._links.self.href", containsString("api/core/entitytypes")))
|
||||||
|
//We have 4 facets in the default configuration, they need to all be present in the embedded section
|
||||||
|
.andExpect(jsonPath("$._embedded.entitytypes", containsInAnyOrder(
|
||||||
|
EntityTypeMatcher
|
||||||
|
.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "JournalVolume")),
|
||||||
|
EntityTypeMatcher
|
||||||
|
.matchEntityTypeEntry(entityTypeService.findByEntityType(context, "JournalIssue"))
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void retrieveOneEntityType() throws Exception {
|
||||||
|
EntityType entityType = entityTypeService.findByEntityType(context, "Publication");
|
||||||
|
getClient().perform(get("/api/core/entitytypes/" + entityType.getID()))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$", EntityTypeMatcher.matchEntityTypeEntry(entityType)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void retrieveOneEntityTypeThatDoesNotExist() throws Exception {
|
||||||
|
getClient().perform(get("/api/core/entitytypes/" + 5555))
|
||||||
|
.andExpect(status().isNotFound());
|
||||||
|
}
|
||||||
}
|
}
|
@@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.dspace.app.rest;
|
package org.dspace.app.rest;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
import static org.hamcrest.Matchers.containsInAnyOrder;
|
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -25,6 +26,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.dspace.app.rest.builder.CollectionBuilder;
|
import org.dspace.app.rest.builder.CollectionBuilder;
|
||||||
import org.dspace.app.rest.builder.CommunityBuilder;
|
import org.dspace.app.rest.builder.CommunityBuilder;
|
||||||
|
import org.dspace.app.rest.builder.EPersonBuilder;
|
||||||
import org.dspace.app.rest.builder.ItemBuilder;
|
import org.dspace.app.rest.builder.ItemBuilder;
|
||||||
import org.dspace.app.rest.builder.RelationshipBuilder;
|
import org.dspace.app.rest.builder.RelationshipBuilder;
|
||||||
import org.dspace.app.rest.matcher.PageMatcher;
|
import org.dspace.app.rest.matcher.PageMatcher;
|
||||||
@@ -160,6 +162,28 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
RelationshipMatcher.matchRelationship(relationship3)
|
RelationshipMatcher.matchRelationship(relationship3)
|
||||||
)))
|
)))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
getClient().perform(get("/api/core/relationships").param("size", "2"))
|
||||||
|
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.page",
|
||||||
|
is(PageMatcher.pageEntryWithTotalPagesAndElements(0, 2, 2, 3))))
|
||||||
|
.andExpect(jsonPath("$._embedded.relationships", containsInAnyOrder(
|
||||||
|
RelationshipMatcher.matchRelationship(relationship1),
|
||||||
|
RelationshipMatcher.matchRelationship(relationship2)
|
||||||
|
)))
|
||||||
|
;
|
||||||
|
|
||||||
|
getClient().perform(get("/api/core/relationships").param("size", "2").param("page", "1"))
|
||||||
|
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.page",
|
||||||
|
is(PageMatcher.pageEntryWithTotalPagesAndElements(1, 2, 2, 3))))
|
||||||
|
.andExpect(jsonPath("$._embedded.relationships", contains(
|
||||||
|
RelationshipMatcher.matchRelationship(relationship3)
|
||||||
|
)))
|
||||||
|
;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -197,16 +221,8 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
"isAuthorOfPublication", "isPublicationOfAuthor");
|
"isAuthorOfPublication", "isPublicationOfAuthor");
|
||||||
|
|
||||||
|
|
||||||
|
EPerson user = EPersonBuilder.createEPerson(context).withEmail("testaze@email.com")
|
||||||
EPerson user = ePersonService.create(context);
|
.withNameInMetadata("first", "last").withPassword(password).build();
|
||||||
user.setFirstName(context, "first");
|
|
||||||
user.setLastName(context, "last");
|
|
||||||
user.setEmail("testaze@email.com");
|
|
||||||
user.setCanLogIn(true);
|
|
||||||
user.setLanguage(context, I18nUtil.getDefaultLocale().getLanguage());
|
|
||||||
ePersonService.setPassword(user, password);
|
|
||||||
// actually save the eperson to unit testing DB
|
|
||||||
ePersonService.update(context, user);
|
|
||||||
context.setCurrentUser(user);
|
context.setCurrentUser(user);
|
||||||
|
|
||||||
authorizeService.addPolicy(context, publication, Constants.WRITE, user);
|
authorizeService.addPolicy(context, publication, Constants.WRITE, user);
|
||||||
@@ -228,6 +244,17 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
.andExpect(status().isCreated())
|
.andExpect(status().isCreated())
|
||||||
.andReturn();
|
.andReturn();
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
String content = mvcResult.getResponse().getContentAsString();
|
||||||
|
Map<String, Object> map = mapper.readValue(content, Map.class);
|
||||||
|
String firstRelationshipIdString = String.valueOf(map.get("id"));
|
||||||
|
|
||||||
|
getClient().perform(get("/api/core/relationships/" + firstRelationshipIdString))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.leftId", is(publication.getID().toString())))
|
||||||
|
.andExpect(jsonPath("$.rightId", is(author1.getID().toString())));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -266,15 +293,8 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
EPerson user = ePersonService.create(context);
|
EPerson user = EPersonBuilder.createEPerson(context).withEmail("testaze@email.com")
|
||||||
user.setFirstName(context, "first");
|
.withNameInMetadata("first", "last").withPassword(password).build();
|
||||||
user.setLastName(context, "last");
|
|
||||||
user.setEmail("testazhfhdfhe@email.com");
|
|
||||||
user.setCanLogIn(true);
|
|
||||||
user.setLanguage(context, I18nUtil.getDefaultLocale().getLanguage());
|
|
||||||
ePersonService.setPassword(user, password);
|
|
||||||
// actually save the eperson to unit testing DB
|
|
||||||
ePersonService.update(context, user);
|
|
||||||
context.setCurrentUser(user);
|
context.setCurrentUser(user);
|
||||||
|
|
||||||
authorizeService.addPolicy(context, author1, Constants.WRITE, user);
|
authorizeService.addPolicy(context, author1, Constants.WRITE, user);
|
||||||
@@ -295,6 +315,16 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
.andExpect(status().isCreated())
|
.andExpect(status().isCreated())
|
||||||
.andReturn();
|
.andReturn();
|
||||||
|
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
String content = mvcResult.getResponse().getContentAsString();
|
||||||
|
Map<String, Object> map = mapper.readValue(content, Map.class);
|
||||||
|
String firstRelationshipIdString = String.valueOf(map.get("id"));
|
||||||
|
|
||||||
|
getClient().perform(get("/api/core/relationships/" + firstRelationshipIdString))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.leftId", is(publication.getID().toString())))
|
||||||
|
.andExpect(jsonPath("$.rightId", is(author1.getID().toString())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -334,15 +364,8 @@ public class RelationshipRestRepositoryIT extends AbstractEntityIntegrationTest
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
EPerson user = ePersonService.create(context);
|
EPerson user = EPersonBuilder.createEPerson(context).withEmail("testaze@email.com")
|
||||||
user.setFirstName(context, "first");
|
.withNameInMetadata("first", "last").withPassword(password).build();
|
||||||
user.setLastName(context, "last");
|
|
||||||
user.setEmail("testazeazeazezae@email.com");
|
|
||||||
user.setCanLogIn(true);
|
|
||||||
user.setLanguage(context, I18nUtil.getDefaultLocale().getLanguage());
|
|
||||||
ePersonService.setPassword(user, password);
|
|
||||||
// actually save the eperson to unit testing DB
|
|
||||||
ePersonService.update(context, user);
|
|
||||||
context.setCurrentUser(user);
|
context.setCurrentUser(user);
|
||||||
context.restoreAuthSystemState();
|
context.restoreAuthSystemState();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user