@Before public void before() throws Exception { int port = getTestFixture().getJettyComponent().getPort(); TestNetwork network = getTestFixture().getRandomNetwork(); Map<String, String> cmisParameters = new HashMap<String, String>(); cmisParameters.put(TestParameters.DEFAULT_RELATIONSHIP_TYPE, "R:cm:replaces"); cmisParameters.put(TestParameters.DEFAULT_SECONDARY_TYPE, "P:cm:author"); cmisParameters.put(TestParameters.DEFAULT_ITEM_TYPE, "I:cm:cmobject"); clientContext = new OpenCMISClientContext( BindingType.ATOMPUB, MessageFormat.format( CMIS_URL, "localhost", String.valueOf(port), "alfresco", network.getId(), "public"), "admin@" + network.getId(), "admin", cmisParameters); }
// TODO set create member for a user who is a member of the site (not the creator) @Test public void testSiteMembers() throws Exception { Iterator<TestNetwork> networksIt = getTestFixture().getNetworksIt(); final TestNetwork testNetwork = networksIt.next(); final List<String> networkPeople = testNetwork.getPersonIds(); String personId = networkPeople.get(0); Sites sitesProxy = publicApiClient.sites(); { final List<SiteMember> expectedSiteMembers = new ArrayList<SiteMember>(); // Create a private site and invite some users // TODO create site members using public api rather than directly using the services TestSite testSite = TenantUtil.runAsUserTenant( new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { TestSite testSite = testNetwork.createSite(SiteVisibility.PRIVATE); for (int i = 1; i <= 5; i++) { String inviteeId = networkPeople.get(i); testSite.inviteToSite(inviteeId, SiteRole.SiteConsumer); SiteMember sm = new SiteMember( inviteeId, repoService.getPerson(inviteeId), testSite.getSiteId(), SiteRole.SiteConsumer.toString()); expectedSiteMembers.add(sm); } return testSite; } }, personId, testNetwork.getId()); { SiteMember sm = new SiteMember( personId, repoService.getPerson(personId), testSite.getSiteId(), SiteRole.SiteManager.toString()); expectedSiteMembers.add(sm); Collections.sort(expectedSiteMembers); } // Test Case cloud-1482 { int skipCount = 0; int maxItems = 2; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null)); checkList( expectedSiteMembers.subList( skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers); } { int skipCount = 2; int maxItems = 10; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null)); checkList( expectedSiteMembers.subList( skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers); } // invalid site id try { int skipCount = 2; int maxItems = 10; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); sitesProxy.getSiteMembers(GUID.generate(), createParams(paging, null)); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // invalid methods try { SiteMember siteMember = expectedSiteMembers.get(0); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); sitesProxy.update( "sites", testSite.getSiteId(), "members", null, siteMember.toJSON().toString(), "Unable to PUT site members"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } // Test Case cloud-1965 try { SiteMember siteMember1 = expectedSiteMembers.get(0); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); sitesProxy.create( "sites", testSite.getSiteId(), "members", siteMember1.getMemberId(), siteMember1.toJSON().toString(), "Unable to POST to a site member"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { SiteMember siteMember1 = expectedSiteMembers.get(0); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); sitesProxy.update( "sites", testSite.getSiteId(), "members", null, siteMember1.toJSON().toString(), "Unable to PUT site members"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); sitesProxy.remove( "sites", testSite.getSiteId(), "members", null, "Unable to DELETE site members"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } // update site member { SiteMember siteMember1 = expectedSiteMembers.get(0); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); SiteMember ret = sitesProxy.updateSiteMember(testSite.getSiteId(), siteMember1); assertEquals(siteMember1.getRole(), ret.getRole()); Person expectedSiteMember = repoService.getPerson(siteMember1.getMemberId()); expectedSiteMember.expected(ret.getMember()); } // GET single site member { SiteMember siteMember1 = expectedSiteMembers.get(0); publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId)); SiteMember ret = sitesProxy.getSingleSiteMember(testSite.getSiteId(), siteMember1.getMemberId()); siteMember1.expected(ret); } } // test: user is member of different tenant, but has site membership(s) in common with the http // request user { Iterator<TestNetwork> accountsIt = getTestFixture().getNetworksIt(); assertTrue(accountsIt.hasNext()); final TestNetwork network1 = accountsIt.next(); assertTrue(accountsIt.hasNext()); final TestNetwork network2 = accountsIt.next(); final List<TestPerson> people = new ArrayList<TestPerson>(); // Create users TenantUtil.runAsSystemTenant( new TenantRunAsWork<Void>() { @Override public Void doWork() throws Exception { TestPerson person = network1.createUser(); people.add(person); person = network1.createUser(); people.add(person); person = network1.createUser(); people.add(person); return null; } }, network1.getId()); TenantUtil.runAsSystemTenant( new TenantRunAsWork<Void>() { @Override public Void doWork() throws Exception { TestPerson person = network2.createUser(); people.add(person); return null; } }, network2.getId()); final TestPerson person1 = people.get(0); final TestPerson person2 = people.get(1); final TestPerson person3 = people.get(2); final TestPerson person4 = people.get(3); // Create site final TestSite site = TenantUtil.runAsUserTenant( new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { TestSite site = network1.createSite(SiteVisibility.PUBLIC); return site; } }, person2.getId(), network1.getId()); // invalid role - 400 try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.createSiteMember(site.getSiteId(), new SiteMember(person1.getId(), "dodgyRole")); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode()); } // user in network but not site member, try to create site member try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person3.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_FORBIDDEN, e.getHttpResponse().getStatusCode()); } // unknown invitee - 404 try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember("dodgyUser", SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // unknown site - 404 try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.createSiteMember( "dodgySite", new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // inviter is not a member of the site try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(e.getMessage(), HttpStatus.SC_FORBIDDEN, e.getHttpResponse().getStatusCode()); } // inviter is not a member of the site nor a member of the tenant try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person4.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals( HttpStatus.SC_UNAUTHORIZED, e.getHttpResponse() .getStatusCode()); // TODO check that 404 is correct here - external user of network // can't see public site?? } { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); SiteMember sm = new SiteMember(person1.getId(), SiteRole.SiteConsumer.toString()); SiteMember siteMember = sitesProxy.createSiteMember(site.getSiteId(), sm); assertEquals(person1.getId(), siteMember.getMemberId()); assertEquals(SiteRole.SiteConsumer.toString(), siteMember.getRole()); } // already invited try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_CONFLICT, e.getHttpResponse().getStatusCode()); } // inviter is consumer member of the site, should not be able to add site member try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person4.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(e.getMessage(), HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // invitee from another network try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1.getId())); sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person4.getId(), SiteRole.SiteContributor.toString())); fail(""); } catch (PublicApiException e) { assertEquals(e.getMessage(), HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // check site membership in GET List<SiteMember> expectedSiteMembers = site.getMembers(); { int skipCount = 0; int maxItems = Integer.MAX_VALUE; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null)); checkList( expectedSiteMembers.subList( skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers); } } // test: create site membership, remove it, get list of site memberships { Iterator<TestNetwork> accountsIt = getTestFixture().getNetworksIt(); assertTrue(accountsIt.hasNext()); final TestNetwork network1 = accountsIt.next(); assertTrue(accountsIt.hasNext()); final List<TestPerson> people = new ArrayList<TestPerson>(); // Create user TenantUtil.runAsSystemTenant( new TenantRunAsWork<Void>() { @Override public Void doWork() throws Exception { TestPerson person = network1.createUser(); people.add(person); person = network1.createUser(); people.add(person); return null; } }, network1.getId()); TestPerson person1 = people.get(0); TestPerson person2 = people.get(1); // Create site TestSite site = TenantUtil.runAsUserTenant( new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { TestSite site = network1.createSite(SiteVisibility.PRIVATE); return site; } }, person2.getId(), network1.getId()); // remove site membership // for -me- user (PUBLICAPI-90) { // create a site member publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); SiteMember siteMember = sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); assertEquals(person1.getId(), siteMember.getMemberId()); assertEquals(SiteRole.SiteContributor.toString(), siteMember.getRole()); SiteMember toRemove = new SiteMember("-me-"); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1.getId())); sitesProxy.removeSiteMember(site.getSiteId(), toRemove); } { // create a site member publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); SiteMember siteMember = sitesProxy.createSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); assertEquals(person1.getId(), siteMember.getMemberId()); assertEquals(SiteRole.SiteContributor.toString(), siteMember.getRole()); // unknown site try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.removeSiteMember(GUID.generate(), siteMember); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // unknown user try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.removeSiteMember(site.getSiteId(), new SiteMember(GUID.generate())); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.removeSiteMember(site.getSiteId(), siteMember); } // check site membership in GET List<SiteMember> expectedSiteMembers = site.getMembers(); assertFalse(expectedSiteMembers.contains(siteMember)); { int skipCount = 0; int maxItems = Integer.MAX_VALUE; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null)); checkList( expectedSiteMembers.subList( skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers); } // update site membership // unknown site try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.updateSiteMember(GUID.generate(), siteMember); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // unknown user try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.updateSiteMember(site.getSiteId(), new SiteMember(GUID.generate())); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // invalid role try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.updateSiteMember( site.getSiteId(), new SiteMember(person1.getId(), "invalidRole")); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode()); } // user is not a member of the site - 400 try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); sitesProxy.updateSiteMember( site.getSiteId(), new SiteMember(person1.getId(), SiteRole.SiteContributor.toString())); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode()); } // successful update { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); SiteMember sm = new SiteMember(person1.getId(), SiteRole.SiteContributor.toString()); SiteMember ret = sitesProxy.createSiteMember(site.getSiteId(), sm); assertEquals(SiteRole.SiteContributor.toString(), ret.getRole()); person1.expected(ret.getMember()); sm = new SiteMember(person1.getId(), SiteRole.SiteCollaborator.toString()); ret = sitesProxy.updateSiteMember(site.getSiteId(), sm); assertEquals(SiteRole.SiteCollaborator.toString(), ret.getRole()); person1.expected(ret.getMember()); // check site membership in GET expectedSiteMembers = site.getMembers(); SiteMember toCheck = null; for (SiteMember sm1 : expectedSiteMembers) { if (sm1.getMemberId().equals(person1.getId())) { toCheck = sm1; } } assertNotNull(toCheck); // check that the update site membership is present assertEquals(sm.getRole(), toCheck.getRole()); // check that the role is correct int skipCount = 0; int maxItems = Integer.MAX_VALUE; Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId())); ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null)); checkList( expectedSiteMembers.subList( skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers); } } } }