/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.wiki.test.ui; import org.junit.Rule; import org.junit.Test; import org.xwiki.test.ui.AbstractTest; import org.xwiki.test.ui.SuperAdminAuthenticationRule; import org.xwiki.test.ui.po.editor.WikiEditPage; import org.xwiki.wiki.test.po.CreateWikiPage; import org.xwiki.wiki.test.po.CreateWikiPageStepUser; import org.xwiki.wiki.test.po.DeleteWikiPage; import org.xwiki.wiki.test.po.WikiCreationPage; import org.xwiki.wiki.test.po.WikiHomePage; import org.xwiki.wiki.test.po.WikiIndexPage; import org.xwiki.wiki.test.po.WikiLink; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** * UI tests for the wiki templates feature of the Wiki application. * * @version $Id: 8a54036d63a770cdd4aba6e3106bbd3b8915296e $ * @since 6.0M1 */ public class WikiTemplateTest extends AbstractTest { @Rule public SuperAdminAuthenticationRule superAdminAuthenticationRule = new SuperAdminAuthenticationRule(getUtil()); private static final String TEMPLATE_WIKI_ID = "mynewtemplate"; private static final String TEMPLATE_CONTENT = "Content of the template"; private void createTemplateWiki() throws Exception { // Go to the wiki creation wizard WikiIndexPage wikiIndexPage = WikiIndexPage.gotoPage(); CreateWikiPage createWikiPage = wikiIndexPage.createWiki(); // Full the first step createWikiPage.setPrettyName("My new template"); String wikiName = createWikiPage.getComputedName(); assertEquals(TEMPLATE_WIKI_ID, wikiName); createWikiPage.setDescription("This is the template I do for the tests"); createWikiPage.setIsTemplate(true); assertTrue(createWikiPage.isNextStepEnabled()); // Second step CreateWikiPageStepUser createWikiPageStepUser = createWikiPage.goUserStep(); // Creation step WikiCreationPage wikiCreationPage = createWikiPageStepUser.create(); assertEquals("Wiki creation", wikiCreationPage.getStepTitle()); // Ensure there is no error in the log assertFalse(wikiCreationPage.hasLogError()); // Finalization WikiHomePage wikiHomePage = wikiCreationPage.finalizeCreation(); // Go to the created subwiki, and modify the home page content wikiHomePage.edit(); WikiEditPage wikiEditPage = new WikiEditPage(); wikiEditPage.setContent(TEMPLATE_CONTENT); wikiEditPage.clickSaveAndView(); wikiEditPage.waitUntilPageIsLoaded(); // Go back to the wiki creation wizard, and verify the template is in the list of templates in the wizard createWikiPage = wikiHomePage.createWiki(); assertTrue(createWikiPage.getTemplateList().contains("mynewtemplate")); // Verify the wiki is in the wiki index page. wikiIndexPage = WikiIndexPage.gotoPage().waitUntilPageIsLoaded(); WikiLink wikiLink = wikiIndexPage.getWikiLink("My new template"); if (wikiLink == null) { throw new Exception("The wiki [My new template] is not in the wiki index."); } assertTrue(wikiLink.getURL().endsWith("/xwiki/wiki/mynewtemplate/view/Main/")); } private void deleteTemplateWiki() throws Exception { // Go to the template wiki WikiIndexPage wikiIndexPage = WikiIndexPage.gotoPage().waitUntilPageIsLoaded(); WikiLink templateWikiLink = wikiIndexPage.getWikiLink("My new template"); if (templateWikiLink == null) { throw new Exception("The wiki [My new template] is not in the wiki index."); } DeleteWikiPage deleteWikiPage = wikiIndexPage.deleteWiki(TEMPLATE_WIKI_ID).confirm(TEMPLATE_WIKI_ID); assertTrue(deleteWikiPage.hasSuccessMessage()); // Verify the wiki has been deleted wikiIndexPage = WikiIndexPage.gotoPage().waitUntilPageIsLoaded(); assertNull(wikiIndexPage.getWikiLink("My new template")); } private void createWikiFromTemplate() { // Go to the wiki creation wizard WikiIndexPage wikiIndexPage = WikiIndexPage.gotoPage(); CreateWikiPage createWikiPage = wikiIndexPage.createWiki(); // First step createWikiPage.setPrettyName("My new wiki"); String wikiName = createWikiPage.getComputedName(); assertEquals("mynewwiki", wikiName); createWikiPage.setTemplate(TEMPLATE_WIKI_ID); createWikiPage.setIsTemplate(false); createWikiPage.setDescription("My first wiki"); // Second step CreateWikiPageStepUser createWikiPageStepUser = createWikiPage.goUserStep(); WikiCreationPage wikiCreationPage = createWikiPageStepUser.create(); assertEquals("Wiki creation", wikiCreationPage.getStepTitle()); // Wait for the finalize button to be displayed, with a 1 minute limit // (it's a lot but we often have problems on ci.xwiki.org). wikiCreationPage.waitForFinalizeButton(60); // Ensure there is no error in the log assertFalse(wikiCreationPage.hasLogError()); // Finalization WikiHomePage wikiHomePage = wikiCreationPage.finalizeCreation(); // Go the created subwiki and verify the content of the main page is the same than in the template assertEquals(wikiHomePage.getContent(), TEMPLATE_CONTENT); // Delete the wiki DeleteWikiPage deleteWikiPage = wikiHomePage.deleteWiki(); deleteWikiPage = deleteWikiPage.confirm(""); assertTrue(deleteWikiPage.hasUserErrorMessage()); assertTrue(deleteWikiPage.hasWikiDeleteConfirmationInput("")); deleteWikiPage = deleteWikiPage.confirm("My new wiki"); assertTrue(deleteWikiPage.hasUserErrorMessage()); assertTrue(deleteWikiPage.hasWikiDeleteConfirmationInput("My new wiki")); deleteWikiPage = deleteWikiPage.confirm("mynewwiki"); assertTrue(deleteWikiPage.hasSuccessMessage()); // Verify the wiki has been deleted wikiIndexPage = WikiIndexPage.gotoPage().waitUntilPageIsLoaded(); assertNull(wikiIndexPage.getWikiLink("My new wiki")); } @Test public void createWikiFromTemplateTest() throws Exception { // Create the template createTemplateWiki(); // Create the wiki from the template createWikiFromTemplate(); // Do it twice to check if we can create a wiki with the name of a deleted one createWikiFromTemplate(); // Delete the template wiki deleteTemplateWiki(); } }