String templateProviderFullName = getTestClassName() + "." + templateProviderName;
ViewPage templateProviderView = createTemplate(templateProviderName, templateContent, templateTitle, false);
// Create the new document from template
CreatePagePage createPagePage = templateProviderView.createPage();
// Save the number of available templates so that we can make some checks later on.
int availableTemplateSize = createPagePage.getAvailableTemplateSize();
String templateInstanceName = TEMPLATE_NAME + "Instance";
WYSIWYGEditPage templateInstanceEditWysiwyg =
createPagePage.createPageFromTemplate(getTestClassName(), templateInstanceName, templateProviderFullName);
WikiEditPage templateInstanceEdit = templateInstanceEditWysiwyg.clickSaveAndView().editWiki();
// Verify template instance content
Assert.assertEquals(templateInstanceName, templateInstanceEdit.getTitle());
Assert.assertEquals(templateContent, templateInstanceEdit.getContent());
// check the parent of the template instance
Assert.assertEquals(templateProviderFullName, templateInstanceEdit.getParent());
// Put a wanted link in the template instance
templateInstanceEdit.setContent("[[NewPage]]");
ViewPage vp = templateInstanceEdit.clickSaveAndView();
// Verify that clicking on the wanted link pops up a box to choose the template.
vp.clickWantedLink(getTestClassName(), "NewPage", true);
List<WebElement> templates = getDriver().findElements(By.name("templateprovider"));
// Note: We need to remove 1 to exclude the "Empty Page" template entry
Assert.assertEquals(availableTemplateSize, templates.size() - 1);
Assert.assertTrue(createPagePage.getAvailableTemplates().contains(templateProviderFullName));
// Create a new page from template by going to a non-existing page
// And make sure we're on a non-existing page
Assert.assertFalse(getUtil().gotoPage(getTestClassName(), TEMPLATE_NAME + "UnexistingInstance").exists());
DocumentDoesNotExistPage unexistingPage = new DocumentDoesNotExistPage();
unexistingPage.clickEditThisPageToCreate();
// make sure we're in create mode
Assert.assertTrue(getUtil().isInCreateMode());
CreatePagePage createUnexistingPage = new CreatePagePage();
// count the available templates, make sure they're as many as before and that our template is among them
templates = getDriver().findElements(By.name("templateprovider"));
// Note: We need to remove 1 to exclude the "Empty Page" template entry
Assert.assertEquals(availableTemplateSize, templates.size() - 1);
Assert.assertTrue(createPagePage.getAvailableTemplates().contains(templateProviderFullName));
// select it
createUnexistingPage.setTemplate(templateProviderFullName);
// and create
createUnexistingPage.clickCreate();
WYSIWYGEditPage unexistingPageEditWysiwyg = new WYSIWYGEditPage();
WikiEditPage unexistingPageEdit = unexistingPageEditWysiwyg.clickSaveAndView().editWiki();
// Verify template instance content
Assert.assertEquals(TEMPLATE_NAME + "UnexistingInstance", unexistingPageEdit.getTitle());
Assert.assertEquals(templateContent, unexistingPageEdit.getContent());
// test that this page has no parent
Assert.assertEquals("", unexistingPageEdit.getParent());
// create an empty page when there is a template available, make sure it's empty
CreatePagePage createEmptyPage = new CreatePagePage();
createEmptyPage.gotoPage();
Assert.assertTrue(createEmptyPage.getAvailableTemplateSize() > 0);
WYSIWYGEditPage editEmptyPage = createEmptyPage.createPage(getTestClassName(), "EmptyPage");
Assert.assertTrue(getUtil().isInWYSIWYGEditMode());
// wait to load editor to make sure that what we're saving is the content that is supposed to be in this
// document
editEmptyPage.getContentEditor().waitToLoad();
ViewPage emptyPage = editEmptyPage.clickSaveAndView();
// make sure it's empty
Assert.assertEquals("", emptyPage.getContent());
// make sure parent is the right one
Assert.assertTrue(emptyPage.hasBreadcrumbContent("Wiki Home", false));
// mare sure title is the right one
Assert.assertEquals("EmptyPage", emptyPage.getDocumentTitle());
// Restrict the template to its own space
templateProviderView = getUtil().gotoPage(getTestClassName(), TEMPLATE_NAME + "Provider");
templateProviderView.editInline();
TemplateProviderInlinePage templateProviderInline = new TemplateProviderInlinePage();
List<String> allowedSpaces = new ArrayList<String>();
allowedSpaces.add(getTestClassName());
templateProviderInline.setSpaces(allowedSpaces);
templateProviderView = templateProviderInline.clickSaveAndView();
// Verify we can still create a page from template in the test space
createPagePage = templateProviderView.createPage();
// make sure we get in create mode
Assert.assertTrue(getUtil().isInCreateMode());
createPagePage = new CreatePagePage();
Assert.assertEquals(availableTemplateSize, createPagePage.getAvailableTemplateSize());
Assert.assertTrue(createPagePage.getAvailableTemplates().contains(templateProviderFullName));
// Modify the target space and verify the form can't be submitted
createPagePage.setTemplate(templateProviderFullName);
createPagePage.setSpace("Foobar");
String currentURL = getDriver().getCurrentUrl();
createPagePage.clickCreate();
Assert.assertEquals(currentURL, getDriver().getCurrentUrl());
// and check that an error is displayed to the user
createPagePage.waitForFieldErrorMessage();
// Verify the template we have removed is no longer available.
createEmptyPage.gotoPage();
// make sure that the template provider is not in the list of templates
Assert.assertFalse(createPagePage.getAvailableTemplates().contains(templateProviderFullName));
}