Skip to content

Commit

Permalink
Merge pull request #110 from openstandia/MID-6085
Browse files Browse the repository at this point in the history
MID-6085 fix time change error in Internals configuration page
  • Loading branch information
skublik committed Mar 6, 2020
1 parent 19cfd1c commit 3429097
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 9 deletions.
Expand Up @@ -8,8 +8,10 @@

import javax.xml.datatype.XMLGregorianCalendar;

import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

Expand Down Expand Up @@ -47,6 +49,9 @@ protected void onInitialize() {
add(form);

DatePanel offset = new DatePanel(ID_OFFSET, getModel());
for (FormComponent<?> formComponent : offset.getFormComponents()) {
formComponent.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
}
form.add(offset);

AjaxSubmitButton saveButton = new AjaxSubmitButton(ID_BUTTON_SAVE, createStringResource("PageInternals.button.changeTime")) {
Expand Down
@@ -0,0 +1,61 @@
/**
* Copyright (c) 2010-2019 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.testing.schrodinger.page;

import com.evolveum.midpoint.schrodinger.component.configuration.ClockTab;
import com.evolveum.midpoint.schrodinger.page.configuration.InternalsConfigurationPage;
import com.evolveum.midpoint.testing.schrodinger.TestBase;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

/**
* @author Hiroyuki Wada
*/
public class InternalsConfigurationPageTest extends TestBase {

private InternalsConfigurationPage configPage;

@BeforeMethod
private void openPage() {
configPage = basicPage.internalsConfiguration();
}

@AfterClass
private void cleanup() {
// Reset time because TestBase#afterClass() doesn't reset the clock.
configPage = basicPage.internalsConfiguration();
configPage.clockTab().resetTime();
}

@Test
public void changeTime() {
ClockTab clockTab = configPage.clockTab();

clockTab.changeTime("5/15/2099", "10", "30", ClockTab.AmOrPmChoice.PM);

Assert.assertTrue(basicPage.feedback().isSuccess());

basicPage.aboutPage();
clockTab = basicPage.internalsConfiguration().clockTab();

Assert.assertEquals(clockTab.date(), "5/15/2099");
Assert.assertEquals(clockTab.hours(), "10");
Assert.assertEquals(clockTab.minutes(), "30");
Assert.assertEquals(clockTab.amOrPmChoice(), ClockTab.AmOrPmChoice.PM.name());
}

@Test
public void resetTime() {
ClockTab clockTab = configPage.clockTab();

clockTab.resetTime();

Assert.assertTrue(basicPage.feedback().isSuccess());
}
}
Expand Up @@ -6,17 +6,83 @@
*/
package com.evolveum.midpoint.schrodinger.component.configuration;

import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.evolveum.midpoint.schrodinger.MidPoint;
import com.evolveum.midpoint.schrodinger.component.Component;
import com.evolveum.midpoint.schrodinger.page.configuration.InternalsConfigurationPage;
import com.evolveum.midpoint.schrodinger.util.Schrodinger;

import static com.codeborne.selenide.Selenide.$;

/**
* Created by Viliam Repan (lazyman).
*/
public class ClockTab extends Component<InternalsConfigurationPage> {

public enum AmOrPmChoice {
AM, PM
}

public ClockTab(InternalsConfigurationPage parent, SelenideElement parentElement) {
super(parent, parentElement);
}

public void changeTime(String date, String hours, String minutes, AmOrPmChoice amOrPmChoice) {
SelenideElement dateEle = findDate();
dateEle.click();
dateEle.clear();
dateEle.setValue(date);

SelenideElement hoursEle = findHours();
hoursEle.doubleClick();
hoursEle.sendKeys(hours);

SelenideElement minutesEle = findMinutes();
minutesEle.doubleClick();
minutesEle.sendKeys(minutes);

SelenideElement amOrPmChoiceEle = findAmOrPmChoice();
amOrPmChoiceEle.click();
amOrPmChoiceEle.selectOption(amOrPmChoice.name());

$(Schrodinger.byDataId("save")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click();
}

public void resetTime() {
$(Schrodinger.byDataId("reset")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click();
}

public String date() {
return findDate().getValue();
}

public String hours() {
return findHours().getValue();
}

public String minutes() {
return findMinutes().getValue();
}

public String amOrPmChoice() {
return findAmOrPmChoice().getSelectedText();
}

private SelenideElement findDate() {
return $(Schrodinger.byDataId("date")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S);
}

private SelenideElement findHours() {
return $(Schrodinger.byDataId("hours")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S);
}

private SelenideElement findMinutes() {
return $(Schrodinger.byDataId("minutes")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S);
}

private SelenideElement findAmOrPmChoice() {
return $(Schrodinger.byDataId("amOrPmChoice")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S);
}
}

Expand Up @@ -308,7 +308,7 @@ public RoleManagementTab roleManagement() {
}

public InternalsConfigurationPage internalsConfiguration() {
clickConfigurationMenu("PageAdmin.menu.top.configuration.internals", null);
clickConfigurationMenu("PageAdmin.menu.top.configuration.internals", null, 1);
return new InternalsConfigurationPage();
}

Expand All @@ -335,7 +335,11 @@ public String getAdministrationMenuItemIconClass(String mainMenuKey, String menu
}

private void clickConfigurationMenu(String mainMenuKey, String menuItemKey) {
clickMenuItem("PageAdmin.menu.top.configuration", mainMenuKey, menuItemKey);
clickConfigurationMenu(mainMenuKey, menuItemKey, 0);
}

private void clickConfigurationMenu(String mainMenuKey, String menuItemKey, int index) {
clickMenuItem("PageAdmin.menu.top.configuration", mainMenuKey, menuItemKey, index);
}

public FeedbackBox<? extends BasicPage> feedback() {
Expand All @@ -344,11 +348,19 @@ public FeedbackBox<? extends BasicPage> feedback() {
}

private void clickMenuItem(String topLevelMenuKey, String mainMenuKey, String menuItemKey) {
getMenuItemElement(topLevelMenuKey, mainMenuKey, menuItemKey).click();
clickMenuItem(topLevelMenuKey, mainMenuKey, menuItemKey, 0);
}

public SelenideElement getMenuItemElement(String topLevelMenuKey, String mainMenuKey, String menuItemKey){
SelenideElement mainMenu = getMainMenuItemElement(topLevelMenuKey, mainMenuKey);
private void clickMenuItem(String topLevelMenuKey, String mainMenuKey, String menuItemKey, int index) {
getMenuItemElement(topLevelMenuKey, mainMenuKey, menuItemKey, index).click();
}

public SelenideElement getMenuItemElement(String topLevelMenuKey, String mainMenuKey, String menuItemKey) {
return getMenuItemElement(topLevelMenuKey, mainMenuKey, menuItemKey, 0);
}

public SelenideElement getMenuItemElement(String topLevelMenuKey, String mainMenuKey, String menuItemKey, int index){
SelenideElement mainMenu = getMainMenuItemElement(topLevelMenuKey, mainMenuKey, index);
if (menuItemKey == null){
return mainMenu;
}
Expand All @@ -369,7 +381,11 @@ public SelenideElement getMenuItemElementByMenuLabelText(String topLevelMenuKey,
return menuItem;
}

private SelenideElement getMainMenuItemElement(String topLevelMenuKey, String mainMenuKey){
private SelenideElement getMainMenuItemElement(String topLevelMenuKey, String mainMenuKey) {
return getMainMenuItemElement(topLevelMenuKey, mainMenuKey, 0);
}

private SelenideElement getMainMenuItemElement(String topLevelMenuKey, String mainMenuKey, int index){
SelenideElement topLevelMenu = $(Schrodinger.byDataResourceKey(topLevelMenuKey));
topLevelMenu.shouldBe(Condition.visible);

Expand All @@ -379,7 +395,7 @@ private SelenideElement getMainMenuItemElement(String topLevelMenuKey, String ma
topLevelMenuChevron.shouldHave(Condition.cssClass("fa-chevron-down")).waitUntil(Condition.cssClass("fa-chevron-down"), MidPoint.TIMEOUT_DEFAULT_2_S);
}

SelenideElement mainMenu = topLevelMenu.$(Schrodinger.byDataResourceKey(mainMenuKey));
SelenideElement mainMenu = topLevelMenu.$(Schrodinger.byDataResourceKey(mainMenuKey), index);
mainMenu.shouldBe(Condition.visible);

SelenideElement mainMenuLi = mainMenu.parent().parent();
Expand Down
Expand Up @@ -6,18 +6,23 @@
*/
package com.evolveum.midpoint.schrodinger.page.configuration;

import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.evolveum.midpoint.schrodinger.MidPoint;
import com.evolveum.midpoint.schrodinger.component.common.TabPanel;
import com.evolveum.midpoint.schrodinger.component.configuration.*;
import com.evolveum.midpoint.schrodinger.page.BasicPage;
import com.evolveum.midpoint.schrodinger.util.Schrodinger;

import static com.codeborne.selenide.Selenide.$;

/**
* Created by Viliam Repan (lazyman).
*/
public class InternalsConfigurationPage extends BasicPage {

public ClockTab clockTab() {
//todo implement
SelenideElement element = null;
SelenideElement element = findTabPanel().clickTab("PageInternals.tab.clock");
return new ClockTab(this, element);
}

Expand All @@ -44,4 +49,10 @@ public CountersTab countersTab() {
SelenideElement element = null;
return new CountersTab(this, element);
}

protected TabPanel findTabPanel() {
SelenideElement tabPanelElement = $(Schrodinger.byDataId("div", "tabPanel"))
.waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S);
return new TabPanel<>(this, tabPanelElement);
}
}

0 comments on commit 3429097

Please sign in to comment.