diff --git a/e2e-test/java/org/alfresco/rest/people/UpdateSiteMembershipRequestFullTests.java b/e2e-test/java/org/alfresco/rest/people/UpdateSiteMembershipRequestFullTests.java new file mode 100644 index 000000000..a44186016 --- /dev/null +++ b/e2e-test/java/org/alfresco/rest/people/UpdateSiteMembershipRequestFullTests.java @@ -0,0 +1,508 @@ +package org.alfresco.rest.people; + +import org.alfresco.rest.RestTest; +import org.alfresco.rest.core.RestRequest; +import org.alfresco.rest.exception.JsonToModelConversionException; +import org.alfresco.rest.model.RestErrorModel; +import org.alfresco.rest.model.RestSiteMembershipRequestModel; +import org.alfresco.rest.model.RestTaskModel; +import org.alfresco.utility.constants.UserRole; +import org.alfresco.utility.exception.DataPreparationException; +import org.alfresco.utility.model.SiteModel; +import org.alfresco.utility.model.TestGroup; +import org.alfresco.utility.model.UserModel; +import org.alfresco.utility.testrail.ExecutionType; +import org.alfresco.utility.testrail.annotation.TestRail; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class UpdateSiteMembershipRequestFullTests extends RestTest +{ + private SiteModel moderatedSite; + private UserModel managerUser, adminUser, newMember, regularUser; + private String updatedMessage, moderatedSiteId; + private RestSiteMembershipRequestModel requestUpdateModel, requestGetModel; + + @BeforeClass(alwaysRun = true) + public void dataPreparation() throws Exception + { + adminUser = dataUser.getAdminUser(); + managerUser = dataUser.createRandomTestUser(); + moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + updatedMessage = "Please review my request"; + + newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser().addSiteMembershipRequest(moderatedSite); + moderatedSiteId = moderatedSite.getId(); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify user is not able to update membership request of admin") + public void userIsNotAbleToUpdateSiteMembershipRequestOfAdmin() throws JsonToModelConversionException, Exception + { + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(adminUser).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + restClient.authenticateUser(newMember).withCoreAPI().usingUser(adminUser) + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format("The entity with id: " + RestErrorModel.ENTITY_NOT_FOUND, adminUser.getUsername())) + .descriptionURLIs(RestErrorModel.RESTAPIEXPLORER) + .stackTraceIs(RestErrorModel.STACKTRACE); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify user is able to update site membership request for moderated site") + public void userCanUpdateSiteMembershipRequestForModeratedSite() throws Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + requestUpdateModel = restClient.withCoreAPI().usingMe() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + restClient.assertStatusCodeIs(HttpStatus.OK); + + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("site").isNotEmpty() + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify site collaborator is able to update site membership request") + public void siteCollaboratorIsAbleToUpdateSiteMembershipRequest() throws JsonToModelConversionException, Exception + { + dataUser.usingUser(managerUser).addUserToSite(newMember, moderatedSite, UserRole.SiteCollaborator); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("role").is(UserRole.SiteCollaborator) + .assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify site contributor is able to update site membership request") + public void siteContributorIsAbleToUpdateSiteMembershipRequest() throws JsonToModelConversionException, Exception + { + newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + dataUser.usingUser(managerUser).addUserToSite(newMember, moderatedSite, UserRole.SiteContributor); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("role").is(UserRole.SiteContributor) + .assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify site consumer is able to update site membership request") + public void siteConsumerIsAbleToUpdateSiteMembershipRequest() throws JsonToModelConversionException, Exception + { + newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + dataUser.usingUser(managerUser).addUserToSite(newMember, moderatedSite, UserRole.SiteConsumer); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("role").is(UserRole.SiteConsumer) + .assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify site manager is able to update site membership request") + public void siteManagerIsAbleToUpdateSiteMembershipRequest() throws JsonToModelConversionException, Exception + { + newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + dataUser.usingUser(managerUser).addUserToSite(newMember, moderatedSite, UserRole.SiteManager); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("role").is(UserRole.SiteManager) + .assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify admin is able to update site membership request") + public void adminIsAbleToRetrieveSiteMembershipRequest() throws JsonToModelConversionException, Exception + { + regularUser = dataUser.createRandomTestUser(); + SiteModel anotherModeratedSite = dataSite.usingUser(regularUser).createModeratedRandomSite(); + requestUpdateModel = restClient.authenticateUser(adminUser).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(anotherModeratedSite); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + + requestUpdateModel = restClient.withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(anotherModeratedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(anotherModeratedSite.getId()) + .assertThat().field("message").is("Please review my request") + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("visibility").is(anotherModeratedSite.getVisibility()) + .assertThat().field("guid").is(anotherModeratedSite.getGuid()) + .assertThat().field("description").is(anotherModeratedSite.getDescription()) + .assertThat().field("id").is(anotherModeratedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(anotherModeratedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify user update site membership request with no message then adds a new message") + public void userUpdateSiteMembershipRequestWithNoMessageThenAddsNewMessage() throws Exception + { + UserModel newMember = dataUser.createRandomTestUser(); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is("Please accept me"); + + requestUpdateModel = restClient.withCoreAPI().usingMe().updateSiteMembershipRequest(moderatedSite, ""); + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .and().field("modifiedAt").isNotEmpty() + .assertThat().field("message").isNull(); + + requestUpdateModel = restClient.withCoreAPI().usingMe().updateSiteMembershipRequest(moderatedSite, updatedMessage); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify user updates site membership request and verifies 'ModifiedAt' field using GET") + public void userUpdateSiteMembershipRequestAndCheckModifiedAtWithGet() throws Exception + { + UserModel newMember = dataUser.createRandomTestUser(); + requestUpdateModel = restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is("Please accept me"); + + requestUpdateModel = restClient.withCoreAPI().usingAuthUser().updateSiteMembershipRequest(moderatedSite, updatedMessage); + requestGetModel = restClient.withCoreAPI().usingAuthUser().getSiteMembershipRequest(moderatedSite); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestGetModel.assertThat().field("id").is(requestUpdateModel.getId()) + .and().field("modifiedAt").is(requestUpdateModel.getModifiedAt()) + .assertThat().field("message").is(requestUpdateModel.getMessage()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update membership request - empty body") + public void emptyBodyUpdateSiteMembershipRequest() throws Exception + { + restClient.authenticateUser(adminUser).withCoreAPI(); + RestRequest request = RestRequest.requestWithBody(HttpMethod.PUT, "{\"\": \"\",\"\": \"\", \"\": \"\"}", + "people/{personId}/site-membership-requests/{siteId}", adminUser.getUsername(), moderatedSite.getId()); + restClient.processModel(RestSiteMembershipRequestModel.class, request); + + restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST) + .assertLastError().containsSummary(String.format(RestErrorModel.NO_CONTENT, "Unrecognized field " + "\"\"")); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update membership request - missing 'Title' field from Json") + public void missingTitleFieldBodyUpdateSiteMembershipRequest() throws Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + RestRequest request = RestRequest.requestWithBody(HttpMethod.PUT, + "{\"message\":\"Please review my request\",\"id\":\"" + moderatedSite.getId() + "\"}", + "people/{personId}/site-membership-requests/{siteId}", + newMember.getUsername(), moderatedSite.getId()); + requestUpdateModel = restClient.processModel(RestSiteMembershipRequestModel.class, request); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").is(updatedMessage) + .assertThat().field("site").isNotEmpty() + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - missing JSON body") + public void missingJsonFieldBodyUpdateSiteMembershipRequest() throws Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + RestRequest request = RestRequest.requestWithBody(HttpMethod.PUT, "", + "people/{personId}/site-membership-requests/{siteId}", newMember.getUsername(), + moderatedSite.getId()); + requestUpdateModel = restClient.processModel(RestSiteMembershipRequestModel.class, request); + + restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST) + .assertLastError() + .containsSummary(String.format(RestErrorModel.NO_CONTENT, "No content to map to Object due to end of input")) + .containsErrorKey(String.format(RestErrorModel.NO_CONTENT, "No content to map to Object due to end of input")) + .descriptionURLIs(RestErrorModel.RESTAPIEXPLORER) + .stackTraceIs(RestErrorModel.STACKTRACE); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - empty JSON body") + public void emptyJsonFieldBodyUpdateSiteMembershipRequest() throws Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + RestRequest request = RestRequest.requestWithBody(HttpMethod.PUT, "{}", + "people/{personId}/site-membership-requests/{siteId}", newMember.getUsername(), + moderatedSite.getId()); + requestUpdateModel = restClient.processModel(RestSiteMembershipRequestModel.class, request); + + restClient.assertStatusCodeIs(HttpStatus.OK); + requestUpdateModel.assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("message").isNull() + .assertThat().field("site").isNotEmpty() + .assertThat().field("modifiedAt").isNotEmpty() + .assertThat().field("createdAt").isNotEmpty(); + requestUpdateModel.getSite().assertThat().field("visibility").is(moderatedSite.getVisibility()) + .assertThat().field("guid").is(moderatedSite.getGuid()) + .assertThat().field("description").is(moderatedSite.getDescription()) + .assertThat().field("id").is(moderatedSite.getId()) + .assertThat().field("preset").is("site-dashboard") + .assertThat().field("title").is(moderatedSite.getTitle()); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - invalid SiteId") + public void invalidSiteIdUpdateSiteMembershipRequest() throws Exception + { + moderatedSite.setId("invalidSiteId"); + restClient.authenticateUser(managerUser).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format(RestErrorModel.RELATIONSHIP_NOT_FOUND, managerUser.getUsername(), moderatedSite.getId())); + + moderatedSite.setId(moderatedSiteId); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - empty SiteId") + public void emptySiteIdUpdateSiteMembershipRequest() throws Exception + { + moderatedSite.setId(""); + restClient.authenticateUser(managerUser).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.METHOD_NOT_ALLOWED) + .assertLastError() + .containsSummary(RestErrorModel.PUT_EMPTY_ARGUMENT) + .containsErrorKey(RestErrorModel.PUT_EMPTY_ARGUMENT) + .descriptionURLIs(RestErrorModel.RESTAPIEXPLORER) + .stackTraceIs(RestErrorModel.STACKTRACE); + + moderatedSite.setId(moderatedSiteId); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.CORE }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Verify inexistent user is not able to update site membership request") + public void emptyUserCannotUpdateSiteMembershipRequest() throws Exception + { + UserModel emptyUser = new UserModel("", "password"); + restClient.authenticateUser(emptyUser).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.UNAUTHORIZED) + .assertLastError() + .containsSummary(RestErrorModel.AUTHENTICATION_FAILED); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - rejected Request") + public void rejectRequestTheUpdateSiteMembershipRequest() throws Exception + { + UserModel userWithRejectedRequests = dataUser.createRandomTestUser(); + restClient.authenticateUser(userWithRejectedRequests).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + RestTaskModel taskModel = restClient.authenticateUser(userWithRejectedRequests).withWorkflowAPI().getTasks() + .getTaskModelByDescription(moderatedSite); + workflow.approveSiteMembershipRequest(managerUser.getUsername(), managerUser.getPassword(), taskModel.getId(), false, "Rejected"); + + requestUpdateModel = restClient.authenticateUser(userWithRejectedRequests).withCoreAPI().usingMe() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format(RestErrorModel.RELATIONSHIP_NOT_FOUND, userWithRejectedRequests.getUsername(), moderatedSite.getId())) + .containsErrorKey(RestErrorModel.RELATIONSHIP_NOT_FOUND_ERRORKEY) + .descriptionURLIs(RestErrorModel.RESTAPIEXPLORER) + .stackTraceIs(RestErrorModel.STACKTRACE); + } + + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request - approved Request") + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + public void approveRequestTheUpdateSiteMembershipRequest() throws JsonToModelConversionException, DataPreparationException, Exception + { + UserModel userWithApprovedRequests = dataUser.createRandomTestUser(); + restClient.authenticateUser(userWithApprovedRequests).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + RestTaskModel taskModel = restClient.authenticateUser(userWithApprovedRequests).withWorkflowAPI().getTasks().getTaskModelByDescription(moderatedSite); + workflow.approveSiteMembershipRequest(managerUser.getUsername(), managerUser.getPassword(), taskModel.getId(), true, "Approve"); + + requestUpdateModel = restClient.authenticateUser(userWithApprovedRequests).withCoreAPI().usingMe() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format(RestErrorModel.RELATIONSHIP_NOT_FOUND, userWithApprovedRequests.getUsername(), moderatedSite.getId())) + .containsErrorKey(RestErrorModel.RELATIONSHIP_NOT_FOUND_ERRORKEY) + .descriptionURLIs(RestErrorModel.RESTAPIEXPLORER) + .stackTraceIs(RestErrorModel.STACKTRACE); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }, executionType = ExecutionType.REGRESSION, + description = "Update site membership request using invalid network") + public void updateSiteMembershipRequestUsingInvalidNetwork() throws Exception + { + UserModel invalidUserNetwork = dataUser.createRandomTestUser(); + SiteModel site = dataSite.usingUser(invalidUserNetwork).createModeratedRandomSite(); + dataSite.usingUser(invalidUserNetwork).usingSite(site).addSiteToFavorites(); + invalidUserNetwork.setDomain("invalidNetwork"); + + requestUpdateModel = restClient.authenticateUser(invalidUserNetwork).withCoreAPI().usingMe() + .updateSiteMembershipRequest(site, updatedMessage); + restClient.assertStatusCodeIs(HttpStatus.UNAUTHORIZED) + .assertLastError() + .containsSummary(RestErrorModel.AUTHENTICATION_FAILED); + } + + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL}, executionType = ExecutionType.REGRESSION, + description = "Verify user is not able to update an inexitent site membership request") + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.CORE }) + public void userIsNotAbleToUpdateAnInexistentSiteMembershipRequest() throws JsonToModelConversionException, DataPreparationException, Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format(RestErrorModel.RELATIONSHIP_NOT_FOUND, newMember.getUsername(), moderatedSite.getId())); + } + + @Test(groups = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }) + @TestRail(section = { TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.FULL }, executionType = ExecutionType.REGRESSION, + description = "Verify user is not able to update a deleted site membership request") + public void userCantUpdateSiteMembershipRequestForDeletedRequest() throws Exception + { + SiteModel moderatedSite = dataSite.usingUser(managerUser).createModeratedRandomSite(); + UserModel newMember = dataUser.createRandomTestUser(); + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .addSiteMembershipRequest(moderatedSite); + + restClient.authenticateUser(newMember).withCoreAPI().usingAuthUser() + .deleteSiteMembershipRequest(moderatedSite); + restClient.assertStatusCodeIs(HttpStatus.NO_CONTENT); + + requestUpdateModel = restClient.withCoreAPI().usingAuthUser() + .updateSiteMembershipRequest(moderatedSite, updatedMessage); + restClient.assertStatusCodeIs(HttpStatus.NOT_FOUND) + .assertLastError() + .containsSummary(String.format(RestErrorModel.RELATIONSHIP_NOT_FOUND, newMember.getUsername(), moderatedSite.getId())); + } + +}