mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 10:04:21 +00:00
added test to verify the correct functioning of versioning items with entity type
This commit is contained in:
@@ -630,6 +630,130 @@ public class VersionRestRepositoryIT extends AbstractControllerIntegrationTest {
|
||||
.andExpect(status().isForbidden());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createFirstVersionItemWithentityTypeByAdminAndPropertyBlockEntityEnableTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", true);
|
||||
context.turnOffAuthorisationSystem();
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
String adminToken = getAuthToken(admin.getEmail(), password);
|
||||
getClient(adminToken).perform(post("/api/versioning/versions")
|
||||
.param("summary", "test summary!")
|
||||
.contentType(MediaType.parseMediaType(RestMediaTypes.TEXT_URI_LIST_VALUE))
|
||||
.content("/api/core/items/" + itemA.getID()))
|
||||
.andExpect(status().isForbidden());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createFirstVersionItemWithEntityTypeAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
context.turnOffAuthorisationSystem();
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, parentCommunity)
|
||||
.withName("Collection test")
|
||||
.build();
|
||||
|
||||
Item item = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public test item")
|
||||
.withIssueDate("2021-04-27")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
AtomicReference<Integer> idRef = new AtomicReference<Integer>();
|
||||
String adminToken = getAuthToken(admin.getEmail(), password);
|
||||
|
||||
try {
|
||||
getClient(adminToken).perform(post("/api/versioning/versions")
|
||||
.param("summary", "test summary!")
|
||||
.contentType(MediaType.parseMediaType(RestMediaTypes.TEXT_URI_LIST_VALUE))
|
||||
.content("/api/core/items/" + item.getID()))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(jsonPath("$", Matchers.allOf(
|
||||
hasJsonPath("$.version", is(2)),
|
||||
hasJsonPath("$.summary", is("test summary!")),
|
||||
hasJsonPath("$.submitterName", is("first (admin) last (admin)")),
|
||||
hasJsonPath("$.type", is("version"))
|
||||
)))
|
||||
.andDo(result -> idRef.set(read(result.getResponse().getContentAsString(), "$.id")));
|
||||
} finally {
|
||||
VersionBuilder.delete(idRef.get());
|
||||
}
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createFirstVersionItemWithEntityTypeBySubmitterAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", true);
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
context.turnOffAuthorisationSystem();
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
itemA.setSubmitter(eperson);
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
AtomicReference<Integer> idRef = new AtomicReference<Integer>();
|
||||
String epersonToken = getAuthToken(eperson.getEmail(), password);
|
||||
try {
|
||||
getClient(epersonToken).perform(post("/api/versioning/versions")
|
||||
.param("summary", "test summary!")
|
||||
.contentType(MediaType.parseMediaType(RestMediaTypes.TEXT_URI_LIST_VALUE))
|
||||
.content("/api/core/items/" + itemA.getID()))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(jsonPath("$", Matchers.allOf(
|
||||
hasJsonPath("$.version", is(2)),
|
||||
hasJsonPath("$.summary", is("test summary!")),
|
||||
hasJsonPath("$.type", is("version"))
|
||||
)))
|
||||
.andDo(result -> idRef.set(read(result.getResponse().getContentAsString(), "$.id")));
|
||||
} finally {
|
||||
VersionBuilder.delete(idRef.get());
|
||||
}
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", false);
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void patchReplaceSummaryTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
@@ -219,7 +219,7 @@ public class CanCreateVersionFeatureIT extends AbstractControllerIntegrationTest
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkCanCreateVersionsFeature999Test() throws Exception {
|
||||
public void checkCanCreateVersionsFeatureAdminsTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
@@ -307,4 +307,152 @@ public class CanCreateVersionFeatureIT extends AbstractControllerIntegrationTest
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkCanCreateVersionFeatureAndPropertyBlockEntityEnableTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", true);
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.withAdminGroup(eperson)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withEntityType("Publication")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenEPerson = getAuthToken(eperson.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
String tokenUser = getAuthToken(user.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization user2ItemA = new Authorization(user, canCreateVersionFeature, itemRestA);
|
||||
Authorization admin2ItemA = new Authorization(admin, canCreateVersionFeature, itemRestA);
|
||||
Authorization eperson2ItemA = new Authorization(eperson, canCreateVersionFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + admin2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenUser).perform(get("/api/authz/authorizations/" + user2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenEPerson).perform(get("/api/authz/authorizations/" + eperson2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkCanCreateVersionFeatureAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withEntityType("Publication")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenEPerson = getAuthToken(eperson.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
String tokenUser = getAuthToken(user.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization user2ItemA = new Authorization(user, canCreateVersionFeature, itemRestA);
|
||||
Authorization admin2ItemA = new Authorization(admin, canCreateVersionFeature, itemRestA);
|
||||
Authorization eperson2ItemA = new Authorization(eperson, canCreateVersionFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + admin2ItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(admin2ItemA))));
|
||||
|
||||
getClient(tokenUser).perform(get("/api/authz/authorizations/" + user2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenEPerson).perform(get("/api/authz/authorizations/" + eperson2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkCanCreateVersionFeatureAndPropertyBlockEntityUnsetedTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", true);
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.withAdminGroup(eperson)
|
||||
.withSubmitterGroup(eperson)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withEntityType("Publication")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenEPerson = getAuthToken(eperson.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
String tokenUser = getAuthToken(user.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization user2ItemA = new Authorization(user, canCreateVersionFeature, itemRestA);
|
||||
Authorization admin2ItemA = new Authorization(admin, canCreateVersionFeature, itemRestA);
|
||||
Authorization eperson2ItemA = new Authorization(eperson, canCreateVersionFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + admin2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenUser).perform(get("/api/authz/authorizations/" + user2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenEPerson).perform(get("/api/authz/authorizations/" + eperson2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", true);
|
||||
}
|
||||
|
||||
}
|
@@ -28,6 +28,7 @@ import org.dspace.content.Item;
|
||||
import org.dspace.content.WorkspaceItem;
|
||||
import org.dspace.content.service.WorkspaceItemService;
|
||||
import org.dspace.eperson.EPerson;
|
||||
import org.dspace.services.ConfigurationService;
|
||||
import org.dspace.versioning.Version;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
@@ -46,6 +47,8 @@ public class CanDeleteVersionFeatureIT extends AbstractControllerIntegrationTest
|
||||
@Autowired
|
||||
private WorkspaceItemService workspaceItemService;
|
||||
@Autowired
|
||||
private ConfigurationService configurationService;
|
||||
@Autowired
|
||||
private AuthorizationFeatureService authorizationFeatureService;
|
||||
@Autowired
|
||||
private org.dspace.content.service.InstallItemService installItemService;
|
||||
@@ -255,4 +258,106 @@ public class CanDeleteVersionFeatureIT extends AbstractControllerIntegrationTest
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canDeleteVersionFeatureAndPropertyBlockEntityEnableTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", true);
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withEntityType("Publication")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
Version version = VersionBuilder.createVersion(context, itemA, "My test summary").build();
|
||||
WorkspaceItem workspaceItem = workspaceItemService.findByItem(context, version.getItem());
|
||||
installItemService.installItem(context, workspaceItem);
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
VersionRest versionRest = versionConverter.convert(version, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenEPerson = getAuthToken(eperson.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization admin2ItemA = new Authorization(admin, canDeleteVersionFeature, versionRest);
|
||||
Authorization eperson2ItemA = new Authorization(eperson, canDeleteVersionFeature, versionRest);
|
||||
Authorization anonymous2ItemA = new Authorization(null, canDeleteVersionFeature, versionRest);
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + admin2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenEPerson).perform(get("/api/authz/authorizations/" + eperson2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient().perform(get("/api/authz/authorizations/" + anonymous2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canDeleteVersionFeatureAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Collection col = CollectionBuilder.createCollection(context, rootCommunity)
|
||||
.withName("Collection 1")
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withEntityType("Publication")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
Version version = VersionBuilder.createVersion(context, itemA, "My test summary").build();
|
||||
WorkspaceItem workspaceItem = workspaceItemService.findByItem(context, version.getItem());
|
||||
installItemService.installItem(context, workspaceItem);
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
VersionRest versionRest = versionConverter.convert(version, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenEPerson = getAuthToken(eperson.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization admin2ItemA = new Authorization(admin, canDeleteVersionFeature, versionRest);
|
||||
Authorization eperson2ItemA = new Authorization(eperson, canDeleteVersionFeature, versionRest);
|
||||
Authorization anonymous2ItemA = new Authorization(null, canDeleteVersionFeature, versionRest);
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + admin2ItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(admin2ItemA))));
|
||||
|
||||
getClient(tokenEPerson).perform(get("/api/authz/authorizations/" + eperson2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient().perform(get("/api/authz/authorizations/" + anonymous2ItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
}
|
@@ -25,6 +25,7 @@ import org.dspace.content.Collection;
|
||||
import org.dspace.content.Community;
|
||||
import org.dspace.content.Item;
|
||||
import org.dspace.eperson.EPerson;
|
||||
import org.dspace.services.ConfigurationService;
|
||||
import org.dspace.versioning.Version;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
@@ -41,6 +42,8 @@ public class CanEditVersionFeatureIT extends AbstractControllerIntegrationTest {
|
||||
@Autowired
|
||||
private VersionConverter versionConverter;
|
||||
@Autowired
|
||||
private ConfigurationService configurationService;
|
||||
@Autowired
|
||||
private AuthorizationFeatureService authorizationFeatureService;
|
||||
|
||||
|
||||
@@ -198,4 +201,150 @@ public class CanEditVersionFeatureIT extends AbstractControllerIntegrationTest {
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canEditVersionsFeatureByColAndComAdminsAndPropertyBlockEntityEnableTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", true);
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol1 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol1Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Community subCommunityA = CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community A")
|
||||
.withAdminGroup(adminComA)
|
||||
.build();
|
||||
|
||||
Collection col1 = CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.withAdminGroup(adminCol1)
|
||||
.build();
|
||||
|
||||
Item item = ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
Version version = VersionBuilder.createVersion(context, item, "My test summary").build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
VersionRest versionRest = versionConverter.convert(version, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
String tokenAdminComA = getAuthToken(adminComA.getEmail(), password);
|
||||
String tokenAdminCol1 = getAuthToken(adminCol1.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization adminOfComAToVersion = new Authorization(adminComA, canEditVersionFeature, versionRest);
|
||||
Authorization adminOfCol1ToVersion = new Authorization(adminCol1, canEditVersionFeature, versionRest);
|
||||
Authorization adminToVersion = new Authorization(admin, canEditVersionFeature, versionRest);
|
||||
|
||||
getClient(tokenAdminComA).perform(get("/api/authz/authorizations/" + adminOfComAToVersion.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminCol1).perform(get("/api/authz/authorizations/" + adminOfCol1ToVersion.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + adminToVersion.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canEditVersionsFeatureByColAndComAdminsAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol1 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol1Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Community subCommunityA = CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community A")
|
||||
.withAdminGroup(adminComA)
|
||||
.build();
|
||||
|
||||
Collection col1 = CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.withAdminGroup(adminCol1)
|
||||
.build();
|
||||
|
||||
Item item = ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
Version version = VersionBuilder.createVersion(context, item, "My test summary").build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
VersionRest versionRest = versionConverter.convert(version, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenAdminComA = getAuthToken(adminComA.getEmail(), password);
|
||||
String tokenAdminCol1 = getAuthToken(adminCol1.getEmail(), password);
|
||||
String tokenAdmin = getAuthToken(admin.getEmail(), password);
|
||||
String tokenEPErson = getAuthToken(eperson.getEmail(), password);
|
||||
|
||||
// define authorizations that we know must exists
|
||||
Authorization adminOfComAToVersion = new Authorization(adminComA, canEditVersionFeature, versionRest);
|
||||
Authorization adminOfCol1ToVersion = new Authorization(adminCol1, canEditVersionFeature, versionRest);
|
||||
Authorization adminToVersion = new Authorization(admin, canEditVersionFeature, versionRest);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization epersonToVersion = new Authorization(eperson, canEditVersionFeature, versionRest);
|
||||
Authorization anonymousToVersion = new Authorization(null, canEditVersionFeature, versionRest);
|
||||
|
||||
getClient(tokenAdminComA).perform(get("/api/authz/authorizations/" + adminOfComAToVersion.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfComAToVersion))));
|
||||
|
||||
getClient(tokenAdminCol1).perform(get("/api/authz/authorizations/" + adminOfCol1ToVersion.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfCol1ToVersion))));
|
||||
|
||||
getClient(tokenAdmin).perform(get("/api/authz/authorizations/" + adminToVersion.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminToVersion))));
|
||||
|
||||
getClient(tokenEPErson).perform(get("/api/authz/authorizations/" + epersonToVersion.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient().perform(get("/api/authz/authorizations/" + anonymousToVersion.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
}
|
@@ -12,8 +12,11 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
import org.dspace.app.rest.authorization.impl.CanManageVersionsFeature;
|
||||
import org.dspace.app.rest.converter.ItemConverter;
|
||||
import org.dspace.app.rest.matcher.AuthorizationMatcher;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
import org.dspace.app.rest.projection.DefaultProjection;
|
||||
import org.dspace.app.rest.projection.Projection;
|
||||
import org.dspace.app.rest.test.AbstractControllerIntegrationTest;
|
||||
import org.dspace.app.rest.utils.Utils;
|
||||
@@ -26,6 +29,7 @@ import org.dspace.content.Community;
|
||||
import org.dspace.content.Item;
|
||||
import org.dspace.eperson.EPerson;
|
||||
import org.dspace.services.ConfigurationService;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -46,11 +50,14 @@ public class CanManageVersionsFeatureIT extends AbstractControllerIntegrationTes
|
||||
@Autowired
|
||||
private ConfigurationService configurationService;
|
||||
|
||||
@Autowired
|
||||
private AuthorizationFeatureService authorizationFeatureService;
|
||||
|
||||
private Item itemA;
|
||||
private EPerson user;
|
||||
private ItemRest itemARest;
|
||||
private Community communityA;
|
||||
private Collection collectionA;
|
||||
private AuthorizationFeature canManageVersionsFeature;
|
||||
|
||||
final String feature = "canManageVersions";
|
||||
|
||||
@@ -60,9 +67,7 @@ public class CanManageVersionsFeatureIT extends AbstractControllerIntegrationTes
|
||||
super.setUp();
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
user = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("userEmail@test.com")
|
||||
.withPassword(password).build();
|
||||
canManageVersionsFeature = authorizationFeatureService.find(CanManageVersionsFeature.NAME);
|
||||
|
||||
communityA = CommunityBuilder.createCommunity(context)
|
||||
.withName("communityA").build();
|
||||
@@ -114,41 +119,272 @@ public class CanManageVersionsFeatureIT extends AbstractControllerIntegrationTes
|
||||
}
|
||||
|
||||
@Test
|
||||
public void submitterItemSuccessTest() throws Exception {
|
||||
public void canManageVersionsFeatureAdminsTest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", true);
|
||||
itemA.setSubmitter(user);
|
||||
EPerson adminComB = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComBdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol1 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol1Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol2 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol2Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Community subCommunityA = CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community A")
|
||||
.withAdminGroup(adminComA)
|
||||
.build();
|
||||
|
||||
CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community B")
|
||||
.withAdminGroup(adminComB)
|
||||
.build();
|
||||
|
||||
Collection col1 = CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.withAdminGroup(adminCol1)
|
||||
.build();
|
||||
|
||||
CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 2")
|
||||
.withAdminGroup(adminCol2)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
String userToken = getAuthToken(user.getEmail(), password);
|
||||
getClient(userToken).perform(get("/api/authz/authorizations/search/object")
|
||||
.param("embed", "feature")
|
||||
.param("feature", feature)
|
||||
.param("uri", utils.linkToSingleResource(itemARest, "self").getHref()))
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenAdminComA = getAuthToken(adminComA.getEmail(), password);
|
||||
String tokenAdminComB = getAuthToken(adminComB.getEmail(), password);
|
||||
String tokenAdminCol1 = getAuthToken(adminCol1.getEmail(), password);
|
||||
String tokenAdminCol2 = getAuthToken(adminCol2.getEmail(), password);
|
||||
|
||||
// define authorizations that we know must exists
|
||||
Authorization adminOfComAToItemA = new Authorization(adminComA, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol1ToItemA = new Authorization(adminCol1, canManageVersionsFeature, itemRestA);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization adminOfComBToItemA = new Authorization(adminComB, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol2ToItemA = new Authorization(adminCol2, canManageVersionsFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdminComA).perform(get("/api/authz/authorizations/" + adminOfComAToItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.page.totalElements", greaterThan(0)))
|
||||
.andExpect(jsonPath("$._embedded").exists());
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfComAToItemA))));
|
||||
|
||||
getClient(tokenAdminCol1).perform(get("/api/authz/authorizations/" + adminOfCol1ToItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfCol1ToItemA))));
|
||||
|
||||
getClient(tokenAdminComB).perform(get("/api/authz/authorizations/" + adminOfComBToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminCol2).perform(get("/api/authz/authorizations/" + adminOfCol2ToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void submitterItemWithPropertySubmitterCanCreateNewVersionIsFalseTest() throws Exception {
|
||||
public void canManageVersionsFeatureAdminsAndPropertyBlockEntityEnableTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", true);
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
configurationService.setProperty("versioning.submitterCanCreateNewVersion", false);
|
||||
itemA.setSubmitter(user);
|
||||
EPerson adminComB = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComBdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol1 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol1Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol2 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol2Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Community subCommunityA = CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community A")
|
||||
.withAdminGroup(adminComA)
|
||||
.build();
|
||||
|
||||
CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community B")
|
||||
.withAdminGroup(adminComB)
|
||||
.build();
|
||||
|
||||
Collection col1 = CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.withAdminGroup(adminCol1)
|
||||
.build();
|
||||
|
||||
CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 2")
|
||||
.withAdminGroup(adminCol2)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
String userToken = getAuthToken(user.getEmail(), password);
|
||||
getClient(userToken).perform(get("/api/authz/authorizations/search/object")
|
||||
.param("embed", "feature")
|
||||
.param("feature", feature)
|
||||
.param("uri", utils.linkToSingleResource(itemARest, "self").getHref()))
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenAdminComA = getAuthToken(adminComA.getEmail(), password);
|
||||
String tokenAdminComB = getAuthToken(adminComB.getEmail(), password);
|
||||
String tokenAdminCol1 = getAuthToken(adminCol1.getEmail(), password);
|
||||
String tokenAdminCol2 = getAuthToken(adminCol2.getEmail(), password);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization adminOfComAToItemA = new Authorization(adminComA, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol1ToItemA = new Authorization(adminCol1, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfComBToItemA = new Authorization(adminComB, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol2ToItemA = new Authorization(adminCol2, canManageVersionsFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdminComA).perform(get("/api/authz/authorizations/" + adminOfComAToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminCol1).perform(get("/api/authz/authorizations/" + adminOfCol1ToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminComB).perform(get("/api/authz/authorizations/" + adminOfComBToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminCol2).perform(get("/api/authz/authorizations/" + adminOfCol2ToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canManageVersionsFeatureAdminsAndPropertyBlockEntityDisabledTest() throws Exception {
|
||||
configurationService.setProperty("versioning.block.entity", false);
|
||||
context.turnOffAuthorisationSystem();
|
||||
EPerson adminComA = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComAdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminComB = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testComBdminA@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol1 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol1Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
EPerson adminCol2 = EPersonBuilder.createEPerson(context)
|
||||
.withEmail("testCol2Admin@test.com")
|
||||
.withPassword(password)
|
||||
.build();
|
||||
|
||||
Community rootCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
|
||||
Community subCommunityA = CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community A")
|
||||
.withAdminGroup(adminComA)
|
||||
.build();
|
||||
|
||||
CommunityBuilder.createSubCommunity(context, rootCommunity)
|
||||
.withName("Sub Community B")
|
||||
.withAdminGroup(adminComB)
|
||||
.build();
|
||||
|
||||
Collection col1 = CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 1")
|
||||
.withSubmitterGroup(eperson)
|
||||
.withAdminGroup(adminCol1)
|
||||
.build();
|
||||
|
||||
CollectionBuilder.createCollection(context, subCommunityA)
|
||||
.withName("Collection 2")
|
||||
.withAdminGroup(adminCol2)
|
||||
.build();
|
||||
|
||||
Item itemA = ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item")
|
||||
.withIssueDate("2021-04-19")
|
||||
.withAuthor("Doe, John")
|
||||
.withEntityType("Publication")
|
||||
.withSubject("ExtraEntry")
|
||||
.build();
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
ItemRest itemRestA = itemConverter.convert(itemA, DefaultProjection.DEFAULT);
|
||||
|
||||
String tokenAdminComA = getAuthToken(adminComA.getEmail(), password);
|
||||
String tokenAdminComB = getAuthToken(adminComB.getEmail(), password);
|
||||
String tokenAdminCol1 = getAuthToken(adminCol1.getEmail(), password);
|
||||
String tokenAdminCol2 = getAuthToken(adminCol2.getEmail(), password);
|
||||
|
||||
// define authorizations that we know must exists
|
||||
Authorization adminOfComAToItemA = new Authorization(adminComA, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol1ToItemA = new Authorization(adminCol1, canManageVersionsFeature, itemRestA);
|
||||
|
||||
// define authorization that we know not exists
|
||||
Authorization adminOfComBToItemA = new Authorization(adminComB, canManageVersionsFeature, itemRestA);
|
||||
Authorization adminOfCol2ToItemA = new Authorization(adminCol2, canManageVersionsFeature, itemRestA);
|
||||
|
||||
getClient(tokenAdminComA).perform(get("/api/authz/authorizations/" + adminOfComAToItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.page.totalElements", is(0)))
|
||||
.andExpect(jsonPath("$._embedded").doesNotExist());
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfComAToItemA))));
|
||||
|
||||
getClient(tokenAdminCol1).perform(get("/api/authz/authorizations/" + adminOfCol1ToItemA.getID()))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$", Matchers.is(
|
||||
AuthorizationMatcher.matchAuthorization(adminOfCol1ToItemA))));
|
||||
|
||||
getClient(tokenAdminComB).perform(get("/api/authz/authorizations/" + adminOfComBToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
getClient(tokenAdminCol2).perform(get("/api/authz/authorizations/" + adminOfCol2ToItemA.getID()))
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
configurationService.setProperty("versioning.block.entity", "");
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user