/** * Test functionality of the ForgotUsername page: * * <ul> * <li>A user can be found using correct email * <li>No user is found using wrong email * <li>Email text is properly escaped * </ul> */ @Test public void testForgotUsername() { String space = "Test"; String page = "SQLTestPage"; String mail = "*****@*****.**"; // default Admin mail String user = "******"; String badMail = "*****@*****.**"; // Ensure there is a page we will try to find using HQL injection editInWikiEditor(space, page); setFieldValue("title", page); setFieldValue("content", page); clickEditSaveAndView(); // test that it finds the correct user open("XWiki", "ForgotUsername"); setFieldValue("e", mail); submit("//input[@type='submit']"); // there are no other buttons assertTextNotPresent("No account is registered using this email address"); assertElementPresent("//div[@id='xwikicontent']//strong[text()='" + user + "']"); // test that bad mail results in no results open("XWiki", "ForgotUsername"); setFieldValue("e", badMail); submit("//input[@type='submit']"); // there are no other buttons assertTextPresent("No account is registered using this email address"); assertElementNotPresent("//div[@id='xwikicontent']//strong[@value='" + user + "']"); // XWIKI-4920 test that the email is properly escaped open("XWiki", "ForgotUsername"); setFieldValue("e", "a' synta\\'x error"); submit("//input[@type='submit']"); // there are no other buttons assertTextPresent("No account is registered using this email address"); assertTextNotPresent("Error"); }
public void assertConfigurationNotEditable(String space, String page) { assertElementNotPresent( "//div[@id='admin-page-content']/form[@action='/xwiki/bin/save/" + space + "/" + page + "']"); }
/* * Test to see an application page is included only if that application exists */ @Test public void testApplicationSection() { // Delete the Blog.Categories page and test it's not present in the admin global menu anymore deletePage("XWiki", "SearchAdmin"); clickAdministerWiki(); assertElementNotPresent( "//*[contains(@class, 'admin-menu')]//a[contains(@href, 'section=Search')]"); restorePage("XWiki", "SearchAdmin"); }
/* * If CodeToExecute is defined in a configurable app, then it should be evaluated. * Also header should be evaluated and not just printed. * If XWiki.ConfigurableClass is saved with programming rights, it should resave itself so that it doesn't have them. */ @Test public void testCodeToExecutionAndAutoSandboxing() { String space = "Main"; String page = "TestConfigurable"; String codeToExecute = "#set($code = 's sh')" + "Thi${code}ould be displayed." + "#if($xcontext.hasProgrammingRights())" + "This should not be displayed." + "#end"; String heading = "#set($code = 'his sho')" + "T${code}uld also be displayed."; createConfigurableApplication(space, page, "TestSection6", true); open(space, page, "edit", "editor=object"); expandObject("XWiki.ConfigurableClass", 0); setFieldValue("XWiki.ConfigurableClass_0_codeToExecute", codeToExecute); setFieldValue("XWiki.ConfigurableClass_0_heading", heading); setFieldValue("XWiki.ConfigurableClass_0_configurationClass", ""); clickEditSaveAndView(); // Our admin will foolishly save XWiki.ConfigurableClass, giving it programming rights. open("XWiki", "ConfigurableClass", "edit", "editor=wiki"); try { // Since we modify ConfigurableClass, we must modify it back after to prevent polluting // further tests. // See http://code.google.com/p/selenium/issues/detail?id=2876 . getDriver() .findElement(By.id("content")) .sendKeys( Keys.chord(Keys.CONTROL, "a"), Keys.chord(Keys.CONTROL, "c"), Keys.ARROW_RIGHT, "{{velocity}}Has Programming permission: $xcontext.hasProgrammingRights(){{/velocity}}"); clickEditSaveAndContinue(); // Now we look at the section for our configurable. open("XWiki", "ConfigurableClass", "view", "editor=globaladmin§ion=TestSection6"); assertTextPresent("This should be displayed."); assertTextPresent("This should also be displayed."); assertTextNotPresent("This should not be displayed."); assertTextPresent("Has Programming permission: false"); // Make sure javascript has not added a Save button. assertElementNotPresent("//div/div/p/span/input[@type='submit'][@value='Save']"); } finally { open("XWiki", "ConfigurableClass", "edit", "editor=wiki"); getDriver() .findElement(By.id("content")) .sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.chord(Keys.CONTROL, "v")); clickEditSaveAndContinue(); } }
/** * Test add configurable application to a nonexistent section. * * <p>This test depends on the "HopingThereIsNoSectionByThisName" section not existing.<br> * Tests: XWiki.ConfigurableClass */ @Test public void testAddConfigurableApplicationInNonexistantSection() { String section = "HopingThereIsNoSectionByThisName"; // Create the configurable for global admin. createConfigurableApplication("Main", "TestConfigurable", section, true); // Check it's available in global section. clickAdministerWiki(); waitForElement(getAdminMenuItemLocator(section)); clickLinkWithText(section); assertConfigurationPresent("Main", "TestConfigurable"); // Check that it's not available in space section. open("Main", "WebPreferences", "admin"); // Assert there is no menu item in the administration menu for our configurable application. assertElementNotPresent(getAdminMenuItemLocator(section)); }
/* * Proves that ConfigurationClass#codeToExecute is not rendered inline even if there is no * custom configuration class and the on;y content is custom content. * Tests: XWiki.ConfigurableClass */ @Test public void testCodeToExecuteNotInlineIfNoConfigurationClass() { String space = "Main"; String page = "TestConfigurable"; String test = "{{html}} <div> <p> hello </p> </div> {{/html}}"; open(space, page, "delete", "confirm=1"); createConfigurableApplication(space, page, "TestSection1", true); open(space, page, "edit", "editor=object"); expandObject("XWiki.ConfigurableClass", 0); setFieldValue("XWiki.ConfigurableClass_0_configurationClass", ""); setFieldValue("XWiki.ConfigurableClass_0_codeToExecute", test); clickEditSaveAndView(); open("XWiki", "XWikiPreferences", "admin", "editor=globaladmin§ion=TestSection1"); assertElementNotPresent("//span[@class='xwikirenderingerror']"); }
@Test public void testLogin() { beginAt("/default.jsp"); // Open the browser on // http://localhost:8080/test/home.xhtml assertTitleEquals("Movies"); assertElementPresent("janrainModal"); String element = getElementAttributeByXPath("//div[@id='janrainModal']", "style"); assertTrue(element.contains("display: none")); clickLink("login"); element = getElementAttributeByXPath("//div[@id='janrainModal']", "style"); assertTrue(element.contains("display: block")); assertElementPresent("janrain-yahoo"); clickElementByXPath("//li[@id='janrain-yahoo']"); assertWindowCountEquals(2); assertWindowPresentWithTitle("Sign in to Yahoo!"); gotoWindowByTitle("Sign in to Yahoo!"); setTextField("login", "*****@*****.**"); setTextField("passwd", "Test12345"); submit(".save"); try { Thread.sleep(20000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // beginAt("/default.jsp"); // gotoWindowByTitle("Movies"); assertTextPresent("Logout"); assertElementPresent("username"); IElement username = getElementById("username"); assertTrue(username.getTextContent().contains("movie hunter")); assertElementNotPresent("login"); assertElementPresent("logout"); clickLink("logout"); assertElementPresent("login"); }
/* * Proves that ConfigurationClass#codeToExecute is not rendered inline whether it's at the top of the * form or inside of the form. * Tests: XWiki.ConfigurableClass */ @Test public void testCodeToExecuteNotInline() { String space = "Main"; String page = "TestConfigurable"; String test = "{{html}} <div> <p> hello </p> </div> {{/html}}"; createConfigurableApplication(space, page, "TestSection1", true); open(space, page, "edit", "editor=object"); expandObject("XWiki.ConfigurableClass", 0); setFieldValue("XWiki.ConfigurableClass_0_codeToExecute", test); setFieldValue("XWiki.ConfigurableClass_0_propertiesToShow", "String, Boolean"); getSelenium().select("classname", "value=XWiki.ConfigurableClass"); clickButtonAndContinue("//input[@name='action_objectadd']"); setFieldValue("XWiki.ConfigurableClass_1_displayInSection", "TestSection1"); setFieldValue("XWiki.ConfigurableClass_1_configurationClass", space + "." + page); setFieldValue("XWiki.ConfigurableClass_1_propertiesToShow", "TextArea, Select"); setFieldValue("XWiki.ConfigurableClass_1_codeToExecute", test); getSelenium().check("XWiki.ConfigurableClass_1_configureGlobally"); clickEditSaveAndView(); open("XWiki", "XWikiPreferences", "admin", "editor=globaladmin§ion=TestSection1"); assertElementNotPresent("//span[@class='xwikirenderingerror']"); }
/* * Test Panel Wizard */ @Test public void testPanelsAdmin() { open("XWiki", "XWikiPreferences", "admin"); // test panel wizard at global level clickLinkWithLocator("//a[text()='Panel Wizard']"); waitForBodyContains("Page Layout"); clickLinkWithXPath("//a[@href='#PageLayoutSection']", false); waitForElement("//div[@id = 'rightcolumn']"); clickLinkWithXPath("//div[@id='rightcolumn']", false); waitForBodyContains("Panel List"); clickLinkWithXPath("//a[@href='#PanelListSection']", false); dragAndDrop( By.xpath("//div[@class='panel expanded CategoriesPanel']//h1"), By.id("rightPanels")); assertElementPresent("//div[@id = 'rightPanels']/div[contains(@class, 'CategoriesPanel')]"); clickLinkWithXPath("//button[text()='Save the new layout']", false); waitForNotificationSuccessMessage("The layout has been saved properly."); open("Main", "WebHome"); assertElementNotPresent("leftPanels"); assertElementPresent("rightPanels"); assertElementPresent("//div[@id = 'rightPanels']/div[contains(@class, 'CategoriesPanel')]"); // Revert changes open("XWiki", "XWikiPreferences", "admin"); clickLinkWithLocator("//a[text()='Panel Wizard']"); waitForBodyContains("Page Layout"); clickLinkWithXPath("//a[@href='#PageLayoutSection']", false); waitForCondition("selenium.isElementPresent(\"//div[@id='bothcolumns']\")!=false;"); clickLinkWithXPath("//div[@id='bothcolumns']", false); waitForBodyContains("Panel List"); clickLinkWithXPath("//a[@href='#PanelListSection']", false); dragAndDrop( By.xpath("//div[@id='rightPanels']//div[contains(@class, 'CategoriesPanel')]//h1"), By.xpath("//div[@id='allviewpanels']//div[@class='accordionTabContentBox']")); assertElementNotPresent("//div[@id = 'rightPanels']//div[contains(@class, 'CategoriesPanel')]"); clickLinkWithXPath("//button[text()='Save the new layout']", false); waitForNotificationSuccessMessage("The layout has been saved properly."); open("Main", "WebHome"); assertElementPresent("leftPanels"); assertElementPresent("rightPanels"); assertElementNotPresent("//div[@id = 'rightPanels']//div[contains(@class, 'CategoriesPanel')]"); // test panel wizard at space level open("TestPanelsAdmin", "WebHome", "edit", "editor=wiki"); setFieldValue("content", "aaa"); clickEditSaveAndView(); open("TestPanelsAdmin", "WebPreferences", "admin"); clickLinkWithLocator("//a[text()='Panel Wizard']"); waitForBodyContains("Page Layout"); clickLinkWithXPath("//a[@href='#PageLayoutSection']", false); waitForCondition("selenium.isElementPresent(\"//div[@id='leftcolumn']\")!=false;"); clickLinkWithXPath("//div[@id='leftcolumn']", false); waitForBodyContains("Panel List"); clickLinkWithXPath("//a[@href='#PanelListSection']", false); dragAndDrop( By.xpath("//div[@class='panel expanded CategoriesPanel']//h1"), By.id("leftPanels")); clickLinkWithXPath("//button[text()='Save the new layout']", false); waitForNotificationSuccessMessage("The layout has been saved properly."); open("TestPanelsAdmin", "WebHome"); assertElementPresent("leftPanels"); assertElementPresent("//div[@id = 'leftPanels']//div[contains(@class, 'CategoriesPanel')]"); open("XWiki", "WebHome"); assertElementPresent("rightPanels"); assertElementNotPresent("//div[@id = 'leftPanels']//div[contains(@class, 'CategoriesPanel')]"); }
/* * Will fail if it detects a configuration of the type created by createConfigurableApplication. * Tests: XWiki.ConfigurableClass */ public void assertConfigurationNotPresent(String space, String page) { assertElementNotPresent( "//div[@id='admin-page-content']/h1[@id='HCustomize" + space + "." + page + ":']/span"); assertElementNotPresent("//div[@id='admin-page-content']/h2[@id='HSomeHeading']/span"); assertConfigurationNotEditable(space, page); }
/* * Fails if there is an administration icon for the named section. * Must be in the administration app first. * Tests: XWiki.ConfigurableClass */ public void assertConfigurationIconNotPresent(String section) { assertElementNotPresent( "//div[contains(@class,'admin-menu')]//li[contains(@href,'section=" + section + "')]"); }
/* * Creates a document with 2 configurable objects, one gets configured globally in one section and displays * 2 configuration fields, the other is configured in the space in another section and displays the other 2 * fields. Fails if they are not displayed as they should be. * * Tests: XWiki.ConfigurableClass */ @Test public void testApplicationConfiguredInMultipleSections() { String space = "Main"; String page = "TestConfigurable"; createConfigurableApplication(space, page, "TestSection1", true); open(space, page, "edit", "editor=object"); // Add a second configurable object. getSelenium().select("classname", "value=XWiki.ConfigurableClass"); clickButtonAndContinue("//input[@name='action_objectadd']"); setFieldValue("XWiki.ConfigurableClass_1_displayInSection", "TestSection2"); setFieldValue("XWiki.ConfigurableClass_1_heading", "Some Other Heading"); setFieldValue("XWiki.ConfigurableClass_1_configurationClass", space + "." + page); getSelenium().uncheck("XWiki.ConfigurableClass_1_configureGlobally"); // Set propertiesToShow so that each config only shows half of the properties. setFieldValue("XWiki.ConfigurableClass_1_propertiesToShow", "TextArea, Select"); setFieldValue("XWiki.ConfigurableClass_0_propertiesToShow", "String, Boolean"); clickEditSaveAndView(); // Assert that half of the configuration shows up but not the other half. open("XWiki", "XWikiPreferences", "admin", "editor=globaladmin§ion=TestSection1"); assertElementPresent("//div[@id='admin-page-content']/h2[@id='HSomeHeading']/span"); // Fields String fullName = space + "." + page; String form = "//div[@id='admin-page-content']/form[@action='/xwiki/bin/save/" + space + "/" + page + "']"; assertElementPresent(form + "/fieldset//label['String']"); assertElementPresent(form + "/fieldset//input[@name='" + fullName + "_0_String']"); assertElementPresent(form + "/fieldset//label['Boolean']"); assertElementPresent(form + "/fieldset//select[@name='" + fullName + "_0_Boolean']"); assertElementPresent(form + "/fieldset/input[@id='" + fullName + "_redirect']"); // xredirect assertElementPresent( form + "/fieldset/input[@value='" + getSelenium().getLocation() + "'][@name='xredirect']"); // Save button // assertElementPresent(form + "/div/p/span/input[@type='submit']"); // Javascript injects a save button outside of the form and removes the default save button. waitForElement("//div/div/p/span/input[@type='submit'][@value='Save']"); // Should not be here assertElementNotPresent(form + "/fieldset//textarea[@name='" + fullName + "_0_TextArea']"); assertElementNotPresent(form + "/fieldset//select[@name='" + fullName + "_0_Select']"); // Now we go to where the other half of the configuration should be. open("Main", "WebPreferences", "admin", "editor=spaceadmin§ion=TestSection2"); assertElementPresent("//h2[@id='HSomeOtherHeading']/span"); // Fields assertElementPresent(form + "/fieldset//label"); assertElementPresent(form + "/fieldset//textarea[@name='" + fullName + "_0_TextArea']"); assertElementPresent(form + "/fieldset//select[@name='" + fullName + "_0_Select']"); assertElementPresent(form + "/fieldset/input[@id='" + fullName + "_redirect']"); // xredirect assertElementPresent( form + "/fieldset/input[@value='" + getSelenium().getLocation() + "'][@name='xredirect']"); // Save button // assertElementPresent(form + "/div/p/span/input[@type='submit']"); // Javascript injects a save button outside of the form and removes the default save button. waitForElement("//div/div/p/span/input[@type='submit'][@value='Save']"); // Should not be here assertElementNotPresent(form + "/fieldset//input[@name='" + fullName + "_0_String']"); assertElementNotPresent(form + "/fieldset//select[@name='" + fullName + "_0_Boolean']"); }