/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This 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 2.1 of
* the License, or (at your option) any later version.
*
* This software 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 this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.api;
import static org.gatein.api.Assert.assertEquals;
import static org.gatein.api.Assert.assertFalse;
import static org.gatein.api.Assert.assertNotNull;
import static org.gatein.api.Assert.assertNull;
import static org.gatein.api.Assert.assertTrue;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.exoplatform.container.component.RequestLifeCycle;
import org.gatein.api.common.Attributes;
import org.gatein.api.common.Filter;
import org.gatein.api.common.Pagination;
import org.gatein.api.page.Page;
import org.gatein.api.page.PageId;
import org.gatein.api.page.PageQuery;
import org.gatein.api.security.Group;
import org.gatein.api.security.Membership;
import org.gatein.api.security.Permission;
import org.gatein.api.security.User;
import org.gatein.api.site.Site;
import org.gatein.api.site.SiteId;
import org.gatein.api.site.SiteQuery;
import org.gatein.api.site.SiteType;
import org.junit.Test;
/**
* @author <a href="mailto:boleslaw.dawidowicz@redhat.com">Boleslaw Dawidowicz</a>
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class PortalImplTest extends AbstractApiTest {
@Test
public void createPage() {
createSite(new SiteId("create-page"));
Page page = portal.createPage(new PageId("create-page", "baz"));
assertNotNull(page);
assertNull(portal.getPage(new PageId("create-page", "baz")));
}
@Test(expected = ApiException.class)
public void createPage_Faulty() {
createSite(new SiteId("create-page-exists"), "bar");
runWithFault(new Runnable() {
@Override
public void run() {
portal.createPage(new PageId("create-page-exists", "bar"));
}
});
}
@Test(expected = IllegalArgumentException.class)
public void createPage_NullPageId() {
portal.createPage(null);
}
@Test(expected = EntityAlreadyExistsException.class)
public void createPage_PageExists() {
createSite(new SiteId("create-page-exists"), "bar");
portal.createPage(new PageId("create-page-exists", "bar"));
}
@Test(expected = EntityNotFoundException.class)
public void createPage_NoSite() {
portal.createPage(new PageId("no-site", "baz"));
}
@Test
public void createSite() {
portal.createSite(new SiteId("newsite"), "basic");
assertNull(portal.getSite(new SiteId("newsite")));
}
@Test(expected = ApiException.class)
public void createSite_Faulty() {
runWithFault(new Runnable() {
@Override
public void run() {
portal.createSite(new SiteId("newsite"), "basic");
}
});
}
@Test(expected = IllegalArgumentException.class)
public void createSite_NullSiteId() {
portal.createSite(null, "basic");
}
@Test(expected = IllegalArgumentException.class)
public void createSite_NullTemplateName() {
portal.createSite(new SiteId("newsite"), null);
}
@Test(expected = EntityAlreadyExistsException.class)
public void createSite_SiteExists() {
saveSite();
portal.createSite(new SiteId("newsite"), "basic");
}
@Test
public void findPages() {
createSite(new SiteId("find-pages"), "page3", "page1", "page5", "page2", "page4");
List<Page> pages = portal.findPages(new PageQuery.Builder().withSiteId(new SiteId("find-pages")).build());
assertNotNull(pages);
assertEquals(5, pages.size());
}
@Test
public void findPages_Filter() {
createSite(new SiteId("find-pages"), "page3", "page1", "page5", "page2", "page4");
Filter<Page> filter = new Filter<Page>() {
public boolean accept(Page element) {
return element.getName().equals("page1") || element.getName().equals("page4");
}
};
List<Page> pages = portal.findPages(new PageQuery.Builder().withSiteId(new SiteId("find-pages")).withFilter(filter)
.build());
assertNotNull(pages);
assertEquals(2, pages.size());
}
@Test
public void findPages_BySiteName() {
createSite(new SiteId("find-pages"), "page1", "page2");
createSite(new SiteId(new Group("find-pages")), "page3");
createSite(new SiteId(new User("find-pages")), "page4", "page5", "page6");
PageQuery query = new PageQuery.Builder().withSiteName("find-pages").build();
List<Page> pages = portal.findPages(query);
assertEquals(6, pages.size());
}
@Test
public void findPages_BySiteType() {
createSite(new SiteId("find-pages"), "page1", "page2");
createSite(new SiteId(new Group("find-pages")), "page3");
createSite(new SiteId(new User("find-pages")), "page4", "page5", "page6");
PageQuery query = new PageQuery.Builder().withSiteType(SiteType.SITE).build();
List<Page> pages = portal.findPages(query);
assertEquals(2, pages.size());
query = new PageQuery.Builder().withSiteType(SiteType.SPACE).build();
pages = portal.findPages(query);
assertEquals(1, pages.size());
query = new PageQuery.Builder().withSiteType(SiteType.DASHBOARD).build();
pages = portal.findPages(query);
assertEquals(3, pages.size());
}
@Test
public void findPages_BySiteType_And_SiteName() {
createSite(new SiteId("find-pages"), "page1", "page2");
createSite(new SiteId(new Group("find-pages")), "find-pages", "page3");
createSite(new SiteId(new User("find-pages")), "page4", "page5", "page6");
PageQuery query = new PageQuery.Builder().withSiteType(SiteType.DASHBOARD).withSiteName("find-pages").build();
List<Page> pages = portal.findPages(query);
assertEquals(3, pages.size());
}
@Test
public void findPages_ByTitle() {
createSite(new SiteId("find-pages"), "page3", "page1", "page5", "page2", "page4");
Page page = portal.getPage(new PageId("find-pages", "page1"));
page.setDisplayName("FooTitle");
portal.savePage(page);
page = portal.getPage(new PageId("find-pages", "page4"));
page.setDisplayName("FooTitle");
portal.savePage(page);
List<Page> pages = portal.findPages(new PageQuery.Builder().withSiteId(new SiteId("find-pages"))
.withDisplayName("FooTitle").build());
assertEquals(2, pages.size());
for (Page p : pages) {
assertEquals("FooTitle", p.getDisplayName());
}
}
@Test
public void findPages_Pagination() {
createSite(new SiteId("find-pages"), "page1", "page2", "page3", "page4", "page5", "page6", "page7");
PageQuery query = new PageQuery.Builder().withSiteId(new SiteId("find-pages")).withPagination(0, 5).build();
List<Page> pages = portal.findPages(query);
assertEquals(5, pages.size());
pages = portal.findPages(query.nextPage());
assertEquals(2, pages.size());
}
@Test
public void findSites() {
createSite(defaultSiteId);
List<Site> sites = portal.findSites(new SiteQuery.Builder().withAllSiteTypes().build());
assertNotNull(sites);
assertEquals(1, sites.size());
assertEquals("classic", sites.get(0).getId().getName());
}
@Test
public void findSites_Ascending() {
createSite(new SiteId("z"));
createSite(new SiteId("a"));
createSite(new SiteId("f"));
createSite(new SiteId("b"));
List<Site> sites = portal.findSites(new SiteQuery.Builder().includeEmptySites(true).ascending().build());
assertEquals(4, sites.size());
assertEquals("a", sites.get(0).getId().getName());
assertEquals("b", sites.get(1).getId().getName());
assertEquals("f", sites.get(2).getId().getName());
assertEquals("z", sites.get(3).getId().getName());
}
@Test(expected = ApiException.class)
public void findSites_Faulty() {
createSite(defaultSiteId);
runWithFault(new Runnable() {
@Override
public void run() {
portal.findSites(new SiteQuery.Builder().withAllSiteTypes().build());
}
});
}
@Test
public void findSites_Filtered() {
createSite(new SiteId("c"));
createSite(new SiteId("a"));
createSite(new SiteId("d"));
createSite(new SiteId("b"));
List<Site> sites = portal.findSites(new SiteQuery.Builder().includeEmptySites(true).withFilter(new Filter<Site>() {
@Override
public boolean accept(Site site) {
return site.getName().equals("a") || site.getName().equals("b");
}
}).build());
Iterator<Site> iter = sites.iterator();
assertEquals(2, sites.size());
Site site = iter.next();
assertEquals("a", site.getId().getName());
site = iter.next();
assertEquals("b", site.getId().getName());
}
@Test
public void findSites_NaturalOrdering() {
createSite(new SiteId("z"));
createSite(new SiteId("a"));
createSite(new SiteId("f"));
createSite(new SiteId("b"));
List<Site> sites = portal.findSites(new SiteQuery.Builder().includeEmptySites(true).build());
assertEquals(4, sites.size());
assertEquals("z", sites.get(0).getId().getName());
assertEquals("a", sites.get(1).getId().getName());
assertEquals("f", sites.get(2).getId().getName());
assertEquals("b", sites.get(3).getId().getName());
}
@Test
public void findSites_NonHidden() {
createSite(new SiteId("test-site"), false);
List<Site> sites = portal.findSites(new SiteQuery.Builder().withSiteTypes(SiteType.SITE).build());
assertTrue(sites.isEmpty());
}
@Test
public void findSites_NonHidden_Paged() {
for (int i=0; i<17; i++) {
createSite(new SiteId("site-" + i), i % 2 == 0);
}
List<Site> sites = portal.findSites(new SiteQuery.Builder().withSiteTypes(SiteType.SITE).withPagination(0, 10).build());
assertEquals(9, sites.size());
for (int i=0; i<9; i++) {
assertEquals("site-" + (i * 2), sites.get(i).getName());
}
}
@Test
public void findSites_NoResults() {
List<Site> sites = portal.findSites(new SiteQuery.Builder().withAllSiteTypes().build());
assertNotNull(sites);
assertEquals(0, sites.size());
}
@Test(expected = IllegalArgumentException.class)
public void findSites_NullQuery() {
portal.findSites(null);
}
@Test
public void findSites_Paged() {
for (int i = 0; i < 10; i++) {
createSite(new SiteId("site" + (i + 1)));
}
SiteQuery query = new SiteQuery.Builder().includeEmptySites(true).withPagination(0, 5).build();
List<Site> sites = portal.findSites(query);
assertEquals(5, sites.size());
// check bounds
assertEquals("site1", sites.get(0).getName());
assertEquals("site5", sites.get(4).getName());
query = query.nextPage();
sites = portal.findSites(query);
assertEquals(5, sites.size());
// check bounds
assertEquals("site6", sites.get(0).getName());
assertEquals("site10", sites.get(4).getName());
query = query.nextPage();
sites = portal.findSites(query);
assertEquals(0, sites.size());
query = query.previousPage();
sites = portal.findSites(query);
assertEquals(5, sites.size());
query = new SiteQuery.Builder().from(query).withPagination(2, 5).withNextPage().build();
sites = portal.findSites(query);
assertEquals(3, sites.size());
assertEquals("site8", sites.get(0).getName());
assertEquals("site10", sites.get(2).getName());
}
@Test
public void findSites_PagedWithMultipleSiteTypes() {
// Add more sites and check
createSite(new SiteId("site1"));
createSite(new SiteId("site2"));
createSite(new SiteId("site3"));
createSite(new SiteId("site4"));
createSite(new SiteId(new Group("/platform/users")));
createSite(new SiteId(new Group("/foo/bar")));
createSite(new SiteId(new Group("blah")));
createSite(new SiteId(new User("root")));
createSite(new SiteId(new User("john")));
createSite(new SiteId(new User("mary")));
List<Site> sites = portal.findSites(new SiteQuery.Builder().includeEmptySites(true).withAllSiteTypes().build());
assertEquals(10, sites.size());
// Range
assertEquals(10, portal.findSites(new SiteQuery.Builder().withAllSiteTypes().withPagination(0, 10).build()).size());
assertEquals(5, portal.findSites(new SiteQuery.Builder().withAllSiteTypes().withPagination(0, 5).build()).size());
Pagination pagination = new Pagination(0, 3);
SiteQuery query = new SiteQuery.Builder().withAllSiteTypes().withPagination(pagination).build();
assertEquals(3, portal.findSites(query).size());
query = query.nextPage();
assertEquals(3, portal.findSites(query).size());
query = query.nextPage();
assertEquals(3, portal.findSites(query).size());
query = query.nextPage();
assertEquals(1, portal.findSites(query).size());
query = query.nextPage();
assertEquals(0, portal.findSites(query).size());
query = query.previousPage();
assertEquals(1, portal.findSites(query).size());
query = query.previousPage();
assertEquals(3, portal.findSites(query).size());
// By type
assertEquals(4, portal.findSites(new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SITE).build())
.size());
assertEquals(3, portal.findSites(new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SPACE).build())
.size());
assertEquals(3,
portal.findSites(new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.DASHBOARD).build())
.size());
// By type and range
assertEquals(
2,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SITE).withPagination(0, 2)
.build()).size());
assertEquals(
2,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SPACE).withPagination(0, 2)
.build()).size());
assertEquals(
2,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.DASHBOARD).withPagination(0, 2)
.build()).size());
assertEquals(
2,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SITE).withPagination(0, 2)
.withNextPage().build()).size());
assertEquals(
1,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.SPACE).withPagination(0, 2)
.withNextPage().build()).size());
assertEquals(
1,
portal.findSites(
new SiteQuery.Builder().includeEmptySites(true).withSiteTypes(SiteType.DASHBOARD).withPagination(0, 2)
.withNextPage().build()).size());
}
@Test
public void findSites_Paged_NonZeroOffset() {
// This test makes sure the proper amount of results are loaded at first, instead of starting at offset 0 and inc
for (int i = 0; i < 22; i++) {
createSite(new SiteId("site" + (i + 1)));
}
SiteQuery query = new SiteQuery.Builder().withPagination(11, 5).build();
List<Site> sites = portal.findSites(query);
assertEquals(5, sites.size());
assertEquals("site12", sites.get(0).getName());
assertEquals("site16", sites.get(4).getName());
}
@Test
public void getPage() {
createSite(new SiteId("get-page"), "bar");
assertNotNull(portal.getPage(new PageId("get-page", "bar")));
}
@Test(expected = ApiException.class)
public void getPage_Faulty() {
createSite(new SiteId("get-page"), "bar");
runWithFault(new Runnable() {
@Override
public void run() {
portal.getPage(new PageId("get-page", "bar"));
}
});
}
@Test
public void getPage_NonExisting() {
assertNull(portal.getPage(new PageId("get-page", "blah")));
}
@Test(expected = IllegalArgumentException.class)
public void getPage_Null() {
portal.getPage(null);
}
@Test
public void getSite() {
createSite(defaultSiteId);
assertNotNull(portal.getSite(new SiteId("classic")));
}
@Test(expected = ApiException.class)
public void getSite_Faulty() {
createSite(defaultSiteId);
runWithFault(new Runnable() {
@Override
public void run() {
portal.getSite(new SiteId("classic"));
}
});
}
@Test
public void getSite_Group() {
createSite(new SiteId(new Group("/platform/something")));
Site space = portal.getSite(new SiteId(new Group("platform", "something")));
assertNotNull(space);
}
@Test
public void getSite_NonExisting() {
assertNull(portal.getSite(new SiteId("nosuch")));
}
@Test(expected = IllegalArgumentException.class)
public void getSite_NullSiteId() {
portal.getSite(null);
}
@Test
public void getSite_User() {
createSite(new SiteId(new User("user10")));
Site dashboard = portal.getSite(new SiteId(new User("user10")));
assertNotNull(dashboard);
}
@Test
public void hasPermission() {
createSite(new SiteId("permissions"));
Page page = portal.createPage(new PageId("permissions", "page1"));
page.setAccessPermission(Permission.everyone());
page.setEditPermission(new Permission("*", new Group("/platform/administrators")));
portal.savePage(page);
page = portal.getPage(page.getId());
assertTrue(portal.hasPermission(new User("root"), page.getAccessPermission()));
assertTrue(portal.hasPermission(new User("root"), page.getEditPermission()));
assertTrue(portal.hasPermission(User.anonymous(), page.getAccessPermission()));
assertFalse(portal.hasPermission(User.anonymous(), page.getEditPermission()));
}
@Test
public void hasMultiplePermission() {
createSite(new SiteId("permissions"));
Page page = portal.createPage(new PageId("permissions", "page1"));
Set<Membership> memberships = new LinkedHashSet<Membership>(2);
memberships.add(new Membership("*", new Group("/platform/administrators")));
memberships.add(new Membership("*", new Group("/platform/users")));
page.setAccessPermission(new Permission(memberships));
page.setEditPermission(new Permission("*", new Group("/platform/administrators")));
portal.savePage(page);
page = portal.getPage(page.getId());
assertTrue(portal.hasPermission(new User("root"), page.getAccessPermission()));
assertTrue(portal.hasPermission(new User("root"), page.getEditPermission()));
assertFalse(portal.hasPermission(User.anonymous(), page.getAccessPermission()));
assertFalse(portal.hasPermission(User.anonymous(), page.getEditPermission()));
assertTrue(portal.hasPermission(new User("john"), page.getAccessPermission()));
assertFalse(portal.hasPermission(new User("john"), page.getEditPermission()));
}
@Test
public void hasPermission_User() {
createSite(new SiteId("permissions"));
Page page = portal.createPage(new PageId("permissions", "page1"));
page.setAccessPermission(new Permission(new User("root")));
portal.savePage(page);
assertTrue(portal.hasPermission(new User("root"), page.getAccessPermission()));
assertFalse(portal.hasPermission(new User("john"), page.getAccessPermission()));
}
@Test
public void removePage() {
createSite(new SiteId("removePage"), "page1", "page2");
assertNotNull(portal.getPage(new PageId("removePage", "page1")));
assertNotNull(portal.getPage(new PageId("removePage", "page2")));
assertTrue(portal.removePage(new PageId("removePage", "page1")));
assertNull(portal.getPage(new PageId("removePage", "page1")));
assertNotNull(portal.getPage(new PageId("removePage", "page2")));
assertTrue(portal.removePage(new PageId("removePage", "page2")));
assertNull(portal.getPage(new PageId("removePage", "page1")));
assertNull(portal.getPage(new PageId("removePage", "page2")));
}
@Test(expected = ApiException.class)
public void removePage_Faulty() {
createSite(new SiteId("test1"), "page1");
runWithFault(new Runnable() {
@Override
public void run() {
portal.removePage(new PageId("removePage", "page1"));
}
});
}
@Test
public void removePage_NonExisting() {
createSite(new SiteId("test1"), "page1");
assertFalse(portal.removePage(new PageId("test1", "page2")));
}
@Test(expected = EntityNotFoundException.class)
public void removePage_SiteNonExisting() {
createSite(new SiteId("test1"), "page1");
assertFalse(portal.removePage(new PageId("test2", "page1")));
}
@Test(expected = IllegalArgumentException.class)
public void removePage_NullSiteId() {
portal.removePage(null);
}
@Test
public void removeSite() {
createSite(new SiteId("test1"));
createSite(new SiteId("test2"));
createSite(new SiteId("test3"));
assertNotNull(portal.getSite(new SiteId("test1")));
assertNotNull(portal.getSite(new SiteId("test2")));
assertNotNull(portal.getSite(new SiteId("test3")));
assertTrue(portal.removeSite(new SiteId("test1")));
assertNull(portal.getSite((new SiteId("test1"))));
assertNotNull(portal.getSite(new SiteId("test2")));
assertNotNull(portal.getSite(new SiteId("test3")));
assertTrue(portal.removeSite(new SiteId(SiteType.SITE, "test2")));
assertNull(portal.getSite(new SiteId("te")));
assertNull(portal.getSite(new SiteId("test2")));
assertNotNull(portal.getSite(new SiteId("test3")));
}
@Test(expected = ApiException.class)
public void removeSite_Faulty() {
createSite(new SiteId("test1"));
runWithFault(new Runnable() {
@Override
public void run() {
portal.removeSite(new SiteId("test1"));
}
});
}
@Test
public void removeSite_NonExisting() {
assertFalse(portal.removeSite(new SiteId("test1")));
}
@Test(expected = IllegalArgumentException.class)
public void removeSite_NullSiteId() {
portal.removeSite(null);
}
@Test
public void savePage() {
createSite(new SiteId("create-page"));
Permission access = new Permission("*", new Group("access"));
Permission edit = new Permission("*", new Group("edit"));
Page page = portal.createPage(new PageId("create-page", "baz"));
page.setAccessPermission(access);
page.setDescription("description");
page.setDisplayName("displayName");
page.setEditPermission(edit);
portal.savePage(page);
page = portal.getPage(new PageId("create-page", "baz"));
assertNotNull(page);
assertEquals(access, page.getAccessPermission());
assertEquals("description", page.getDescription());
assertEquals("displayName", page.getDisplayName());
assertEquals(edit, page.getEditPermission());
assertEquals(new PageId("create-page", "baz"), page.getId());
assertEquals("baz", page.getName());
assertEquals(new SiteId("create-page"), page.getSiteId());
}
@Test(expected = EntityNotFoundException.class)
public void savePage_NoSite() {
Site site = portal.createSite(new SiteId("save-page"), "basic");
portal.saveSite(site);
Page page = portal.createPage(new PageId("no-site", "baz"));
portal.removeSite(site.getId());
portal.savePage(page);
}
@Test(expected = EntityAlreadyExistsException.class)
public void savePage_Exists() {
createSite(new SiteId("create-page"));
Page pageA = portal.createPage(new PageId("create-page", "baz"));
Page pageB = portal.createPage(new PageId("create-page", "baz"));
portal.savePage(pageA);
portal.savePage(pageB);
}
@Test(expected = ApiException.class)
public void savePage_Faulty() {
createSite(new SiteId("create-page"));
final Page page = portal.createPage(new PageId("create-page", "baz"));
runWithFault(new Runnable() {
@Override
public void run() {
portal.savePage(page);
}
});
}
@Test
public void savePage_Modify() {
savePage();
Permission access = new Permission("*", new Group("newAccess"));
Permission edit = new Permission("*", new Group("newEdit"));
Page page = portal.getPage(new PageId("create-page", "baz"));
page.setAccessPermission(access);
page.setDescription("newDescription");
page.setDisplayName("newDisplayName");
page.setEditPermission(edit);
portal.savePage(page);
page = portal.getPage(new PageId("create-page", "baz"));
assertNotNull(page);
assertEquals(access, page.getAccessPermission());
assertEquals("newDescription", page.getDescription());
assertEquals("newDisplayName", page.getDisplayName());
assertEquals(edit, page.getEditPermission());
assertEquals(new PageId("create-page", "baz"), page.getId());
assertEquals("baz", page.getName());
assertEquals(new SiteId("create-page"), page.getSiteId());
}
@Test(expected = IllegalArgumentException.class)
public void savePage_Null() {
portal.savePage(null);
}
@Test
public void saveSite() {
Permission access = new Permission("*", new Group("access"));
Permission edit = new Permission("*", new Group("edit"));
Site site = portal.createSite(new SiteId("newsite"), "basic");
site.setAccessPermission(access);
site.setDisplayName("displayName");
site.setDescription("description");
site.setEditPermission(edit);
site.setLocale(Locale.ENGLISH);
site.setSkin("skin");
site.getAttributes().put(Attributes.key("attributeKey", String.class), "attributeValue");
portal.saveSite(site);
site = portal.getSite(new SiteId("newsite"));
assertNotNull(site);
assertEquals("displayName", site.getDisplayName());
assertEquals("description", site.getDescription());
assertEquals(access, site.getAccessPermission());
assertEquals(edit, site.getEditPermission());
assertEquals(new SiteId("newsite"), site.getId());
assertEquals(Locale.ENGLISH, site.getLocale());
assertEquals("newsite", site.getName());
assertEquals("skin", site.getSkin());
assertEquals(SiteType.SITE, site.getType());
assertEquals(1, site.getAttributes().size());
assertEquals("attributeValue", site.getAttributes().get(Attributes.key("attributeKey", String.class)));
assertNull(portal.getSite(new SiteId("xxx")));
}
@Test(expected = ApiException.class)
public void saveSite_Exists() {
Site siteA = portal.createSite(new SiteId("newsite"), "basic");
Site siteB = portal.createSite(new SiteId("newsite"), "basic");
portal.saveSite(siteA);
portal.saveSite(siteB);
}
@Test(expected = ApiException.class)
public void saveSite_Faulty() {
final Site site = portal.createSite(new SiteId("newsite"), "basic");
runWithFault(new Runnable() {
@Override
public void run() {
portal.saveSite(site);
}
});
}
@Test
public void saveSite_Modify() {
saveSite();
Permission access = new Permission("*", new Group("newAccess"));
Permission edit = new Permission("*", new Group("newEdit"));
Site site = portal.getSite(new SiteId("newsite"));
site.setAccessPermission(access);
site.setDisplayName("newDisplayName");
site.setDescription("newDescription");
site.setEditPermission(edit);
site.setLocale(Locale.SIMPLIFIED_CHINESE);
site.setSkin("newSkin");
site.getAttributes().put(Attributes.key("attributeKey", String.class), "newAttributeValue");
site.getAttributes().put(Attributes.key("attributeKey2", String.class), "attributeValue2");
portal.saveSite(site);
site = portal.getSite(new SiteId("newsite"));
assertNotNull(site);
assertEquals("newDisplayName", site.getDisplayName());
assertEquals("newDescription", site.getDescription());
assertEquals(access, site.getAccessPermission());
assertEquals(edit, site.getEditPermission());
assertEquals(new SiteId("newsite"), site.getId());
assertEquals(Locale.SIMPLIFIED_CHINESE, site.getLocale());
assertEquals("newsite", site.getName());
assertEquals("newSkin", site.getSkin());
assertEquals(SiteType.SITE, site.getType());
assertEquals(2, site.getAttributes().size());
assertEquals("newAttributeValue", site.getAttributes().get(Attributes.key("attributeKey", String.class)));
assertEquals("attributeValue2", site.getAttributes().get(Attributes.key("attributeKey2", String.class)));
}
@Test(expected = IllegalArgumentException.class)
public void saveSite_Null() {
portal.saveSite(null);
}
@Test
public void serializePage() throws Exception {
createSite(new SiteId("classic"));
Permission access = Permission.any("/platform/administrators");
Permission edit = Permission.everyone();
Page page = portal.createPage(new PageId("classic", "page1"));
page.setAccessPermission(access);
page.setDescription("description");
page.setDisplayName("displayName");
page.setEditPermission(edit);
Page serialized = SerializationUtils.serializeDeserialize(page);
assertNotNull(serialized);
assertEquals(access, serialized.getAccessPermission());
assertEquals("description", serialized.getDescription());
assertEquals("displayName", serialized.getDisplayName());
assertEquals(edit, serialized.getEditPermission());
assertEquals(new PageId("classic", "page1"), serialized.getId());
assertEquals("page1", serialized.getName());
assertEquals(new SiteId("classic"), serialized.getSiteId());
portal.savePage(page);
Page saved = portal.getPage(page.getId());
Page savedSerialized = SerializationUtils.serializeDeserialize(saved);
assertNotNull(savedSerialized);
assertEquals(access, savedSerialized.getAccessPermission());
assertEquals("description", savedSerialized.getDescription());
assertEquals("displayName", savedSerialized.getDisplayName());
assertEquals(edit, savedSerialized.getEditPermission());
assertEquals(new PageId("classic", "page1"), savedSerialized.getId());
assertEquals("page1", savedSerialized.getName());
assertEquals(new SiteId("classic"), savedSerialized.getSiteId());
}
@Test
public void serializeSite() throws Exception {
Permission access = new Permission("*", new Group("access"));
Permission edit = new Permission("*", new Group("edit"));
Site site = portal.createSite(new SiteId("newsite"), "basic");
site.setAccessPermission(access);
site.setDisplayName("displayName");
site.setDescription("description");
site.setEditPermission(edit);
site.setLocale(Locale.ENGLISH);
site.setSkin("skin");
site.getAttributes().put(Attributes.key("attributeKey", String.class), "attributeValue");
site = SerializationUtils.serializeDeserialize(site);
assertNotNull(site);
assertEquals("displayName", site.getDisplayName());
assertEquals("description", site.getDescription());
assertEquals(access, site.getAccessPermission());
assertEquals(edit, site.getEditPermission());
assertEquals(new SiteId("newsite"), site.getId());
assertEquals(Locale.ENGLISH, site.getLocale());
assertEquals("newsite", site.getName());
assertEquals("skin", site.getSkin());
assertEquals(SiteType.SITE, site.getType());
assertEquals(1, site.getAttributes().size());
assertEquals("attributeValue", site.getAttributes().get(Attributes.key("attributeKey", String.class)));
portal.saveSite(site);
site = portal.getSite(new SiteId("newsite"));
site = SerializationUtils.serializeDeserialize(site);
assertNotNull(site);
assertEquals("displayName", site.getDisplayName());
assertEquals("description", site.getDescription());
assertEquals(access, site.getAccessPermission());
assertEquals(edit, site.getEditPermission());
assertEquals(new SiteId("newsite"), site.getId());
assertEquals(Locale.ENGLISH, site.getLocale());
assertEquals("newsite", site.getName());
assertEquals("skin", site.getSkin());
assertEquals(SiteType.SITE, site.getType());
assertEquals(1, site.getAttributes().size());
assertEquals("attributeValue", site.getAttributes().get(Attributes.key("attributeKey", String.class)));
}
private void runWithFault(Runnable r) {
RequestLifeCycle.end();
try {
r.run();
} finally {
RequestLifeCycle.begin(container);
}
}
}