/**
   * 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&section=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&section=TestSection1");
    assertElementNotPresent("//span[@class='xwikirenderingerror']");
  }
Example #7
0
  @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&section=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&section=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&section=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']");
  }