// 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 java.util.List;
import util.RegexTestCase;
import fitnesse.FitNesseContext;
import fitnesse.Responder;
import fitnesse.http.MockRequest;
import fitnesse.http.Response;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.NullVirtualCouplingPage;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.VirtualCouplingExtension;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPageProperties;
public class SavePropertiesResponderTest extends RegexTestCase {
private WikiPage root;
private MockRequest request;
private WikiPage page;
private PageCrawler crawler;
private VirtualCouplingExtension extension;
private WikiPage linker;
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
}
private void createRequest() throws Exception {
page = crawler.addPage(root, PathParser.parse("PageOne"));
request = new MockRequest();
request.addInput("PageType", "Test");
request.addInput("Properties", "on");
request.addInput("Search", "on");
request.addInput("RecentChanges", "on");
request.addInput(PageData.PropertyPRUNE,"on");
request.addInput(PageData.PropertySECURE_READ, "on");
request.addInput(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://www.fitnesse.org");
request.addInput("Suites", "Suite A, Suite B");
request.addInput("HelpText", "Help text literal");
request.setResource("PageOne");
}
public void tearDown() throws Exception {
}
public void testClearChildrenWhenVWisCleared() throws Exception {
createSimpleVirtualLink();
// new request to get rid of the virtual wiki link
SavePropertiesResponder responder = new SavePropertiesResponder();
request = new MockRequest();
request.addInput(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "");
request.setResource("LinkerPage");
responder.makeResponse(new FitNesseContext(root), request);
assertEquals(0, linker.getChildren().size());
}
private WikiPage createSimpleVirtualLink() throws Exception {
WikiPage linkee = crawler.addPage(root, PathParser.parse("LinkeePage"));
crawler.addPage(linkee, PathParser.parse("ChildPageOne"));
WikiPage linkee2 = crawler.addPage(root, PathParser.parse("LinkeePageTwo"));
crawler.addPage(linkee2, PathParser.parse("ChildPageTwo"));
linker = crawler.addPage(root, PathParser.parse("LinkerPage"));
FitNesseUtil.bindVirtualLinkToPage(linker, linkee);
extension = (VirtualCouplingExtension) linker.getExtension(VirtualCouplingExtension.NAME);
List<?> children = extension.getVirtualCoupling().getChildren();
assertEquals(1, children.size());
WikiPage child = (WikiPage) children.get(0);
assertEquals("ChildPageOne", child.getName());
return linker;
}
public void testClearChildrenChangingVW() throws Exception {
createSimpleVirtualLink();
assertTrue(!(extension.getVirtualCoupling() instanceof NullVirtualCouplingPage));
// new request to get rid of the virtual wiki link
SavePropertiesResponder responder = new SavePropertiesResponder();
request = new MockRequest();
request.addInput(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://localhost:" + FitNesseUtil.port
+ "/LinkeePageTwo");
request.setResource("LinkerPage");
responder.makeResponse(new FitNesseContext(root), request);
assertTrue(extension.getVirtualCoupling() instanceof NullVirtualCouplingPage);
}
public void testResponse() throws Exception {
createRequest();
Responder responder = new SavePropertiesResponder();
Response response = responder.makeResponse(new FitNesseContext(root), request);
PageData data = page.getData();
assertEquals("http://www.fitnesse.org", data.getAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE));
assertTrue(data.hasAttribute("Test"));
assertTrue(data.hasAttribute("Properties"));
assertTrue(data.hasAttribute("Search"));
assertFalse(data.hasAttribute("Edit"));
assertTrue(data.hasAttribute("RecentChanges"));
assertTrue(data.hasAttribute(PageData.PropertySECURE_READ));
assertFalse(data.hasAttribute(PageData.PropertySECURE_WRITE));
assertTrue(data.hasAttribute(PageData.PropertyPRUNE));
assertEquals("Suite A, Suite B", data.getAttribute(PageData.PropertySUITES));
assertEquals("Help text literal", data.getAttribute(PageData.PropertyHELP));
assertEquals(303, response.getStatus());
assertEquals("PageOne", response.getHeader("Location"));
}
}