// 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.responders.editing; import org.json.JSONObject; import util.RegexTestCase; import fitnesse.FitNesseContext; import fitnesse.Responder; import fitnesse.http.MockRequest; import fitnesse.http.SimpleResponse; import fitnesse.wiki.InMemoryPage; import fitnesse.wiki.PageCrawler; import fitnesse.wiki.PageData; import fitnesse.wiki.PathParser; import fitnesse.wiki.SymbolicPage; import fitnesse.wiki.WikiImportProperty; import fitnesse.wiki.WikiPage; import fitnesse.wiki.WikiPageProperties; import fitnesse.wiki.WikiPageProperty; import fitnesse.testutil.FitNesseUtil; public class PropertiesResponderTest extends RegexTestCase { private FitNesseContext context; private WikiPage root; private PageCrawler crawler; private MockRequest request; private Responder responder; private String content; public void setUp() throws Exception { root = InMemoryPage.makeRoot("RooT"); crawler = root.getPageCrawler(); context = FitNesseUtil.makeTestContext(root); request = new MockRequest(); } public void testResponse() throws Exception { WikiPage page = crawler.addPage(root, PathParser.parse("PageOne")); PageData data = page.getData(); data.setContent("some content"); WikiPageProperties properties = data.getProperties(); properties.set("Test", "true"); properties.set(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://www.fitnesse.org"); page.commit(data); MockRequest request = new MockRequest(); request.setResource("PageOne"); Responder responder = new PropertiesResponder(); SimpleResponse response = (SimpleResponse) responder.makeResponse(context, request); assertEquals("max-age=0", response.getHeader("Cache-Control")); String content = response.getContent(); assertSubString("PageOne", content); assertSubString("value=\"http://www.fitnesse.org\"", content); assertDoesntHaveRegexp("textarea name=\"extensionXml\"", content); assertHasRegexp("<input.*value=\"Save Properties\".*>", content); assertHasRegexp("<input.*value=\"saveProperties\"", content); for (String attribute : new String[]{"Search", "Edit", "Properties", "Versions", "Refactor", "WhereUsed", "RecentChanges"}) assertCheckboxChecked(attribute, content); for (String attribute : new String[]{"Prune", PageData.PropertySECURE_READ, PageData.PropertySECURE_WRITE, PageData.PropertySECURE_TEST}) assertCheckboxNotChecked(content, attribute); } private void assertCheckboxNotChecked(String content, String attribute) { assertSubString("<input type=\"checkbox\" id=\"" + attribute + "\" name=\"" + attribute + "\"/>", content); } private void assertCheckboxChecked(String attribute, String content) { assertSubString("<input type=\"checkbox\" id=\"" + attribute + "\" name=\"" + attribute + "\" checked=\"checked\"/>", content); } public void testJsonResponse() throws Exception { WikiPage page = crawler.addPage(root, PathParser.parse("PageOne")); PageData data = page.getData(); data.setContent("some content"); WikiPageProperties properties = data.getProperties(); properties.set("Test", "true"); page.commit(data); MockRequest request = new MockRequest(); request.setResource("PageOne"); request.addInput("format", "json"); Responder responder = new PropertiesResponder(); SimpleResponse response = (SimpleResponse) responder.makeResponse(context, request); assertEquals("text/json", response.getContentType()); String jsonText = response.getContent(); JSONObject jsonObject = new JSONObject(jsonText); assertTrue(jsonObject.getBoolean("Test")); assertTrue(jsonObject.getBoolean("Search")); assertTrue(jsonObject.getBoolean("Edit")); assertTrue(jsonObject.getBoolean("Properties")); assertTrue(jsonObject.getBoolean("Versions")); assertTrue(jsonObject.getBoolean("Refactor")); assertTrue(jsonObject.getBoolean("WhereUsed")); assertTrue(jsonObject.getBoolean("RecentChanges")); assertFalse(jsonObject.getBoolean("Suite")); assertFalse(jsonObject.getBoolean("Prune")); assertFalse(jsonObject.getBoolean(PageData.PropertySECURE_READ)); assertFalse(jsonObject.getBoolean(PageData.PropertySECURE_WRITE)); assertFalse(jsonObject.getBoolean(PageData.PropertySECURE_TEST)); } public void testGetVirtualWikiValue() throws Exception { WikiPage page = crawler.addPage(root, PathParser.parse("PageOne")); PageData data = page.getData(); assertEquals("", PropertiesResponder.getVirtualWikiValue(data)); data.setAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://www.objectmentor.com"); assertEquals("http://www.objectmentor.com", PropertiesResponder.getVirtualWikiValue(data)); } public void testUsernameDisplayed() throws Exception { WikiPage page = getContentFromSimplePropertiesPage(); assertSubString("Last modified anonymously", content); PageData data = page.getData(); data.setAttribute(PageData.LAST_MODIFYING_USER, "Bill"); page.commit(data); request.setResource("SomePage"); SimpleResponse response = (SimpleResponse) responder.makeResponse(context, request); content = response.getContent(); assertSubString("Last modified by Bill", content); } private WikiPage getContentFromSimplePropertiesPage() throws Exception { WikiPage page = root.addChildPage("SomePage"); return getPropertiesContentFromPage(page); } private WikiPage getPropertiesContentFromPage(WikiPage page) throws Exception { request = new MockRequest(); request.setResource(page.getName()); responder = new PropertiesResponder(); SimpleResponse response = (SimpleResponse) responder.makeResponse(context, request); content = response.getContent(); return page; } public void testWikiImportForm() throws Exception { getContentFromSimplePropertiesPage(); checkUpdateForm(); assertSubString("Wiki Import", content); assertSubString("value=\"Import\"", content); assertSubString("type=\"text\"", content); assertSubString("name=\"remoteUrl\"", content); } private void checkUpdateForm() { assertSubString("<form", content); assertSubString("action=\"\"", content); assertSubString("<input", content); assertSubString("type=\"hidden\"", content); assertSubString("name=\"responder\"", content); assertSubString("value=\"import\"", content); } public void testWikiImportUpdate() throws Exception { WikiImportProperty property = new WikiImportProperty("http://my.host.com/PageRoot"); property.setRoot(true); testWikiImportUpdateWith(property); assertSubString("imports its subpages from", content); assertSubString("value=\"Update Subpages\"", content); assertSubString("Automatically update imported content when executing tests", content); } public void testWikiImportUpdateNonroot() throws Exception { testWikiImportUpdateWith(new WikiImportProperty("http://my.host.com/PageRoot")); assertSubString("imports its content and subpages from", content); assertSubString("value=\"Update Content and Subpages\"", content); assertSubString("Automatically update imported content when executing tests", content); } private void testWikiImportUpdateWith(WikiImportProperty property) throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); property.addTo(data.getProperties()); page.commit(data); getPropertiesContentFromPage(page); checkUpdateForm(); assertSubString("Wiki Import Update", content); assertSubString("<a href=\"http://my.host.com/PageRoot\">http://my.host.com/PageRoot</a>", content); assertNotSubString("value=\"Import\"", content); } public void testSymbolicLinkForm() throws Exception { getContentFromSimplePropertiesPage(); assertSubString("Symbolic Links", content); assertSubString("<input type=\"hidden\" name=\"responder\" value=\"symlink\"", content); assertSubString("<input type=\"text\" name=\"linkName\"", content); assertSubString("<input type=\"text\" name=\"linkPath\"", content); assertSubString("<input type=\"submit\" name=\"submit\" value=\"Create/Replace\"", content); } public void testSymbolicLinkListing() throws Exception { WikiPage page = root.addChildPage("SomePage"); page.addChildPage("SomeChild"); WikiPage pageOne = root.addChildPage("PageOne"); //...page must exist! pageOne.addChildPage("ChildOne"); //...page must exist! PageData data = page.getData(); WikiPageProperties props = data.getProperties(); WikiPageProperty symProp = props.set(SymbolicPage.PROPERTY_NAME); symProp.set("InternalAbsPage", ".PageOne.ChildOne"); symProp.set("InternalRelPage", "PageOne.ChildOne"); symProp.set("InternalSubPage", ">SomeChild"); symProp.set("ExternalPage", "file://some/page"); page.commit(data); getPropertiesContentFromPage(page); assertSubString("<input type=\"text\" name=\"InternalAbsPage\"", content); assertSubString("<a href=\".PageOne.ChildOne\">.PageOne.ChildOne</a>", content); assertMatches("<a href=\".*\">Rename</a>", content); assertSubString("<input type=\"text\" name=\"InternalRelPage\"", content); assertSubString("<a href=\".PageOne.ChildOne\">PageOne.ChildOne</a>", content); assertSubString("<input type=\"text\" name=\"InternalSubPage\"", content); assertSubString("<a href=\".SomePage.SomeChild\">>SomeChild</a>", content); assertHasRegexp("<td>\\W*file://some/page\\W*</td>", content); } public void testSymbolicLinkListingForBackwardPath() throws Exception { WikiPage page = root.addChildPage("SomePage"); WikiPage child = page.addChildPage("SomeChild"); page.addChildPage("OtherChild"); PageData data = child.getData(); WikiPageProperties props = data.getProperties(); WikiPageProperty symProp = props.set(SymbolicPage.PROPERTY_NAME); symProp.set("InternalBackPage", "<SomePage.OtherChild"); page.commit(data); getPropertiesContentFromPage(page); assertSubString("InternalBackPage", content); assertSubString("<a href=\".SomePage.OtherChild\"><SomePage.OtherChild</a>", content); } public void testPageTypePropertiesHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Page type:", html); assertSubString("<input type=\"radio\" id=\"Static\" name=\"PageType\" value=\"Static\" checked=\"checked\"/>", html); assertSubString("<input type=\"radio\" id=\"Test\" name=\"PageType\" value=\"Test\"/>", html); assertSubString("<input type=\"radio\" id=\"Suite\" name=\"PageType\" value=\"Suite\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Prune\" name=\"Prune\"/>", html); } public void testPageTypePropertiesSuiteHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); data.setAttribute("Suite"); page.commit(data); assertSame(page, context.root.getPageCrawler().getPage(context.root, PathParser.parse(".SomePage"))); request.setResource(page.getPageCrawler().getFullPath(page).toString()); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Page type:", html); assertSubString("<input type=\"radio\" id=\"Static\" name=\"PageType\" value=\"Static\"/>", html); assertSubString("<input type=\"radio\" id=\"Test\" name=\"PageType\" value=\"Test\"/>", html); assertSubString("<input type=\"radio\" id=\"Suite\" name=\"PageType\" value=\"Suite\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Prune\" name=\"Prune\"/>", html); } public void testPageTypePropertiesTestHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); data.setAttribute("Test"); page.commit(data); request.setResource(page.getPageCrawler().getFullPath(page).toString()); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Page type:", html); assertSubString("<input type=\"radio\" id=\"Static\" name=\"PageType\" value=\"Static\"/>", html); assertSubString("<input type=\"radio\" id=\"Test\" name=\"PageType\" value=\"Test\" checked=\"checked\"/>", html); assertSubString("<input type=\"radio\" id=\"Suite\" name=\"PageType\" value=\"Suite\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Prune\" name=\"Prune\"/>", html); } public void testPageTypePropertiesSkippedHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); data.setAttribute("Prune"); page.commit(data); request.setResource(page.getPageCrawler().getFullPath(page).toString()); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Page type:", html); assertSubString("<input type=\"checkbox\" id=\"Prune\" name=\"Prune\" checked=\"checked\"/>", html); } public void testActionPropertiesHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Actions:", html); assertSubString("<input type=\"checkbox\" id=\"Edit\" name=\"Edit\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Versions\" name=\"Versions\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Properties\" name=\"Properties\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Refactor\" name=\"Refactor\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"WhereUsed\" name=\"WhereUsed\" checked=\"checked\"/>", html); } public void testMakeNavigationPropertiesHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Navigation:", html); assertSubString("<input type=\"checkbox\" id=\"Files\" name=\"Files\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"RecentChanges\" name=\"RecentChanges\" checked=\"checked\"/>", html); assertSubString("<input type=\"checkbox\" id=\"Search\" name=\"Search\" checked=\"checked\"/>", html); } public void testMakeSecurityPropertiesHtml() throws Exception { WikiPage page = root.addChildPage("SomePage"); PageData data = page.getData(); SimpleResponse response = (SimpleResponse) new PropertiesResponder().makeResponse(context, request); String html = response.getContent(); assertSubString("Security:", html); assertSubString("<input type=\"checkbox\" id=\"secure-read\" name=\"secure-read\"/>", html); assertSubString("<input type=\"checkbox\" id=\"secure-write\" name=\"secure-write\"/>", html); assertSubString("<input type=\"checkbox\" id=\"secure-test\" name=\"secure-test\"/>", html); } public void testEmptySuitesForm() throws Exception { getContentFromSimplePropertiesPage(); assertSubString("Suites", content); assertSubString("<input type=\"text\" id=\"Suites\" title=\"Separate tags by a comma\" name=\"Suites\" value=\"\"/>", content); } public void testSuitesDisplayed() throws Exception { WikiPage page = getContentFromSimplePropertiesPage(); PageData data = page.getData(); data.setAttribute(PageData.PropertySUITES, "smoke"); page.commit(data); getPropertiesContentFromPage(page); assertSubString("Suites", content); assertSubString("<input type=\"text\" id=\"Suites\" title=\"Separate tags by a comma\" name=\"Suites\" value=\"smoke\"/>", content); } }