public void testCreatePageWhenNoTemplateAvailable()
{
// prepare the test environment, create a test space and exclude all templates for this space
String space = this.getClass().getSimpleName();
// create the webhome of this space to make sure the space exists
WikiEditPage editTemplatePage = new WikiEditPage();
editTemplatePage.switchToEdit(space, "WebHome");
editTemplatePage.setTitle("Welcome to the templates test space");
editTemplatePage.setContent("You can have fun with templates here");
editTemplatePage.clickSaveAndView();
// we'll create all these pages during this test
getUtil().deletePage(space, "NewUnexistingPage");
getUtil().deletePage(space, "NewPage");
getUtil().deletePage(space, "NewLinkedPage");
// go through all the templates and make sure they are disabled on this space
TemplatesAdministrationSectionPage sectionPage = new TemplatesAdministrationSectionPage();
sectionPage.gotoPage();
// get the links to existing templates, navigate to each of them and disable the current space
List<String> spacesToExclude = new ArrayList<String>();
spacesToExclude.add(space);
List<WebElement> existingTemplatesLinks = sectionPage.getExistingTemplatesLinks();
for (int i = 0; i < existingTemplatesLinks.size(); i++) {
WebElement link = existingTemplatesLinks.get(i);
link.click();
ViewPage templateViewPage = new ViewPage();
templateViewPage.editInline();
TemplateProviderInlinePage providerEditPage = new TemplateProviderInlinePage();
providerEditPage.excludeSpaces(spacesToExclude);
providerEditPage.clickSaveAndView();
// go back to the admin page, to leave this in a valid state
sectionPage.gotoPage();
existingTemplatesLinks = sectionPage.getExistingTemplatesLinks();
}
// TODO: should reset these template settings at the end of the test, to leave things in the same state as they
// were at the beginning of the test
// and now start testing!
// 1/ create a page from the link in the page displayed when navigating to a non-existing page
Assert.assertFalse(getUtil().gotoPage(space, "NewUnexistingPage").exists());
DocumentDoesNotExistPage nonExistingPage = new DocumentDoesNotExistPage();
nonExistingPage.clickEditThisPageToCreate();
// make sure we're not in create mode anymore
Assert.assertFalse(getUtil().isInCreateMode());
// make sure we're directly in edit mode
Assert.assertTrue(getUtil().isInWYSIWYGEditMode());
// TODO: check that we're indeed in the edit mode of space.NewUnexitingPage
WYSIWYGEditPage editNewUnexistingPage = new WYSIWYGEditPage();
Assert.assertEquals(space, editNewUnexistingPage.getMetaDataValue("space"));
Assert.assertEquals("NewUnexistingPage", editNewUnexistingPage.getMetaDataValue("page"));
// 2/ create a page from the create menu on an existing page, by filling in space and name
ViewPage spaceHomePage = getUtil().gotoPage(space, "WebHome");
CreatePagePage createNewPage = spaceHomePage.createPage();
// we expect no templates available
Assert.assertEquals(0, createNewPage.getAvailableTemplateSize());
// fill in data and create the page
createNewPage.setSpace(space);
createNewPage.setPage("NewPage");
createNewPage.clickCreate();
// we expect to go to the edit mode of the new page
Assert.assertFalse(getUtil().isInCreateMode());
Assert.assertTrue(getUtil().isInWYSIWYGEditMode());
WYSIWYGEditPage editNewPage = new WYSIWYGEditPage();
Assert.assertEquals(space, editNewPage.getMetaDataValue("space"));
Assert.assertEquals("NewPage", editNewPage.getMetaDataValue("page"));
// 3/ create a page from a link in another page
// we're in edit mode of the newly created page from template
WYSIWYGEditPage editNewPageWysiwyg = new WYSIWYGEditPage();
// sometimes this fails to find the edit button, for a reason for which I don't understand...
WikiEditPage editNewPageWiki = editNewPageWysiwyg.clickSaveAndView().editWiki();
// put a link to the new page to create
editNewPageWiki.setContent("[[NewLinkedPage]]");
ViewPage newPage = editNewPageWiki.clickSaveAndView();
// no templates are available, so we don't expect a panel with a list of templates, we just expect it goes
// directly to edit mode of the new page
// it would be nice to be able to test here that the create page panel is not displayed, ever. However, we can't
// since we need to wait for that time, and we don't know how much is never.
newPage.clickWantedLink(space, "NewLinkedPage", false);