From 8d16c56e05bc5aeaee689ed0a839e6bf0d115eca Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 9 Mar 2020 21:26:29 +0100
Subject: [PATCH] no-jira: update selenium test

---
 ...CourseNodeDisplayConfigFormController.java | 28 ++------
 .../org/olat/selenium/AssessmentTest.java     | 10 +--
 .../org/olat/selenium/CourseElementTest.java  | 11 ++++
 .../java/org/olat/selenium/CourseTest.java    | 40 +++++++++---
 .../page/course/CoursePageFragment.java       |  4 --
 .../page/course/STConfigurationPage.java      | 64 +++++++++++++++++++
 6 files changed, 119 insertions(+), 38 deletions(-)
 create mode 100644 src/test/java/org/olat/selenium/page/course/STConfigurationPage.java

diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
index e5aea5b08b9..16502c0c6a9 100644
--- a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
+++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
@@ -22,7 +22,6 @@ package org.olat.course.nodes.st;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.FormUIFactory;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.SpacerElement;
@@ -104,37 +103,29 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 		updateUI();
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose()
-	 */
 	@Override
 	protected void doDispose() {
 	// nothing to dispose
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
 	@Override
 	protected void formOK(UserRequest ureq) {
 		// No explicit submit button. Form is submitted every time when a radio or
 		// checkbox is clicked (OLAT-5610)
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("config.fieldset.view");
 		setFormContextHelp("Knowledge Transfer#_struktur");
-		FormUIFactory formFact = FormUIFactory.getInstance();
+		formLayout.setElementCssClass("o_sel_st_overview_settings");
+	
 		// Display type
 		String[] displayTypeValues = new String[] { translate("form.system"), translate("form.peekview"), translate("form.self"),
 				translate("form.delegate") };
-		displayTypeRadios = formFact.addRadiosVertical("selforsystemoverview", formLayout, displayTypeKeys, displayTypeValues);
+		displayTypeRadios = uifactory.addRadiosVertical("selforsystemoverview", formLayout, displayTypeKeys, displayTypeValues);
 		displayTypeRadios.addActionListener(FormEvent.ONCLICK);
+		displayTypeRadios.setElementCssClass("o_sel_st_display_type");
 		if (displayConfig.equals(STCourseNodeEditController.CONFIG_VALUE_DISPLAY_FILE)) {
 			displayTypeRadios.select("file", true);
 		} else if (displayConfig.equals(STCourseNodeEditController.CONFIG_VALUE_DISPLAY_PEEKVIEW)) {
@@ -147,7 +138,7 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 		// Peekview details configuration - allow only MAX_PEEKVIEW_CHILD_NODES
 		// peekviews to be selected
 		if (selectedPeekviewChildKeys.length > 0) {
-			selectedPeekviewChildren = formFact.addCheckboxesVertical("selectedPeekviewChildren", formLayout,
+			selectedPeekviewChildren = uifactory.addCheckboxesVertical("selectedPeekviewChildren", formLayout,
 					selectedPeekviewChildKeys, selectedPeekviewChildValues, selectedPeekviewChildCssClasses, 1);
 			selectedPeekviewChildren.setLabel("selectedPeekviewChildren",
 					new String[] { STCourseNodeConfiguration.MAX_PEEKVIEW_CHILD_NODES + "" });
@@ -160,8 +151,8 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 		}
 	
 		// Number of rows (only available in system or peekview type)
-		spacerCols = formFact.addSpacerElement("spacerCols", formLayout, true);
-		displayTwoColumns = formFact.addCheckboxesHorizontal("displayTwoColumns", formLayout, new String[] { "on" }, new String[] { "" });
+		spacerCols = uifactory.addSpacerElement("spacerCols", formLayout, true);
+		displayTwoColumns = uifactory.addCheckboxesHorizontal("displayTwoColumns", formLayout, new String[] { "on" }, new String[] { "" });
 		displayTwoColumns.setLabel("displayTwoColumns", null);
 		displayTwoColumns.addActionListener(FormEvent.ONCLICK);
 	}
@@ -178,11 +169,6 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		super.formInnerEvent(ureq, source, event);
diff --git a/src/test/java/org/olat/selenium/AssessmentTest.java b/src/test/java/org/olat/selenium/AssessmentTest.java
index 25440e41db1..b5e133c951f 100644
--- a/src/test/java/org/olat/selenium/AssessmentTest.java
+++ b/src/test/java/org/olat/selenium/AssessmentTest.java
@@ -1727,11 +1727,11 @@ public class AssessmentTest extends Deployments {
 	public void taskOptionalWithIndividualScore(@Drone @User WebDriver ryomouBrowser)
 	throws IOException, URISyntaxException {
 						
-		UserVO author = new UserRestClient(deploymentUrl).createAuthor();
+		UserVO author = new UserRestClient(deploymentUrl).createRandomAuthor();
 		UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("kanu");
 		UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou");
 
-		LoginPage authorLoginPage = LoginPage.load(ryomouBrowser, deploymentUrl);
+		LoginPage authorLoginPage = LoginPage.load(browser, deploymentUrl);
 		authorLoginPage.loginAs(author.getLogin(), author.getPassword());
 		
 		//create a course
@@ -1746,6 +1746,7 @@ public class AssessmentTest extends Deployments {
 		String gtaNodeTitle = "Individual task 1";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
+		// default on root node -> select first child
 		courseEditor
 			.createNode("ita")
 			.nodeTitle(gtaNodeTitle);
@@ -1814,11 +1815,10 @@ public class AssessmentTest extends Deployments {
 			.openMyCourses()
 			.select(courseTitle);
 		
-		//go to the group task
+		//go to the group task with auto select first node
 		CoursePageFragment ryomouTestCourse = new CoursePageFragment(ryomouBrowser);
 		ryomouTestCourse
-			.clickTree()
-			.selectWithTitle(gtaNodeTitle);
+			.clickTree();
 		
 		GroupTaskPage ryomouTask = new GroupTaskPage(ryomouBrowser);
 		ryomouTask
diff --git a/src/test/java/org/olat/selenium/CourseElementTest.java b/src/test/java/org/olat/selenium/CourseElementTest.java
index 83d20f9af53..d724d235942 100644
--- a/src/test/java/org/olat/selenium/CourseElementTest.java
+++ b/src/test/java/org/olat/selenium/CourseElementTest.java
@@ -56,8 +56,10 @@ import org.olat.selenium.page.course.MemberListConfigurationPage;
 import org.olat.selenium.page.course.MemberListPage;
 import org.olat.selenium.page.course.MembersPage;
 import org.olat.selenium.page.course.ParticipantFolderPage;
+import org.olat.selenium.page.course.STConfigurationPage;
 import org.olat.selenium.page.course.SinglePage;
 import org.olat.selenium.page.course.SinglePageConfigurationPage;
+import org.olat.selenium.page.course.STConfigurationPage.DisplayType;
 import org.olat.selenium.page.forum.ForumPage;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.olat.selenium.page.repository.AuthoringEnvPage;
@@ -1086,6 +1088,15 @@ public class CourseElementTest extends Deployments {
 		String nodeTitle = "Members 2";
 		CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser)
 			.edit();
+		
+		courseEditor
+			.selectRoot();
+		
+		STConfigurationPage stConfig = new STConfigurationPage(browser);
+		stConfig
+			.selectOverview()
+			.setDisplay(DisplayType.peekview);
+		
 		courseEditor
 			.createNode("cmembers")
 			.nodeTitle(nodeTitle);
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index f33f377c7dc..7a1ee9ecece 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -57,6 +57,8 @@ import org.olat.selenium.page.course.CourseWizardPage;
 import org.olat.selenium.page.course.MembersPage;
 import org.olat.selenium.page.course.PublisherPageFragment;
 import org.olat.selenium.page.course.RemindersPage;
+import org.olat.selenium.page.course.STConfigurationPage;
+import org.olat.selenium.page.course.STConfigurationPage.DisplayType;
 import org.olat.selenium.page.graphene.OOGraphene;
 import org.olat.selenium.page.repository.AuthoringEnvPage;
 import org.olat.selenium.page.repository.AuthoringEnvPage.ResourceType;
@@ -258,8 +260,7 @@ public class CourseTest extends Deployments {
 		//open course editor
 		CoursePageFragment course = CoursePageFragment.getCourse(browser);
 		course
-			.assertOnCoursePage()
-			.assertOnTitle(title);
+			.assertOnCoursePage();
 		
 		//assert the 5 nodes are there and click them
 		By nodeBy = By.cssSelector("span.o_tree_link.o_tree_l1.o_tree_level_label_leaf>a");
@@ -477,6 +478,7 @@ public class CourseTest extends Deployments {
 			.assertOnTitle(changedNodeTitlev3);
 	}
 	
+	
 	/**
 	 * Test that renaming the root node is reflected after
 	 * publishing.
@@ -508,12 +510,22 @@ public class CourseTest extends Deployments {
 			.assertOnCoursePage()
 			.assertOnTitle(courseTitle)
 			.openToolsMenu()
-			.edit();
+			.edit()
+			.assertOnEditor()
+			.selectRoot();
+		
+		// configure the simplest overview
+		STConfigurationPage stConfig = new STConfigurationPage(browser);
+		stConfig
+			.selectOverview()
+			.setDisplay(DisplayType.system);
 		
+		String nodeTitle = "More informations";
 		//create a course element of type info messages
 		course = editor
-			.assertOnEditor()
+			
 			.createNode("info")
+			.nodeTitle(nodeTitle)
 			.autoPublish();
 		//check that the root node has the name of the repository entry
 		course
@@ -926,11 +938,21 @@ public class CourseTest extends Deployments {
 
 		//open course editor
 		CoursePageFragment course = new CoursePageFragment(browser);
-		RepositoryAccessPage courseAccess = course
+		CourseEditorPageFragment courseEditor = course
 			.openToolsMenu()
-			.edit()
+			.edit();
+		courseEditor
+			.selectRoot();
+		// configure the peekview
+		STConfigurationPage stConfig = new STConfigurationPage(browser);
+		stConfig
+			.selectOverview()
+			.setDisplay(DisplayType.peekview);
+		
+		course = courseEditor
 			.createNode("info")
-			.autoPublish()
+			.autoPublish();
+		RepositoryAccessPage courseAccess = course
 			.settings()
 			.accessConfiguration()
 			.setUserAccess(UserAccess.booking)
@@ -1020,12 +1042,14 @@ public class CourseTest extends Deployments {
 			.fillCreateCourseForm(title, false)
 			.assertOnInfos();
 
+		String infoMessageTitle = "Some informations";
 		//open course editor
 		CoursePageFragment course = new CoursePageFragment(browser);
 		RepositoryAccessPage courseAccess = course
 			.openToolsMenu()
 			.edit()
 			.createNode("info")
+			.nodeTitle(infoMessageTitle)
 			.autoPublish()
 			.settings()
 			.accessConfiguration()
@@ -1057,7 +1081,7 @@ public class CourseTest extends Deployments {
 		//check the course
 		CoursePageFragment bookedCourse = CoursePageFragment.getCourse(userBrowser);
 		bookedCourse
-			.assertOnTitle(title);
+			.assertOnTitle(infoMessageTitle);
 		
 		//Author go in the list of bookings of the course
 		BookingPage bookingList = course
diff --git a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
index a45dcb328a4..15bf5fea4ee 100644
--- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
@@ -89,10 +89,6 @@ public class CoursePageFragment {
 	public CoursePageFragment assertOnTitle(String displayName) {
 		By titleBy = By.xpath("//h2[text()[contains(.,'" + displayName + "')]]");
 		OOGraphene.waitElement(titleBy, browser);
-		
-		WebElement titleEl = browser.findElement(titleBy);
-		Assert.assertNotNull(titleEl);
-		Assert.assertTrue(titleEl.isDisplayed());
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/course/STConfigurationPage.java b/src/test/java/org/olat/selenium/page/course/STConfigurationPage.java
new file mode 100644
index 00000000000..4b60e38a344
--- /dev/null
+++ b/src/test/java/org/olat/selenium/page/course/STConfigurationPage.java
@@ -0,0 +1,64 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.selenium.page.course;
+
+import org.olat.selenium.page.graphene.OOGraphene;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+
+/**
+ * 
+ * Initial date: 9 mars 2020<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class STConfigurationPage {
+	
+	private final WebDriver browser;
+	
+	public STConfigurationPage(WebDriver browser) {
+		this.browser = browser;
+	}
+	
+	public STConfigurationPage selectOverview() {
+		By configBy = By.cssSelector("fieldset.o_sel_st_overview_settings");
+		OOGraphene.selectTab("o_node_config", configBy, browser);
+		return this;
+	}
+	
+	public STConfigurationPage setDisplay(DisplayType type) {
+		By displayTypeBy = By.xpath("//fieldset[contains(@class,'o_sel_st_overview_settings')]//div[contains(@class,'o_sel_st_display_type')]//input[@type='radio'][@value='" + type + "']");
+		OOGraphene.click(displayTypeBy, browser);
+		OOGraphene.waitBusy(browser);
+		
+		if(type == DisplayType.system || type == DisplayType.peekview) {
+			By displayTwoColumnsBy = By.xpath("//fieldset[contains(@class,'o_sel_st_overview_settings')]//input[@type='checkbox'][@name='displayTwoColumns']");
+			OOGraphene.waitElement(displayTwoColumnsBy, browser);	
+		}
+		return this;
+	}
+	
+	public enum DisplayType {
+		system,
+		peekview,
+		file,
+		delegate
+	}
+}
-- 
GitLab