From 1471dd54bb0d945226d41d3225f0650790553a98 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 17 Dec 2019 13:52:33 +0100
Subject: [PATCH] no-jira: update selenium tests for learn path

---
 .../org/olat/selenium/AssessmentTest.java     | 23 +++++++-
 .../org/olat/selenium/CourseElementTest.java  | 11 +++-
 .../java/org/olat/selenium/CourseTest.java    | 13 ++---
 .../java/org/olat/selenium/ImsQTI21Test.java  | 53 ++++++++++++++++++-
 .../page/course/CourseEditorPageFragment.java |  2 +-
 .../page/course/CoursePageFragment.java       | 20 ++++++-
 .../selenium/page/course/MembersPage.java     | 52 ++++++++++++++++++
 7 files changed, 158 insertions(+), 16 deletions(-)

diff --git a/src/test/java/org/olat/selenium/AssessmentTest.java b/src/test/java/org/olat/selenium/AssessmentTest.java
index 1450da951bf..7c2c403bc2b 100644
--- a/src/test/java/org/olat/selenium/AssessmentTest.java
+++ b/src/test/java/org/olat/selenium/AssessmentTest.java
@@ -127,8 +127,27 @@ public class AssessmentTest extends Deployments {
 			.quickPublish();
 		
 		//open the course and see the test start page
-		courseEditor
-			.clickToolbarBack()
+		CoursePageFragment course = courseEditor
+			.clickToolbarBack();
+		
+		// make the author a participant too
+		course
+			.members()
+			.selectMembers()
+			.openMembership(author.getFirstName())
+			.editRepositoryMembership(Boolean.TRUE)
+			.saveMembership()
+			.clickToolbarBack();
+		// close the course
+		course
+			.closeCourse();
+			
+		// reopen the course as participant (default)
+		navBar
+			.openAuthoringEnvironment()
+			.selectResource(courseTitle);
+		
+		course
 			.clickTree()
 			.selectWithTitle(testNodeTitle);
 		
diff --git a/src/test/java/org/olat/selenium/CourseElementTest.java b/src/test/java/org/olat/selenium/CourseElementTest.java
index 3f286918ad4..76913224840 100644
--- a/src/test/java/org/olat/selenium/CourseElementTest.java
+++ b/src/test/java/org/olat/selenium/CourseElementTest.java
@@ -185,7 +185,7 @@ public class CourseElementTest extends Deployments {
 		// publish the course
 		new RepositoryEditDescriptionPage(browser)
 			.clickToolbarBack();
-		CoursePageFragment.getCourse(browser)
+		CoursePageFragment course = CoursePageFragment.getCourse(browser)
 				.edit()
 				.autoPublish();
 		
@@ -194,6 +194,15 @@ public class CourseElementTest extends Deployments {
 			.back()
 			.assertOnStart();
 		
+		// make the author a participant too
+		course
+			.members()
+			.selectMembers()
+			.openMembership(author.getFirstName())
+			.editRepositoryMembership(Boolean.TRUE)
+			.saveMembership()
+			.clickToolbarBack();
+		
 		//log out
 		new UserToolsPage(browser)
 			.logout();
diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java
index 4e5499c33eb..b2559443a5d 100644
--- a/src/test/java/org/olat/selenium/CourseTest.java
+++ b/src/test/java/org/olat/selenium/CourseTest.java
@@ -247,18 +247,11 @@ public class CourseTest extends Deployments {
 			.nextCatalog()
 			.finish();
 		OOGraphene.closeBlueMessageWindow(browser);
-		
-		RepositorySettingsPage settings = new RepositorySettingsPage(browser);
-		//from description editor, back to details and launch the course
-		settings
-			.assertOnInfos();
-		settings	
-			.back();
-		
+
 		//open course editor
 		CoursePageFragment course = CoursePageFragment.getCourse(browser);
 		course
-			.assertOnCoursePage()
+			.assertOnLearnPath()
 			.assertOnTitle(title);
 		
 		//assert the 5 nodes are there and click them
@@ -266,7 +259,7 @@ public class CourseTest extends Deployments {
 		List<WebElement> nodes = browser.findElements(nodeBy);
 		Assert.assertEquals(5, nodes.size());
 		for(int i=0; i<5; i++) {
-			By linkBy = By.xpath("//div[contains(@class,'o_tree')]//li[" + (i+1) + "]/div/span[contains(@class,'o_tree_link')][contains(@class,'o_tree_l1')][contains(@class,'o_tree_level_label_leaf')]/a[span]");
+			By linkBy = By.xpath("//div[conains(@class,'o_tree')]//li[" + (i+1) + "]/div/span[contains(@class,'o_tree_link')][contains(@class,'o_tree_l1')][contains(@class,'o_tree_level_label_leaf')]/a[span]");
 			OOGraphene.waitElement(linkBy, browser);
 			browser.findElement(linkBy).click();
 			OOGraphene.waitBusy(browser);
diff --git a/src/test/java/org/olat/selenium/ImsQTI21Test.java b/src/test/java/org/olat/selenium/ImsQTI21Test.java
index 1c5213922b1..7c87f92ca21 100644
--- a/src/test/java/org/olat/selenium/ImsQTI21Test.java
+++ b/src/test/java/org/olat/selenium/ImsQTI21Test.java
@@ -588,10 +588,27 @@ public class ImsQTI21Test extends Deployments {
 			.publish()
 			.quickPublish();
 		
-		//open the course and see the CP
+		//open the course
 		CoursePageFragment course = courseEditor
 			.clickToolbarBack();
 		
+		// make the author a participant too
+		course
+			.members()
+			.selectMembers()
+			.openMembership(author.getFirstName())
+			.editRepositoryMembership(Boolean.TRUE)
+			.saveMembership()
+			.clickToolbarBack();
+		// close the course
+		course
+			.closeCourse();
+			
+		// reopen the course as participant (default)
+		navBar
+			.openAuthoringEnvironment()
+			.selectResource(courseTitle);
+		
 		course
 			.clickTree()
 			.selectWithTitle(testNodeTitle);
@@ -681,6 +698,23 @@ public class ImsQTI21Test extends Deployments {
 		CoursePageFragment course = courseEditor
 			.clickToolbarBack();
 		
+		// make the author a participant too
+		course
+			.members()
+			.selectMembers()
+			.openMembership(author.getFirstName())
+			.editRepositoryMembership(Boolean.TRUE)
+			.saveMembership()
+			.clickToolbarBack();
+		// close the course
+		course
+			.closeCourse();
+			
+		// reopen the course as participant (default)
+		navBar
+			.openAuthoringEnvironment()
+			.selectResource(courseTitle);
+		
 		course
 			.clickTree()
 			.selectWithTitle(testNodeTitle);
@@ -779,6 +813,23 @@ public class ImsQTI21Test extends Deployments {
 		CoursePageFragment course = courseEditor
 			.clickToolbarBack();
 		
+		// make the author a participant too
+		course
+			.members()
+			.selectMembers()
+			.openMembership(author.getFirstName())
+			.editRepositoryMembership(Boolean.TRUE)
+			.saveMembership()
+			.clickToolbarBack();
+		// close the course
+		course
+			.closeCourse();
+			
+		// reopen the course as participant (default)
+		navBar
+			.openAuthoringEnvironment()
+			.selectResource(courseTitle);
+		
 		course
 			.clickTree()
 			.selectWithTitle(testNodeTitle);
diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
index 3000d796055..670f29dac3f 100644
--- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java
@@ -525,7 +525,7 @@ public class CourseEditorPageFragment {
 	/**
 	 * Click the back button
 	 * 
-	 * @return
+	 * @return Itself
 	 */
 	public CoursePageFragment clickToolbarBack() {
 		browser.findElement(toolbarBackBy).click();
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 b91c8a784e7..3589a5ec017 100644
--- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
+++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java
@@ -79,9 +79,15 @@ public class CoursePageFragment {
 		return this;
 	}
 	
+	public CoursePageFragment assertOnLearnPath() {
+		By menuPathBy = By.cssSelector("div.o_tree.o_tree_root_visible.o_course_menu.o_lp_tree");
+		OOGraphene.waitElement(menuPathBy, browser);
+		return this;
+	}
+	
 	public CoursePageFragment assertOnTitle(String displayName) {
 		By titleBy = By.xpath("//h2[text()[contains(.,'" + displayName + "')]]");
-		OOGraphene.waitElement(titleBy, 5, browser);
+		OOGraphene.waitElement(titleBy, browser);
 		
 		WebElement titleEl = browser.findElement(titleBy);
 		Assert.assertNotNull(titleEl);
@@ -290,4 +296,16 @@ public class CoursePageFragment {
 		OOGraphene.waitElement(statusViewBy, browser);
 		return this;
 	}
+	
+	
+	/**
+	 * Close the course
+	 */
+	public CoursePageFragment closeCourse() {
+		By closeBy = By.cssSelector("ol.breadcrumb li.o_breadcrumb_close a");
+		OOGraphene.waitElement(closeBy, browser);
+		browser.findElement(closeBy).click();
+		OOGraphene.waitBusy(browser);
+		return this;
+	}
 }
diff --git a/src/test/java/org/olat/selenium/page/course/MembersPage.java b/src/test/java/org/olat/selenium/page/course/MembersPage.java
index 58c50605fdf..8d6d4d71d6c 100644
--- a/src/test/java/org/olat/selenium/page/course/MembersPage.java
+++ b/src/test/java/org/olat/selenium/page/course/MembersPage.java
@@ -168,6 +168,58 @@ public class MembersPage {
 			.finish();
 	}
 	
+	/**
+	 * @param name The name of the user
+	 * @return Itself
+	 */
+	public MembersPage openMembership(String name) {
+		By toolBy = By.xpath("//div//tr[td/a[text()[contains(.,'" + name+ "')]]]/td/a[i[contains(@class,'o_icon_actions')]]");
+		OOGraphene.waitElement(toolBy, browser);
+		browser.findElement(toolBy).click();
+		OOGraphene.waitCallout(browser);
+		
+		By editBy = By.xpath("//div[contains(@class,'popover')]//ul[contains(@class,'o_dropdown')]/li/a[contains(@onclick,'tbl_edit')]");
+		browser.findElement(editBy).click();
+		
+		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialog(browser);
+		return this;
+	}
+	
+	/**
+	 * 
+	 * @param participant true/false to change membership
+	 * @return Itself
+	 */
+	public MembersPage editRepositoryMembership(Boolean participant) {
+		if(participant != null) {
+			By participantBy = By.cssSelector(".o_sel_edit_permissions label input[name='repoRights'][type='checkbox'][value='participant']");
+			WebElement participantEl = browser.findElement(participantBy);
+			OOGraphene.check(participantEl, participant);
+			OOGraphene.waitBusy(browser);
+		}
+		return this;
+	}
+	
+	/**
+	 * Save the member ship of a user.
+	 * 
+	 * @return Itself
+	 */
+	public MembersPage saveMembership() {
+		By saveBy = By.cssSelector("div.modal-content div.o_button_group button.btn-primary");
+		browser.findElement(saveBy).click();
+		OOGraphene.waitBusy(browser);
+		
+		// confirm email
+		By confirmNoMailBy = By.xpath("//div[contains(@class,'modal-footer')]/a[contains(@onclick,'link_1')]");
+		OOGraphene.waitElement(confirmNoMailBy, browser);
+		browser.findElement(confirmNoMailBy).click();
+		OOGraphene.waitBusy(browser);
+		OOGraphene.waitModalDialogDisappears(browser);
+		return this;
+	}
+	
 	/**
 	 * Check if the user with the specified first name is in the member list.
 	 * @param user
-- 
GitLab