Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.xwiki.administration.test.po.AdministrationPage;
import org.xwiki.livedata.test.po.TableLayoutElement;
import org.xwiki.model.reference.DocumentReference;
Expand Down Expand Up @@ -56,6 +57,12 @@ class PanelIT

private static final String SPECIAL_TITLE = "Is # & \u0163 triky\"? c:windows /root $util";

private static final String PANELSIZE_SMALL = "Small";
private static final String PANELSIZE_MEDIUM = "Medium";
private static final String PANELSIZE_LARGE = "Large";
private static final String PANEL_FIELD_WIDTH_RIGHT = "rightPanelsWidth";
private static final String PANEL_FIELD_WIDTH_LEFT = "leftPanelsWidth";

@BeforeEach
void setUp(TestUtils testUtils)
{
Expand Down Expand Up @@ -174,6 +181,115 @@ void limitPanelViewRight(TestUtils testUtils, TestReference testReference)
testUtils.deletePage(new DocumentReference("xwiki", "Panels", SPECIAL_TITLE));
}

@Test
@Order(4)
void togglePanels(TestUtils testUtils, TestReference testReference) throws Exception {
testUtils.setWikiPreference("rightPanels", "Panels.QuickLinks");
testUtils.setWikiPreference("leftPanels", "Panels.Welcome");
testUtils.setWikiPreference("showRightPanels", "1");
testUtils.setWikiPreference("showLeftPanels", "1");
String testMethodName = testReference.getLastSpaceReference().getName();
String testClassName = testReference.getSpaceReferences().get(0).getName();
testUtils.gotoPage(testClassName, testMethodName);
PageWithPanels panelPage = new PageWithPanels();
// Check the initial state
assertTrue(panelPage.hasLeftPanels());
assertTrue(panelPage.hasRightPanels());
assertTrue(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertTrue(panelPage.panelIsToggled(PageWithPanels.RIGHT));
// Toggle the left panels ON and OFF
panelPage.togglePanel(PageWithPanels.LEFT);
assertFalse(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertTrue(panelPage.panelIsToggled(PageWithPanels.RIGHT));
panelPage.togglePanel(PageWithPanels.LEFT);
assertTrue(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertTrue(panelPage.panelIsToggled(PageWithPanels.RIGHT));
// Toggle the right panels OFF and ON
panelPage.togglePanel(PageWithPanels.RIGHT);
assertTrue(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertFalse(panelPage.panelIsToggled(PageWithPanels.RIGHT));
panelPage.togglePanel(PageWithPanels.RIGHT);
assertTrue(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertTrue(panelPage.panelIsToggled(PageWithPanels.RIGHT));
// Toggle both panels OFF at once
panelPage.togglePanel(PageWithPanels.LEFT);
panelPage.togglePanel(PageWithPanels.RIGHT);
assertFalse(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertFalse(panelPage.panelIsToggled(PageWithPanels.RIGHT));
// Reload the page to make sure the preference is kept in the localstorage
testUtils.getDriver().navigate().refresh();
assertFalse(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertFalse(panelPage.panelIsToggled(PageWithPanels.RIGHT));
panelPage.togglePanel(PageWithPanels.LEFT);
panelPage.togglePanel(PageWithPanels.RIGHT);
testUtils.getDriver().navigate().refresh();
assertTrue(panelPage.panelIsToggled(PageWithPanels.LEFT));
assertTrue(panelPage.panelIsToggled(PageWithPanels.RIGHT));
}

@Test
@Order(5)
void resizePanels(TestUtils testUtils, TestReference testReference) throws Exception {
testUtils.setWikiPreference("rightPanels", "Panels.QuickLinks");
testUtils.setWikiPreference("leftPanels", "Panels.Welcome");
testUtils.setWikiPreference("showRightPanels", "1");
testUtils.setWikiPreference("showLeftPanels", "1");
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_RIGHT, PANELSIZE_MEDIUM);
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_LEFT, PANELSIZE_MEDIUM);
String testMethodName = testReference.getLastSpaceReference().getName();
String testClassName = testReference.getSpaceReferences().get(0).getName();
testUtils.gotoPage(testClassName, testMethodName);
PageWithPanels panelPage = new PageWithPanels();
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Test that the defaults are respected.
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_RIGHT, PANELSIZE_SMALL);
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_LEFT, PANELSIZE_SMALL);
// Reload the page with the new preferences taken into account.
testUtils.gotoPage(testClassName, testMethodName);
panelPage = new PageWithPanels();
assertAlmostEqualSize(100, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(100, panelPage.getPanelWidth(PageWithPanels.RIGHT));
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_RIGHT, PANELSIZE_LARGE);
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_LEFT, PANELSIZE_LARGE);
// Reload the page with the new preferences taken into account.
testUtils.gotoPage(testClassName, testMethodName);
panelPage = new PageWithPanels();
assertAlmostEqualSize(300, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(300, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Check how the resize feature works.
panelPage.resizePanel(PageWithPanels.LEFT, -30);
panelPage.resizePanel(PageWithPanels.RIGHT, 30);
assertAlmostEqualSize(270, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(330, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Check if the user preferences are kept on page reload.
testUtils.gotoPage(testClassName, testMethodName);
panelPage = new PageWithPanels();
assertAlmostEqualSize(270, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(330, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Check if the user preferences are kept on page reload even when defaults have changed.
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_RIGHT, PANELSIZE_MEDIUM);
testUtils.setWikiPreference(PANEL_FIELD_WIDTH_LEFT, PANELSIZE_MEDIUM);
testUtils.gotoPage(testClassName, testMethodName);
panelPage = new PageWithPanels();
assertAlmostEqualSize(270, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(330, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Check that the user preferences are reset when toggling the panel off and on.
panelPage.togglePanel(PageWithPanels.RIGHT);
panelPage.togglePanel(PageWithPanels.RIGHT);
assertAlmostEqualSize(270, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.RIGHT));
// Check that the values are set to default if close enough to the default.
// The value does not snap to the default, but when reloading, the default will be applied
panelPage.resizePanel(PageWithPanels.LEFT, -60);
assertAlmostEqualSize(210, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.RIGHT));
testUtils.gotoPage(testClassName, testMethodName);
panelPage = new PageWithPanels();
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.LEFT));
assertAlmostEqualSize(200, panelPage.getPanelWidth(PageWithPanels.RIGHT));
}

private void setRightPanelInAdministration(String panelName)
{
AdministrationPage.gotoPage().clickSection("Look & Feel", "Panels");
Expand All @@ -187,4 +303,9 @@ private void setRightPanelInAdministration(String panelName)
}
panelsAdminPage.clickSave();
}

private void assertAlmostEqualSize(int expected, int actual) {
/* We allow a margin of 2px difference due to small inconsistencies in the driver operations. */
assertTrue(Math.abs(expected - actual) <= 2, "Expected " + expected + " but got " + actual);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@
*/
package org.xwiki.panels.test.po;

import java.util.Objects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.xwiki.test.ui.po.BasePage;

/**
Expand All @@ -30,6 +35,26 @@
*/
public class PageWithPanels extends BasePage
{
@FindBy(id = "rightPanels")
private WebElement rightPanels;

@FindBy(id = "leftPanels")
private WebElement leftPanels;

@FindBy(id = "rightPanelsToggle")
private WebElement rightPanelsToggle;

@FindBy(id = "leftPanelsToggle")
private WebElement leftPanelsToggle;

@FindBy(css = "#rightPanels .ui-resizable-handle")
private WebElement rightPanelsResizeHandle;

@FindBy(css = "#leftPanels .ui-resizable-handle")
private WebElement leftPanelsResizeHandle;
public static constant String RIGHT = "right";
public static constant String LEFT = "left";

/**
* @param panelTitle the panel title
* @return {@code true} if this page has the specified panel, {@code false} otherwise
Expand Down Expand Up @@ -61,4 +86,32 @@ public boolean hasPanelInLeftColumn(String panelName)
return getDriver().hasElementWithoutWaiting(
By.xpath("//div[@id = 'leftPanels']/div[contains(@class, '"+panelName+"')]"));
}

public boolean panelIsToggled(String panelSide) {
WebElement panelToggle = (Objects.equals(panelSide, RIGHT)) ? rightPanelsToggle : leftPanelsToggle;
return Objects.equals(panelToggle.getDomAttribute("aria-expanded"), "true")
|| Objects.equals(panelToggle.getDomAttribute("aria-expanded"), null);
}

public void togglePanel(String panelSide) {
WebElement panelToggle = (Objects.equals(panelSide, RIGHT)) ? rightPanelsToggle : leftPanelsToggle;
panelToggle.click();
}
public int getPanelWidth(String panelSide) {
WebElement panels = (Objects.equals(panelSide, RIGHT)) ?
rightPanels : leftPanels;
return panels.getSize().getWidth();
}
public void resizePanel(String panelSide, int panelSizeDiff) {
WebElement panelResizeHandle = (Objects.equals(panelSide, RIGHT)) ?
rightPanelsResizeHandle : leftPanelsResizeHandle;
// Define the drag and drop action
Actions action = new Actions(this.getDriver().getWrappedDriver());
action.clickAndHold(panelResizeHandle);
int panelSideInvert = Objects.equals(panelSide, RIGHT)? -1 : 1;
// We need to correct a bit the shift induced by the exact place where the handled is taken.
action.moveByOffset((panelSizeDiff + 6) * panelSideInvert, 0);
action.release();
action.perform();
}
}