// 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.refactoring;
import fitnesse.FitNesseContext;
import fitnesse.Responder;
import fitnesse.http.MockResponseSender;
import fitnesse.http.Response;
import fitnesse.responders.ResponderTestCase;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPagePath;
public class RenamePageResponderTest extends ResponderTestCase {
private WikiPagePath pageOnePath;
private WikiPagePath pageTwoPath;
private String pageOneName;
private String pageTwoName;
protected Responder responderInstance() {
return new RenamePageResponder();
}
public void setUp() throws Exception {
super.setUp();
pageOneName = "PageOne";
pageTwoName = "PageTwo";
pageOnePath = PathParser.parse(pageOneName);
pageTwoPath = PathParser.parse(pageTwoName);
}
public void testInvalidName() throws Exception {
String invalidName = "FirstName.SecondName";
String pageName = "MyPage";
crawler.addPage(root, PathParser.parse(pageName), "content");
Response response = doRename(pageName, invalidName, true);
assertHasRegexp("Cannot rename", getResponseContent(response));
}
public void testDontRenameFrontPage() throws Exception {
String frontPageName = "FrontPage";
crawler.addPage(root, PathParser.parse(frontPageName), "Content");
Response response = doRename(frontPageName, "ReNamed", true);
assertNotNull(response);
assertSubString("Cannot rename", getResponseContent(response));
}
public void testPageRedirection() throws Exception {
WikiPage pageOne = crawler.addPage(root, PathParser.parse("OneOne"), "Content");
crawler.addPage(pageOne, PathParser.parse("TwoOne"));
Response response = doRename("OneOne.TwoOne", "ReName", true);
assertNotNull(response);
assertEquals(303, response.getStatus());
assertEquals("OneOne.ReName", response.getHeader("Location"));
}
public void testPageWasRenamed() throws Exception {
String originalName = "OneOne";
WikiPagePath originalPath = PathParser.parse(originalName);
String renamedName = "WonWon";
WikiPagePath renamedPath = PathParser.parse(renamedName);
crawler.addPage(root, originalPath, "Content");
assertTrue(crawler.pageExists(root, originalPath));
assertFalse(crawler.pageExists(root, renamedPath));
doRename(originalName, renamedName, true);
assertTrue(crawler.pageExists(root, renamedPath));
assertFalse(crawler.pageExists(root, originalPath));
}
public void testReferencesChanged() throws Exception {
crawler.addPage(root, pageOnePath, "Line one\nPageTwo\nLine three");
crawler.addPage(root, pageTwoPath, "Page two content");
doRename(pageTwoName, "PageThree", true);
WikiPage pageOne = root.getChildPage(pageOneName);
assertEquals("Line one\nPageThree\nLine three", pageOne.getData().getContent());
}
public void testBackSearchReferencesChanged() throws Exception {
WikiPage topPage = crawler.addPage(root, PathParser.parse("TopPage"), "");
WikiPage pageOne = crawler.addPage(topPage, pageOnePath, "Line one\n<TopPage.PageTwo\nLine three");
crawler.addPage(topPage, pageTwoPath, "Page two content");
doRename("TopPage.PageTwo", "PageThree", true);
assertEquals("Line one\n<TopPage.PageThree\nLine three", pageOne.getData().getContent());
}
public void testReferencesNotChangedWhenDisabled() throws Exception {
crawler.addPage(root, pageOnePath, "Line one\nPageTwo\nLine three");
crawler.addPage(root, pageTwoPath, "Page two content");
doRename(pageTwoName, "PageThree", false);
WikiPage pageOne = root.getChildPage(pageOneName);
assertEquals("Line one\nPageTwo\nLine three", pageOne.getData().getContent());
}
public void testDontRenameToExistingPage() throws Exception {
crawler.addPage(root, pageOnePath, "Page one content");
crawler.addPage(root, pageTwoPath, "Page two content");
Response response = doRename(pageOneName, pageTwoName, true);
assertTrue(crawler.pageExists(root, pageOnePath));
assertTrue(crawler.pageExists(root, pageTwoPath));
assertEquals("Page two content", root.getChildPage(pageTwoName).getData().getContent());
assertSubString("Cannot rename", getResponseContent(response));
}
public void testChildPagesStayIntactWhenParentIsRenamed() throws Exception {
crawler.addPage(root, pageOnePath, "page one");
crawler.addPage(root, PathParser.parse("PageOne.ChildPage"), "child page");
crawler.addPage(root, PathParser.parse("PageOne.ChildPage.GrandChild"), "grand child");
doRename(pageOneName, pageTwoName, true);
WikiPagePath path = PathParser.parse("PageTwo.ChildPage");
assertTrue(crawler.pageExists(root, path));
WikiPage page = crawler.getPage(root, path);
assertNotNull(page);
assertEquals("child page", page.getData().getContent());
WikiPagePath grandChildPath = PathParser.parse("PageTwo.ChildPage.GrandChild");
assertTrue(crawler.pageExists(root, grandChildPath));
page = crawler.getPage(root, grandChildPath);
assertNotNull(page);
assertEquals("grand child", page.getData().getContent());
}
private String getResponseContent(Response response) throws Exception {
MockResponseSender sender = new MockResponseSender();
sender.doSending(response);
return sender.sentData();
}
private Response doRename(String fromName, String toName, boolean renameReferences) throws Exception {
request.setResource(fromName);
request.addInput("newName", toName);
if (renameReferences)
request.addInput("refactorReferences", "on");
return responder.makeResponse(new FitNesseContext(root), request);
}
}