Java tutorial
/* * #%L * Alfresco Remote API * %% * Copyright (C) 2005 - 2016 Alfresco Software Limited * %% * This file is part of the Alfresco software. * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * #L% */ package org.alfresco.rest.api.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; import org.alfresco.rest.api.tests.RepoService.SiteInformation; import org.alfresco.rest.api.tests.RepoService.TestNetwork; import org.alfresco.rest.api.tests.RepoService.TestPerson; import org.alfresco.rest.api.tests.RepoService.TestSite; import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse; import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; import org.alfresco.rest.api.tests.client.PublicApiClient.Sites; import org.alfresco.rest.api.tests.client.PublicApiException; import org.alfresco.rest.api.tests.client.RequestContext; import org.alfresco.rest.api.tests.client.data.MemberOfSite; import org.alfresco.rest.api.tests.client.data.SiteRole; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.GUID; import org.apache.commons.httpclient.HttpStatus; import org.junit.Before; import org.junit.Test; public class TestPersonSites extends EnterpriseTestApi { private TestNetwork network1; private TestNetwork network2; private TestPerson person11; private TestPerson person12; private TestPerson person21; private List<TestSite> sites = new ArrayList<>(10); /* Sites and users used to test the site sorting */ private TestPerson person31; private TestPerson person32; private TestSite site1; private TestSite site2; private TestSite site3; private String site1_name = "a_" + GUID.generate(); private String site1_title = "c_" + GUID.generate(); private SiteRole site1_role = SiteRole.SiteContributor; private String site2_name = "b_" + GUID.generate(); private String site2_title = "a_" + GUID.generate(); private SiteRole site2_role = SiteRole.SiteManager; private String site3_name = "c_" + GUID.generate(); private String site3_title = "b_" + GUID.generate(); private SiteRole site3_role = SiteRole.SiteConsumer; @Override @Before public void setup() throws Exception { // init networks super.setup(); Iterator<TestNetwork> networksIt = getTestFixture().getNetworksIt(); assertTrue(networksIt.hasNext()); this.network1 = networksIt.next(); assertTrue(networksIt.hasNext()); this.network2 = networksIt.next(); // create a user final List<TestPerson> people = new ArrayList<TestPerson>(1); // Create some 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); 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()); this.person11 = people.get(0); this.person12 = people.get(1); this.person21 = people.get(2); // ...and some sites TenantUtil.runAsUserTenant(new TenantRunAsWork<Void>() { @Override public Void doWork() throws Exception { TestSite site = network1.createSite(SiteVisibility.PUBLIC); site.inviteToSite(person11.getId(), SiteRole.SiteContributor); sites.add(site); site = network1.createSite(SiteVisibility.MODERATED); site.inviteToSite(person11.getId(), SiteRole.SiteContributor); sites.add(site); site = network1.createSite(SiteVisibility.PRIVATE); site.inviteToSite(person11.getId(), SiteRole.SiteConsumer); sites.add(site); site = network1.createSite(SiteVisibility.PUBLIC); site.inviteToSite(person11.getId(), SiteRole.SiteManager); sites.add(site); site = network1.createSite(SiteVisibility.PRIVATE); site.inviteToSite(person11.getId(), SiteRole.SiteCollaborator); sites.add(site); //Special site for person removal site = network1.createSite(SiteVisibility.PRIVATE); site.inviteToSite(person11.getId(), SiteRole.SiteConsumer); sites.add(site); return null; } }, person12.getId(), network1.getId()); } public void initializeSites() throws Exception { /* * Create data for testing the site sorting. We create the sites as * person31 and assign roles to person32. The list requests will be * performed as person32. */ TenantUtil.runAsSystemTenant(new TenantRunAsWork<Void>() { @Override public Void doWork() throws Exception { person31 = network1.createUser(); person32 = network1.createUser(); return null; } }, network1.getId()); this.site1 = TenantUtil.runAsUserTenant(new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { SiteInformation siteInfo = new SiteInformation(site1_name, site1_title, site1_title, SiteVisibility.PRIVATE); TestSite site = network1.createSite(siteInfo); site.inviteToSite(person32.getId(), site1_role); return site; } }, person31.getId(), network1.getId()); this.site2 = TenantUtil.runAsUserTenant(new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { SiteInformation siteInfo = new SiteInformation(site2_name, site2_title, site2_title, SiteVisibility.PRIVATE); TestSite site = network1.createSite(siteInfo); site.inviteToSite(person32.getId(), site2_role); return site; } }, person31.getId(), network1.getId()); this.site3 = TenantUtil.runAsUserTenant(new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { SiteInformation siteInfo = new SiteInformation(site3_name, site3_title, site3_title, SiteVisibility.PRIVATE); TestSite site = network1.createSite(siteInfo); site.inviteToSite(person32.getId(), site3_role); return site; } }, person31.getId(), network1.getId()); } @Test public void testPersonSites() throws Exception { Set<MemberOfSite> personSites = new TreeSet<MemberOfSite>(); //Get last site for use with personRemoveSite TestSite personRemoveSite = sites.get(sites.size() - 1); sites.remove(sites.size() - 1); personSites.addAll(network1.getSiteMemberships(person11.getId())); // Create some sites personSites.addAll(TenantUtil.runAsUserTenant(new TenantRunAsWork<List<MemberOfSite>>() { @Override public List<MemberOfSite> doWork() throws Exception { List<MemberOfSite> expectedSites = new ArrayList<MemberOfSite>(); TestSite site = network1.createSite(SiteVisibility.PRIVATE); expectedSites.add(new MemberOfSite(site, SiteRole.SiteManager)); site = network1.createSite(SiteVisibility.PUBLIC); expectedSites.add(new MemberOfSite(site, SiteRole.SiteManager)); site = network1.createSite(SiteVisibility.MODERATED); expectedSites.add(new MemberOfSite(site, SiteRole.SiteManager)); return expectedSites; } }, person11.getId(), network1.getId())); personSites.addAll(TenantUtil.runAsUserTenant(new TenantRunAsWork<List<MemberOfSite>>() { @Override public List<MemberOfSite> doWork() throws Exception { List<MemberOfSite> expectedSites = new ArrayList<MemberOfSite>(); TestSite site = network1.createSite(SiteVisibility.PRIVATE); site.inviteToSite(person11.getId(), SiteRole.SiteConsumer); expectedSites.add(new MemberOfSite(site, SiteRole.SiteConsumer)); site = network1.createSite(SiteVisibility.PUBLIC); site.inviteToSite(person11.getId(), SiteRole.SiteConsumer); expectedSites.add(new MemberOfSite(site, SiteRole.SiteConsumer)); site = network1.createSite(SiteVisibility.MODERATED); site.inviteToSite(person11.getId(), SiteRole.SiteConsumer); expectedSites.add(new MemberOfSite(site, SiteRole.SiteConsumer)); return expectedSites; } }, person12.getId(), network1.getId())); final List<MemberOfSite> expectedSites = new ArrayList<MemberOfSite>(personSites); Sites sitesProxy = publicApiClient.sites(); // Test Case cloud-1487 // unknown user try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.getPersonSites(GUID.generate(), null); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // Test Case cloud-2200 // Test Case cloud-2213 // user should be able to list their sites { int skipCount = 0; int maxItems = 2; Paging paging = getPaging(skipCount, maxItems, expectedSites.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); ListResponse<MemberOfSite> resp = sitesProxy.getPersonSites(person11.getId(), createParams(paging, null)); checkList(expectedSites.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), resp); } { int skipCount = 2; int maxItems = 8; Paging paging = getPaging(skipCount, maxItems, expectedSites.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); ListResponse<MemberOfSite> resp = sitesProxy.getPersonSites(person11.getId(), createParams(paging, null)); checkList(expectedSites.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), resp); } // "-me-" user { int skipCount = 0; int maxItems = 2; Paging paging = getPaging(skipCount, maxItems, expectedSites.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); ListResponse<MemberOfSite> resp = sitesProxy.getPersonSites(org.alfresco.rest.api.People.DEFAULT_USER, createParams(paging, null)); checkList(expectedSites.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), resp); } // a user in another tenant should not be able to list a user's sites try { int skipCount = 0; int maxItems = 2; Paging paging = getPaging(skipCount, maxItems, expectedSites.size(), null); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person21.getId())); sitesProxy.getPersonSites(person11.getId(), createParams(paging, null)); fail(""); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_UNAUTHORIZED, e.getHttpResponse().getStatusCode()); } // Test case cloud-1488 { MemberOfSite memberOfSite = expectedSites.get(0); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); MemberOfSite ret = sitesProxy.getPersonSite(person11.getId(), memberOfSite.getSiteId()); memberOfSite.expected(ret); } try { MemberOfSite memberOfSite = expectedSites.get(0); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.getPersonSite(GUID.generate(), memberOfSite.getSiteId()); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.getPersonSite(person11.getId(), GUID.generate()); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } // Test Case cloud-1487 // unknown person id try { MemberOfSite memberOfSite = expectedSites.get(0); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.getPersonSite(GUID.generate(), memberOfSite.getSiteId()); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.getPersonSite(person11.getId(), GUID.generate()); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } { //Tests removing a person from the site publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.remove("people", person11.getId(), "sites", personRemoveSite.getSiteId(), "Unable to DELETE a person site"); try { sitesProxy.getPersonSite(person11.getId(), personRemoveSite.getSiteId()); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); } } // TODO // person from external network listing user sites // Test Case cloud-1966 // Not allowed methods try { MemberOfSite memberOfSite = expectedSites.get(0); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.create("people", person11.getId(), "sites", memberOfSite.getSiteId(), null, "Unable to POST to a person site"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.create("people", person11.getId(), "sites", null, null, "Unable to POST to person sites"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { MemberOfSite memberOfSite = expectedSites.get(0); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.update("people", person11.getId(), "sites", memberOfSite.getSiteId(), null, "Unable to PUT a person site"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.update("people", person11.getId(), "sites", null, null, "Unable to PUT person sites"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } try { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId())); sitesProxy.remove("people", person11.getId(), "sites", null, "Unable to DELETE person sites"); fail(); } catch (PublicApiException e) { assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } } /** * Retrieves the site memberships associated to a user * * @param sortColumn * @param asc * @return * @throws Exception */ private ListResponse<MemberOfSite> getSiteMembershipsForPerson32(final Paging paging, String sortColumn, boolean asc) throws Exception { final Sites sitesProxy = publicApiClient.sites(); publicApiClient.setRequestContext(new RequestContext(network1.getId(), person32.getId())); // sort params final Map<String, String> params = new HashMap<String, String>(); if (sortColumn != null) { params.put("orderBy", sortColumn + " " + (asc ? "ASC" : "DESC")); } // get memberships ListResponse<MemberOfSite> resp = TenantUtil .runAsUserTenant(new TenantRunAsWork<ListResponse<MemberOfSite>>() { @Override public ListResponse<MemberOfSite> doWork() throws Exception { ListResponse<MemberOfSite> resp = sitesProxy.getPersonSites(person32.getId(), createParams(paging, params)); return resp; } }, person32.getId(), network1.getId()); return resp; } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Title ASC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingByTitleAsc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "SiteTitle", true); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site3, site3_role)); expectedList.add(new MemberOfSite(site1, site1_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Title DESC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingByTitleDesc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "SiteTitle", false); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site3, site3_role)); expectedList.add(new MemberOfSite(site2, site2_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Role ASC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingByRoleAsc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "Role", true); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site1, site1_role)); expectedList.add(new MemberOfSite(site2, site2_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Role DESC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingByRoleDesc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "Role", false); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site1, site1_role)); expectedList.add(new MemberOfSite(site3, site3_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Site Name ASC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingBySiteNameAsc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "SiteShortName", true); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site2, site2_role)); expectedList.add(new MemberOfSite(site3, site3_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * to a user order = Site Name DESC skip = 1, count = 2 * * @throws Exception */ public void testSortingAndPagingBySiteNameDesc() throws Exception { // paging int skipCount = 1; int maxItems = 2; int totalResults = 3; Paging paging = getPaging(skipCount, maxItems, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(paging, "SiteShortName", false); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site2, site2_role)); expectedList.add(new MemberOfSite(site1, site1_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } /** * Tests the capability to sort and paginate the site memberships associated * default sorting, all results * * @throws Exception */ public void testSortingAndPagingDefault() throws Exception { // paging int totalResults = 3; Paging paging = getPaging(null, null, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(null, null, false); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site2, site2_role)); expectedList.add(new MemberOfSite(site3, site3_role)); expectedList.add(new MemberOfSite(site1, site1_role)); checkList(expectedList, paging.getExpectedPaging(), resp); } @Test public void testSortingAndPaging() throws Exception { initializeSites(); testSortingAndPagingByTitleAsc(); testSortingAndPagingByTitleDesc(); testSortingAndPagingByRoleAsc(); testSortingAndPagingByRoleDesc(); testSortingAndPagingBySiteNameAsc(); testSortingAndPagingBySiteNameDesc(); testSortingAndPagingDefault(); } // ACE-4823 @Test public void testSitesWithSameTitles() throws Exception { // Creates 3 sites initializeSites(); final String site4_name = "d_" + GUID.generate(); final String site4_title = site3_title; // Same title as site3 final SiteRole site4_role = SiteRole.SiteCollaborator; TestSite site4 = TenantUtil.runAsUserTenant(new TenantRunAsWork<TestSite>() { @Override public TestSite doWork() throws Exception { SiteInformation siteInfo = new SiteInformation(site4_name, site4_title, site4_title, SiteVisibility.PRIVATE); TestSite site = network1.createSite(siteInfo); site.inviteToSite(person32.getId(), site4_role); return site; } }, person31.getId(), network1.getId()); assertNotNull(site4); // paging int totalResults = 4; Paging paging = getPaging(null, null, totalResults, null); // get memberships ListResponse<MemberOfSite> resp = getSiteMembershipsForPerson32(null, null, false); // check results List<MemberOfSite> expectedList = new LinkedList<>(); expectedList.add(new MemberOfSite(site2, site2_role)); expectedList.add(new MemberOfSite(site3, site3_role)); expectedList.add(new MemberOfSite(site4, site4_role)); expectedList.add(new MemberOfSite(site1, site1_role)); try { checkList(expectedList, paging.getExpectedPaging(), resp); } catch (AssertionError error) { // Site3 and Site4 have a same title, and as we are sorting on titles (default sorting), // we can't guarantee the order in which the sites will // return, hence swap the sites and compare again. Collections.swap(expectedList, 1, 2); checkList(expectedList, paging.getExpectedPaging(), resp); } } }