/* * Copyright (C) 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.sites.liberation.export; import com.google.common.collect.Lists; import com.google.gdata.data.DateTime; import com.google.gdata.data.PlainTextConstruct; import com.google.gdata.data.sites.AnnouncementEntry; import com.google.gdata.data.sites.AnnouncementsPageEntry; import com.google.gdata.data.sites.AttachmentEntry; import com.google.gdata.data.sites.BaseContentEntry; import com.google.gdata.data.sites.BasePageEntry; import com.google.gdata.data.sites.CommentEntry; import com.google.gdata.data.sites.FileCabinetPageEntry; import com.google.gdata.data.sites.ListItemEntry; import com.google.gdata.data.sites.ListPageEntry; import com.google.gdata.data.sites.PageName; import com.google.gdata.data.sites.WebPageEntry; import com.google.sites.liberation.util.EntryUtils; import com.google.sites.liberation.util.XmlElement; import com.google.sites.liberation.renderers.AncestorLinksRenderer; import com.google.sites.liberation.renderers.AnnouncementsRenderer; import com.google.sites.liberation.renderers.AttachmentsRenderer; import com.google.sites.liberation.renderers.CommentsRenderer; import com.google.sites.liberation.renderers.ContentRenderer; import com.google.sites.liberation.renderers.FileCabinetRenderer; import com.google.sites.liberation.renderers.ListRenderer; import com.google.sites.liberation.renderers.SubpageLinksRenderer; import com.google.sites.liberation.renderers.TitleRenderer; import org.junit.Before; import org.junit.Test; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JUnit4Mockery; import java.io.IOException; import java.util.List; /** * @author bsimon@google.com (Ben Simon) */ public class PageExporterImplTest { private Mockery context; private AncestorLinksRenderer ancestorLinksRenderer; private AnnouncementsRenderer announcementsRenderer; private AttachmentsRenderer attachmentsRenderer; private CommentsRenderer commentsRenderer; private ContentRenderer contentRenderer; private FileCabinetRenderer fileCabinetRenderer; private ListRenderer listRenderer; private SubpageLinksRenderer subpageLinksRenderer; private TitleRenderer titleRenderer; private PageExporter exporter; private Appendable out; private EntryStore entryStore; @Before public void before() { context = new JUnit4Mockery(); ancestorLinksRenderer = context.mock(AncestorLinksRenderer.class); announcementsRenderer = context.mock(AnnouncementsRenderer.class); attachmentsRenderer = context.mock(AttachmentsRenderer.class); commentsRenderer = context.mock(CommentsRenderer.class); contentRenderer = context.mock(ContentRenderer.class); fileCabinetRenderer = context.mock(FileCabinetRenderer.class); listRenderer = context.mock(ListRenderer.class); subpageLinksRenderer = context.mock(SubpageLinksRenderer.class); titleRenderer = context.mock(TitleRenderer.class); exporter = new PageExporterImpl( ancestorLinksRenderer, announcementsRenderer, attachmentsRenderer, commentsRenderer, contentRenderer, fileCabinetRenderer, listRenderer, subpageLinksRenderer, titleRenderer); out = new StringBuilder(); entryStore = new InMemoryEntryStoreFactory().newEntryStore(); } @SuppressWarnings("unchecked") @Test public void testNormalExport() throws IOException { final BasePageEntry<?> grandparent = new WebPageEntry(); grandparent.setId("grandparent"); grandparent.setTitle(new PlainTextConstruct("grandparent")); grandparent.setPageName(new PageName("grandparent")); final BasePageEntry<?> parent = new WebPageEntry(); parent.setId("parent"); EntryUtils.setParentId(parent, grandparent.getId()); final BasePageEntry<?> entry = new WebPageEntry(); entry.setId("entry"); entry.setTitle(new PlainTextConstruct("entry")); EntryUtils.setParentId(entry, parent.getId()); final BasePageEntry<?> subpage1 = new WebPageEntry(); subpage1.setId("subpage1"); subpage1.setTitle(new PlainTextConstruct("subpage1")); EntryUtils.setParentId(subpage1, entry.getId()); final BasePageEntry<?> subpage2 = new WebPageEntry(); subpage2.setId("subpage2"); subpage2.setTitle(new PlainTextConstruct("subpage2")); EntryUtils.setParentId(subpage2, entry.getId()); final AttachmentEntry attachment1 = new AttachmentEntry(); attachment1.setId("attachment1"); attachment1.setUpdated(DateTime.parseDateTime("2009-08-06T16:08:12.107Z")); EntryUtils.setParentId(attachment1, entry.getId()); final AttachmentEntry attachment2 = new AttachmentEntry(); attachment2.setId("attachment2"); attachment2.setUpdated(DateTime.parseDateTime("2009-08-06T16:26:57.019Z")); EntryUtils.setParentId(attachment2, entry.getId()); final CommentEntry comment1 = new CommentEntry(); comment1.setId("comment1"); comment1.setUpdated(DateTime.parseDateTime("2009-08-06T16:08:12.107Z")); EntryUtils.setParentId(comment1, entry.getId()); final CommentEntry comment2 = new CommentEntry(); comment2.setId("comment2"); comment2.setUpdated(DateTime.parseDateTime("2009-08-06T16:26:57.019Z")); EntryUtils.setParentId(comment2, entry.getId()); entryStore.addEntry(grandparent); entryStore.addEntry(parent); entryStore.addEntry(entry); entryStore.addEntry(subpage1); entryStore.addEntry(subpage2); entryStore.addEntry(attachment1); entryStore.addEntry(attachment2); entryStore.addEntry(comment1); entryStore.addEntry(comment2); final List<BasePageEntry<?>> ancestors = Lists.newArrayList(); ancestors.add(grandparent); ancestors.add(parent); final List<BasePageEntry<?>> subpages = Lists.newArrayList(); subpages.add(subpage1); subpages.add(subpage2); final List<BaseContentEntry<?>> attachments = Lists.newArrayList(); attachments.add(attachment2); attachments.add(attachment1); final List<CommentEntry> comments = Lists.newArrayList(); comments.add(comment2); comments.add(comment1); context.checking(new Expectations() {{ oneOf (ancestorLinksRenderer).renderAncestorLinks( with(equal(ancestors))); will(returnValue(new XmlElement("div"))); oneOf (titleRenderer).renderTitle(entry); will(returnValue(new XmlElement("div"))); oneOf (contentRenderer).renderContent(entry, false); will(returnValue(new XmlElement("div"))); oneOf (subpageLinksRenderer).renderSubpageLinks(with(equal(subpages))); will(returnValue(new XmlElement("div"))); oneOf (attachmentsRenderer).renderAttachments(with(equal(attachments))); will(returnValue(new XmlElement("div"))); oneOf (commentsRenderer).renderComments(with(equal(comments))); will(returnValue(new XmlElement("div"))); }}); exporter.exportPage(entry, entryStore, out, false); } @Test public void testListExport() throws IOException { final ListPageEntry entry = new ListPageEntry(); entry.setId("entry"); entry.setTitle(new PlainTextConstruct("entry")); final ListItemEntry listItem1 = new ListItemEntry(); listItem1.setId("listItem1"); listItem1.setUpdated(DateTime.parseDateTime("2009-08-06T16:08:12.107Z")); EntryUtils.setParentId(listItem1, entry.getId()); final ListItemEntry listItem2 = new ListItemEntry(); listItem2.setId("listItem2"); listItem2.setUpdated(DateTime.parseDateTime("2009-08-06T16:26:57.019Z")); EntryUtils.setParentId(listItem2, entry.getId()); entryStore.addEntry(entry); entryStore.addEntry(listItem1); entryStore.addEntry(listItem2); final List<ListItemEntry> listItems = Lists.newArrayList(); listItems.add(listItem2); listItems.add(listItem1); context.checking(new Expectations() {{ oneOf (titleRenderer).renderTitle(entry); will(returnValue(new XmlElement("div"))); oneOf (contentRenderer).renderContent(entry, true); will(returnValue(new XmlElement("div"))); oneOf (listRenderer).renderList(with(entry), with(equal(listItems))); will(returnValue(new XmlElement("div"))); }}); exporter.exportPage(entry, entryStore, out, true); } @Test public void testFileCabinetExport() throws IOException { final FileCabinetPageEntry entry = new FileCabinetPageEntry(); entry.setId("entry"); entry.setTitle(new PlainTextConstruct("entry")); final AttachmentEntry attachment1 = new AttachmentEntry(); attachment1.setId("attachment1"); attachment1.setUpdated(DateTime.parseDateTime("2009-08-06T16:08:12.107Z")); EntryUtils.setParentId(attachment1, entry.getId()); final AttachmentEntry attachment2 = new AttachmentEntry(); attachment2.setId("attachment2"); attachment2.setUpdated(DateTime.parseDateTime("2009-08-06T16:26:57.019Z")); EntryUtils.setParentId(attachment2, entry.getId()); entryStore.addEntry(entry); entryStore.addEntry(attachment1); entryStore.addEntry(attachment2); final List<BaseContentEntry<?>> attachments = Lists.newArrayList(); attachments.add(attachment2); attachments.add(attachment1); context.checking(new Expectations() {{ oneOf (titleRenderer).renderTitle(entry); will(returnValue(new XmlElement("div"))); oneOf (contentRenderer).renderContent(entry, false); will(returnValue(new XmlElement("div"))); oneOf (fileCabinetRenderer).renderFileCabinet(with(equal(attachments))); will(returnValue(new XmlElement("div"))); }}); exporter.exportPage(entry, entryStore, out, false); } @Test public void testAnnouncementsExport() throws IOException { final AnnouncementsPageEntry entry = new AnnouncementsPageEntry(); entry.setId("entry"); entry.setTitle(new PlainTextConstruct("entry")); final AnnouncementEntry announcement1 = new AnnouncementEntry(); announcement1.setId("announcement1"); announcement1.setUpdated(DateTime.parseDateTime("2009-08-06T16:08:12.107Z")); EntryUtils.setParentId(announcement1, entry.getId()); final AnnouncementEntry announcement2 = new AnnouncementEntry(); announcement2.setId("attachment2"); announcement2.setUpdated(DateTime.parseDateTime("2009-08-06T16:26:57.019Z")); EntryUtils.setParentId(announcement2, entry.getId()); entryStore.addEntry(entry); entryStore.addEntry(announcement1); entryStore.addEntry(announcement2); final List<AnnouncementEntry> announcements = Lists.newArrayList(); announcements.add(announcement2); announcements.add(announcement1); context.checking(new Expectations() {{ oneOf (titleRenderer).renderTitle(entry); will(returnValue(new XmlElement("div"))); oneOf (contentRenderer).renderContent(entry, true); will(returnValue(new XmlElement("div"))); oneOf (announcementsRenderer).renderAnnouncements( with(equal(announcements))); will(returnValue(new XmlElement("div"))); }}); exporter.exportPage(entry, entryStore, out, true); } }