/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, 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.exoplatform.portal.mop.management.exportimport;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.mop.SiteKey;
import org.exoplatform.portal.mop.importer.ImportMode;
import org.exoplatform.portal.mop.management.operations.MOPSiteProvider;
import org.exoplatform.portal.mop.management.operations.page.PageUtils;
import org.exoplatform.portal.mop.page.PageContext;
import org.exoplatform.portal.mop.page.PageKey;
import org.exoplatform.portal.mop.page.PageServiceImpl;
import org.exoplatform.portal.mop.page.PageState;
import org.exoplatform.portal.pom.config.POMSession;
import org.exoplatform.portal.pom.data.ComponentData;
import org.exoplatform.portal.pom.data.PageData;
import org.gatein.mop.api.workspace.Site;
import org.mockito.ArgumentMatcher;
/**
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
* @version $Revision$
*/
public class PageImportTaskTest extends TestCase {
private PageServiceImpl pageService;
private DataStorage dataStorage;
private POMSession session;
private Site site;
private org.gatein.mop.api.workspace.Page pages;
private org.gatein.mop.api.workspace.Page rootPage;
private org.gatein.mop.api.workspace.Page mockPage;
private SiteKey siteKey = new SiteKey("user", "foo");
private MOPSiteProvider siteProvider;
@Override
protected void setUp() throws Exception {
dataStorage = mock(DataStorage.class);
pageService = mock(PageServiceImpl.class);
rootPage = mock(org.gatein.mop.api.workspace.Page.class);
pages = mock(org.gatein.mop.api.workspace.Page.class);
mockPage = mock(org.gatein.mop.api.workspace.Page.class);
site = mock(Site.class);
siteProvider = new MOPSiteProvider() {
@Override
public Site getSite(SiteKey siteKey) {
return site;
}
};
}
public void testConserve_NoPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> emptyList());
task.importData(ImportMode.CONSERVE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
PageContext context = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(context)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(3)).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing, task.getRollbackDeletes());
Assert.assertNull(task.getRollbackSaves());
}
public void testConserve_SamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page1", "page2", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.CONSERVE);
verify(pages).getChildren();
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
assertNullOrEmpty(task.getRollbackSaves());
}
public void testConserve_NewPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("foo", "bar", "baz");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.CONSERVE);
verify(pages).getChildren();
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
assertNullOrEmpty(task.getRollbackSaves());
}
public void testConserve_NewAndSamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").addPage("page4").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page1", "page2", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.CONSERVE);
verify(pages).getChildren();
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
assertNullOrEmpty(task.getRollbackSaves());
}
public void testInsert_NoPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> emptyList());
task.importData(ImportMode.INSERT);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing, task.getRollbackDeletes());
Assert.assertNull(task.getRollbackSaves());
}
public void testInsert_SamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page1", "page2", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.INSERT);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
}
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
assertNullOrEmpty(task.getRollbackSaves());
}
public void testInsert_NewPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("foo", "bar", "baz");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.INSERT);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing.getPages(), task.getRollbackDeletes().getPages());
Assert.assertNull(task.getRollbackSaves());
}
public void testInsert_NewAndSamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").addPage("page4").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page2", "bar", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.INSERT);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
if (page.getName().equals("page1") || page.getName().equals("page4")) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
}
verify(dataStorage, times(2)).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(2, task.getRollbackDeletes().getPages().size());
Assert.assertEquals(importing.getPages().get(0), task.getRollbackDeletes().getPages().get(0));
Assert.assertEquals(importing.getPages().get(3), task.getRollbackDeletes().getPages().get(1));
Assert.assertNull(task.getRollbackSaves());
}
public void testMerge_NoPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> emptyList());
task.importData(ImportMode.MERGE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing, task.getRollbackDeletes());
Assert.assertNull(task.getRollbackSaves());
}
public void testMerge_SamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page1", "page2", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
when(pageService.loadPage(siteKey.page(name))).thenReturn(new PageContextBuilder().page(name));
when(dataStorage.getPage(siteKey.page(name).format())).thenReturn(
new Page(siteKey.getTypeName(), siteKey.getName(), name));
}
task.importData(ImportMode.MERGE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
PageKey pageKey = siteKey.page(page.getName());
verify(pageService).loadPage(pageKey);
verify(dataStorage).getPage(pageKey.format());
verify(pageService).savePage(argThat(matches(new PageContextBuilder().page(page.getName()))));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
Assert.assertNotNull(task.getRollbackSaves());
Assert.assertEquals(3, task.getRollbackSaves().getPages().size());
compareNames(existing, task.getRollbackSaves().getPages());
}
public void testMerge_NewPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("foo", "bar", "baz");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
}
task.importData(ImportMode.MERGE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing.getPages(), task.getRollbackDeletes().getPages());
assertNullOrEmpty(task.getRollbackSaves());
}
public void testMerge_NewAndSamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").addPage("page4").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page2", "bar", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
when(pageService.loadPage(siteKey.page(name))).thenReturn(new PageContextBuilder().page(name));
when(dataStorage.getPage(siteKey.page(name).format())).thenReturn(
new Page(siteKey.getTypeName(), siteKey.getName(), name));
}
task.importData(ImportMode.MERGE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
verify(pages).getChild(page.getName());
if (page.getName().equals("page2") || page.getName().equals("page3")) {
verify(pageService).loadPage(siteKey.page(page.getName()));
verify(dataStorage).getPage(siteKey.page(page.getName()).format());
}
if (!page.getName().equals("bar")) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
}
verify(dataStorage, times(4)).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(2, task.getRollbackDeletes().getPages().size());
Assert.assertEquals(importing.getPages().get(0), task.getRollbackDeletes().getPages().get(0));
Assert.assertEquals(importing.getPages().get(3), task.getRollbackDeletes().getPages().get(1));
Assert.assertNotNull(task.getRollbackSaves());
Assert.assertEquals(2, task.getRollbackSaves().getPages().size());
compareNames(Arrays.asList(existing.get(0), existing.get(2)), task.getRollbackSaves().getPages());
}
public void testOverwrite_NoPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> emptyList());
task.importData(ImportMode.OVERWRITE);
verify(pages).getChildren();
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing, task.getRollbackDeletes());
Assert.assertNull(task.getRollbackSaves());
}
public void testOverwrite_SamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page1", "page2", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
when(pageService.loadPages(siteKey)).thenReturn(new PageContextBuilder().pages(existing));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
when(dataStorage.getPage(siteKey.page(name).format())).thenReturn(
new Page(siteKey.getTypeName(), siteKey.getName(), name));
}
task.importData(ImportMode.OVERWRITE);
verify(pages).getChildren();
verify(pageService).loadPages(siteKey);
for (String name : existing) {
verify(dataStorage).getPage(siteKey.page(name).format());
verify(pageService).destroyPage(siteKey.page(name));
}
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size() + existing.size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
assertNullOrEmpty(task.getRollbackDeletes());
Assert.assertNotNull(task.getRollbackSaves());
Assert.assertEquals(3, task.getRollbackSaves().getPages().size());
compareNames(existing, task.getRollbackSaves().getPages());
}
public void testOverwrite_NewPages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("foo", "bar", "baz");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
when(pageService.loadPages(siteKey)).thenReturn(new PageContextBuilder().pages(existing));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
when(dataStorage.getPage(siteKey.page(name).format())).thenReturn(
new Page(siteKey.getTypeName(), siteKey.getName(), name));
}
task.importData(ImportMode.OVERWRITE);
verify(pages).getChildren();
verify(pageService).loadPages(siteKey);
for (String name : existing) {
verify(dataStorage).getPage(siteKey.page(name).format());
verify(pageService).destroyPage(siteKey.page(name));
}
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size() + existing.size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(importing.getPages(), task.getRollbackDeletes().getPages());
Assert.assertNotNull(task.getRollbackSaves());
compareNames(existing, task.getRollbackSaves().getPages());
}
public void testOverwrite_NewAndSamePages() throws Exception {
Page.PageSet importing = new Builder().addPage("page1").addPage("page2").addPage("page3").addPage("page4").build();
PageImportTask task = new PageImportTask(importing, siteKey, dataStorage, pageService, siteProvider);
List<String> existing = pages("page2", "bar", "page3");
when(site.getRootPage()).thenReturn(rootPage);
when(rootPage.getChild("pages")).thenReturn(pages);
when(pages.getChildren()).thenReturn(Collections.<org.gatein.mop.api.workspace.Page> singleton(mockPage));
when(pageService.loadPages(siteKey)).thenReturn(new PageContextBuilder().pages(existing));
for (String name : existing) {
when(pages.getChild(name)).thenReturn(mockPage);
when(dataStorage.getPage(siteKey.page(name).format())).thenReturn(
new Page(siteKey.getTypeName(), siteKey.getName(), name));
}
task.importData(ImportMode.OVERWRITE);
verify(pages).getChildren();
verify(pageService).loadPages(siteKey);
for (String name : existing) {
verify(dataStorage).getPage(siteKey.page(name).format());
verify(pageService).destroyPage(siteKey.page(name));
}
for (Page page : importing.getPages()) {
PageContext pageContext = new PageContext(siteKey.page(page.getName()), PageUtils.toPageState(page));
verify(pageService).savePage(argThat(matches(pageContext)));
verify(dataStorage).save(page);
}
verify(dataStorage, times(importing.getPages().size() + existing.size())).save();
verifyNoMoreInteractions(dataStorage, pageService, pages);
Assert.assertNotNull(task.getRollbackDeletes());
Assert.assertEquals(2, task.getRollbackDeletes().getPages().size());
Assert.assertEquals(importing.getPages().get(0), task.getRollbackDeletes().getPages().get(0));
Assert.assertEquals(importing.getPages().get(3), task.getRollbackDeletes().getPages().get(1));
Assert.assertNotNull(task.getRollbackSaves());
compareNames(existing, task.getRollbackSaves().getPages());
}
private void assertNullOrEmpty(Page.PageSet pages) {
if (pages != null) {
Assert.assertTrue(pages.getPages().isEmpty());
}
}
private void compareNames(List<String> expected, ArrayList<Page> actual) {
if (expected == null) {
assertNull(actual);
return;
}
assertEquals(expected.size(), actual.size());
for (int i = 0; i < expected.size(); i++) {
compareName(expected.get(i), actual.get(i));
}
}
private void compareName(String name, Page actual) {
assertEquals(name, actual.getName());
}
private List<String> pages(String... names) {
return Arrays.asList(names);
}
private static ArgumentMatcher<PageContext> matches(PageContext context) {
return new PageContextMatcher(context);
}
private static class PageContextMatcher extends ArgumentMatcher<PageContext> {
private final PageContext pageContext;
public PageContextMatcher(PageContext pageContext) {
this.pageContext = pageContext;
}
@Override
public boolean matches(Object o) {
if (pageContext == o)
return true;
if (!(o instanceof PageContext))
return false;
PageContext that = (PageContext) o;
return that.getKey().equals(pageContext.getKey()) && that.getState().equals(pageContext.getState());
}
}
private static class Builder {
private Page.PageSet pages;
public Builder() {
pages = new Page.PageSet();
pages.setPages(new ArrayList<Page>());
}
public Builder addPage(String name) {
PageData page = new PageData(null, "", name, null, null, null, null, null, null, null,
Collections.<String> emptyList(), Collections.<ComponentData> emptyList(), "", "", null, false,
Collections.<String> emptyList(), Collections.<String> emptyList());
pages.getPages().add(new Page(page));
return this;
}
public Page.PageSet build() {
return pages;
}
}
private class PageContextBuilder {
PageContext page(String name) {
return new PageContext(siteKey.page(name), new PageState(null, null, false, null, Collections.<String> emptyList(),
null, null, null));
}
List<PageContext> pages(Iterable<String> names) {
List<PageContext> pages = new ArrayList<PageContext>();
for (String name : names) {
pages.add(page(name));
}
return pages;
}
}
}