// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved. // Released under the terms of the CPL Common Public License version 1.0. package fitnesse.wiki; import static fitnesse.wiki.zip.ZipFileVersionsController.dateFormat; import java.io.File; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Set; import junit.framework.TestCase; import util.FileUtil; public class FileSystemPageZipFileVersioningTest extends TestCase { public FileSystemPage page; private VersionInfo firstVersion; private PageCrawler crawler; private WikiPage root; @Override public void setUp() throws Exception { PageVersionPruner.daysTillVersionsExpire=1; root = new FileSystemPage("testDir", "RooT"); crawler = root.getPageCrawler(); page = (FileSystemPage) crawler.addPage(root, PathParser.parse("PageOne"), "original content"); PageData data = page.getData(); firstVersion = page.commit(data); } @Override public void tearDown() throws Exception { FileUtil.deleteFileSystemDirectory("testDir"); } public void testSave() throws Exception { String dirPath = page.getFileSystemPath(); File dir = new File(dirPath); String[] filenames = dir.list(); List<String> list = Arrays.asList(filenames); assertTrue(list.contains(firstVersion + ".zip")); } public void testLoad() throws Exception { PageData data = page.getData(); data.setContent("new content"); VersionInfo version = page.commit(data); PageData loadedData = page.getDataVersion(version.getName()); assertEquals("original content", loadedData.getContent()); } public void testGetVersions() throws Exception { Set<VersionInfo> versionNames = page.getData().getVersions(); assertEquals(1, versionNames.size()); assertTrue(versionNames.contains(firstVersion)); } public void testSubWikisDontInterfere() throws Exception { crawler.addPage(page, PathParser.parse("SubPage"), "sub page content"); try { page.commit(page.getData()); } catch (Exception e) { fail("this exception should not have been thrown: " + e.getMessage()); } } public void testTwoVersions() throws Exception { PageData data = page.getData(); data.setContent("new content"); VersionInfo secondVersion = page.commit(data); Set<VersionInfo> versionNames = page.getData().getVersions(); assertEquals(2, versionNames.size()); assertTrue(versionNames.contains(firstVersion)); assertTrue(versionNames.contains(secondVersion)); } public void testVersionsExpire() throws Exception { PageVersionPruner.daysTillVersionsExpire = 3; PageData data = page.makePageData(); Set<VersionInfo> versions = data.getVersions(); for (VersionInfo version : versions) page.removeVersion(version.toString()); data.getProperties().setLastModificationTime(dateFormat().parse("20031213000000")); page.makeVersion(data); data.getProperties().setLastModificationTime(dateFormat().parse("20031214000000")); page.makeVersion(data); data.getProperties().setLastModificationTime(dateFormat().parse("20031215000000")); page.makeVersion(data); data.getProperties().setLastModificationTime(dateFormat().parse("20031216000000")); page.makeVersion(data); versions = page.makePageData().getVersions(); PageVersionPruner.pruneVersions(page, versions); versions = page.makePageData().getVersions(); assertEquals(3, versions.size()); List<VersionInfo> versionsList = new LinkedList<VersionInfo>(versions); Collections.sort(versionsList); assertTrue(versionsList.get(0).toString().endsWith("20031214000000")); assertTrue(versionsList.get(1).toString().endsWith("20031215000000")); assertTrue(versionsList.get(2).toString().endsWith("20031216000000")); } public void testGetContent() throws Exception { WikiPagePath alpha = PathParser.parse("AlphaAlpha"); WikiPage a = crawler.addPage(root, alpha, "a"); PageData data = a.getData(); assertEquals("a", data.getContent()); } public void testReplaceContent() throws Exception { WikiPagePath alpha = PathParser.parse("AlphaAlpha"); WikiPage page = crawler.addPage(root, alpha, "a"); PageData data = page.getData(); data.setContent("b"); page.commit(data); assertEquals("b", page.getData().getContent()); } public void testSetAttributes() throws Exception { PageData data = root.getData(); data.setAttribute("Test", "true"); data.setAttribute("Search", "true"); root.commit(data); assertTrue(root.getData().hasAttribute("Test")); assertTrue(root.getData().hasAttribute("Search")); assertEquals("true", root.getData().getAttribute("Test")); } public void testSimpleVersionTasks() throws Exception { WikiPagePath path = PathParser.parse("MyPageOne"); WikiPage page = crawler.addPage(root, path, "old content"); PageData data = page.getData(); data.setContent("new content"); VersionInfo previousVersion = page.commit(data); data = page.getData(); Set<VersionInfo> versions = data.getVersions(); assertEquals(1, versions.size()); assertEquals(true, versions.contains(previousVersion)); PageData loadedData = page.getDataVersion(previousVersion.getName()); assertSame(page, loadedData.getWikiPage()); assertEquals("old content", loadedData.getContent()); } public void testUserNameIsInVersionName() throws Exception { WikiPagePath testPagePath = PathParser.parse("TestPage"); WikiPage testPage = crawler.addPage(root, testPagePath, "version1"); PageData data = testPage.getData(); data.setAttribute(PageData.LAST_MODIFYING_USER, "Aladdin"); testPage.commit(data); data = testPage.getData(); data.setAttribute(PageData.LAST_MODIFYING_USER, "Joe"); VersionInfo record = testPage.commit(data); assertTrue(record.getName().startsWith("Aladdin")); } public void testNoVersionException() throws Exception { WikiPagePath pageOnePath = PathParser.parse("PageOne"); WikiPage page = crawler.addPage(root, pageOnePath, "old content"); try { page.getDataVersion("abc"); fail("a NoSuchVersionException should have been thrown"); } catch (NoSuchVersionException e) { assertEquals("There is no version 'abc'", e.getMessage()); } } public void testUnicodeInVersions() throws Exception { WikiPage page = crawler.addPage(root, PathParser.parse("SomePage"), "\uba80\uba81\uba82\uba83"); PageData data = page.getData(); data.setContent("blah"); VersionInfo info = page.commit(data); data = page.getDataVersion(info.getName()); String expected = "\uba80\uba81\uba82\uba83"; String actual = data.getContent(); assertEquals(expected, actual); } public void testVersionedPropertiedLoadedProperly() throws Exception { WikiPage page = crawler.addPage(root, PathParser.parse("TestPage")); PageData data = page.getData(); WikiPageProperties oldProps = data.getProperties(); WikiPageProperties props = new WikiPageProperties(); props.set("MyProp", "my value"); data.setProperties(props); page.commit(data); data.setProperties(oldProps); VersionInfo version = page.commit(data); PageData versionedData = page.getDataVersion(version.getName()); WikiPageProperties versionedProps = versionedData.getProperties(); assertTrue(versionedProps.has("MyProp")); assertEquals("my value", versionedProps.get("MyProp")); } }