From 7ecf37ec9ee5045beea899030d6e1cefc6ee9102 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 1 Jul 2019 11:17:22 +0200
Subject: [PATCH] OO-3297: add a more complex unit test to check moving an
 organisation

---
 .../restapi/OrganisationsWebServiceTest.java  | 88 +++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/src/test/java/org/olat/restapi/OrganisationsWebServiceTest.java b/src/test/java/org/olat/restapi/OrganisationsWebServiceTest.java
index 4b460164341..67e1815a16d 100644
--- a/src/test/java/org/olat/restapi/OrganisationsWebServiceTest.java
+++ b/src/test/java/org/olat/restapi/OrganisationsWebServiceTest.java
@@ -40,10 +40,13 @@ import org.apache.http.util.EntityUtils;
 import org.hamcrest.Matchers;
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.GroupMembership;
+import org.olat.basesecurity.GroupMembershipInheritance;
 import org.olat.basesecurity.OrganisationManagedFlag;
 import org.olat.basesecurity.OrganisationRoles;
 import org.olat.basesecurity.OrganisationService;
 import org.olat.basesecurity.OrganisationType;
+import org.olat.basesecurity.manager.GroupDAO;
 import org.olat.basesecurity.model.OrganisationRefImpl;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
@@ -76,6 +79,8 @@ public class OrganisationsWebServiceTest extends OlatJerseyTestCase {
 	@Autowired
 	private DB dbInstance;
 	@Autowired
+	private GroupDAO groupDao;
+	@Autowired
 	private RepositoryService repositoryService;
 	@Autowired
 	private OrganisationService organisationService;
@@ -321,6 +326,89 @@ public class OrganisationsWebServiceTest extends OlatJerseyTestCase {
 		Assert.assertEquals(parentOrganisation, savedOrganisation.getRoot());
 	}
 	
+	@Test
+	public void updateAndMoveOrganisation_members()
+	throws IOException, URISyntaxException {
+		RestConnection conn = new RestConnection();
+		assertTrue(conn.login("administrator", "openolat"));
+		
+		Organisation parentOrganisation = organisationService.createOrganisation("REST Parent Organisation 4", "REST-p-4-organisation", "", null, null);
+		OrganisationType type = organisationService.createOrganisationType("REST Type", "rest-type", "A type for REST");
+		Organisation organisation1 = organisationService.createOrganisation("REST Organisation 1", "REST-p-5-organisation", "", parentOrganisation, type);
+		Organisation organisation2 = organisationService.createOrganisation("REST Organisation 2", "REST-p-6-organisation", "", parentOrganisation, type);
+		dbInstance.commitAndCloseSession();
+
+		Identity userManagerOrg1 = JunitTestHelper.createAndPersistIdentityAsRndUser("user-mgr-1");
+		Identity userManagerOrg2 = JunitTestHelper.createAndPersistIdentityAsRndUser("user-mgr-2");
+		Identity user1 = JunitTestHelper.createAndPersistIdentityAsRndUser("user-1");
+		Identity user2 = JunitTestHelper.createAndPersistIdentityAsRndUser("user2");
+		organisationService.addMember(organisation1, userManagerOrg1, OrganisationRoles.usermanager);
+		organisationService.addMember(organisation2, userManagerOrg2, OrganisationRoles.usermanager);
+		organisationService.addMember(organisation1, user1, OrganisationRoles.user);
+		organisationService.addMember(organisation2, user2, OrganisationRoles.user);
+		dbInstance.commitAndCloseSession();
+		
+		OrganisationVO organisationVo2 = OrganisationVO.valueOf(organisation2);
+		organisationVo2.setParentOrganisationKey(organisation1.getKey());
+
+		URI request = UriBuilder.fromUri(getContextURI()).path("organisations").build();
+		HttpPut method = conn.createPut(request, MediaType.APPLICATION_JSON, true);
+		conn.addJsonEntity(method, organisationVo2);
+		
+		HttpResponse response = conn.execute(method);
+		Assert.assertThat(response.getStatusLine().getStatusCode(), Matchers.either(Matchers.is(200)).or(Matchers.is(201)));
+		
+		// checked VO
+		OrganisationVO savedVo = conn.parse(response, OrganisationVO.class);
+		Assert.assertNotNull(savedVo);
+		Assert.assertNotNull(savedVo.getKey());
+		Assert.assertEquals(organisation2.getKey(), savedVo.getKey());
+		Assert.assertEquals(organisation1.getKey(), savedVo.getParentOrganisationKey());
+		Assert.assertEquals(parentOrganisation.getKey(), savedVo.getRootOrganisationKey());
+		
+		// checked database
+		Organisation savedOrganisation = organisationService.getOrganisation(new OrganisationRefImpl(savedVo.getKey()));
+		Assert.assertNotNull(savedOrganisation);
+		Assert.assertEquals(savedVo.getKey(), savedOrganisation.getKey());
+		Assert.assertEquals(organisation1, savedOrganisation.getParent());
+		Assert.assertEquals(parentOrganisation, savedOrganisation.getRoot());
+		
+		// check memberships
+		
+		// user manager of organization 1
+		GroupMembership userManagerOrg1Membership = groupDao.getMembership(organisation1.getGroup(), userManagerOrg1, OrganisationRoles.usermanager.name());
+		Assert.assertNotNull(userManagerOrg1Membership);
+		Assert.assertEquals(GroupMembershipInheritance.root, userManagerOrg1Membership.getInheritanceMode());
+		
+		GroupMembership userManagerOrg12Membership = groupDao.getMembership(organisation2.getGroup(), userManagerOrg1, OrganisationRoles.usermanager.name());
+		Assert.assertNotNull(userManagerOrg12Membership);
+		Assert.assertEquals(GroupMembershipInheritance.inherited, userManagerOrg12Membership.getInheritanceMode());
+		
+		// user manager of organization 2
+		GroupMembership userManagerOrg2Membership = groupDao.getMembership(organisation1.getGroup(), userManagerOrg2, OrganisationRoles.usermanager.name());
+		Assert.assertNull(userManagerOrg2Membership);
+		
+		GroupMembership userManagerOrg22Membership = groupDao.getMembership(organisation2.getGroup(), userManagerOrg2, OrganisationRoles.usermanager.name());
+		Assert.assertNotNull(userManagerOrg22Membership);
+		Assert.assertEquals(GroupMembershipInheritance.root, userManagerOrg22Membership.getInheritanceMode());
+		
+		// user 1
+		GroupMembership user1Membership = groupDao.getMembership(organisation1.getGroup(), user1, OrganisationRoles.user.name());
+		Assert.assertNotNull(user1Membership);
+		Assert.assertEquals(GroupMembershipInheritance.none, user1Membership.getInheritanceMode());
+		
+		GroupMembership user12Membership = groupDao.getMembership(organisation2.getGroup(), user1, OrganisationRoles.user.name());
+		Assert.assertNull(user12Membership);
+		
+		// user 2
+		GroupMembership user2Membership = groupDao.getMembership(organisation1.getGroup(), user2, OrganisationRoles.user.name());
+		Assert.assertNull(user2Membership);
+		
+		GroupMembership user22Membership = groupDao.getMembership(organisation2.getGroup(), user2, OrganisationRoles.user.name());
+		Assert.assertNotNull(user22Membership);
+		Assert.assertEquals(GroupMembershipInheritance.none, user22Membership.getInheritanceMode());
+	}
+	
 	@Test
 	public void updateAndMoveRootOrganisation()
 	throws IOException, URISyntaxException {
-- 
GitLab