From b0a04a1c554cad5e36fdfdeb82fad4fe3c656f57 Mon Sep 17 00:00:00 2001
From: jkraehemann <none@none>
Date: Mon, 10 Sep 2012 11:05:02 +0200
Subject: [PATCH] OO-297,OO-298: implemented generic code to create repository
 resource.

---
 .../course/nodes/cp/FunctionalCPTest.java     |  57 ++++--
 .../course/nodes/iq/FunctionalIQTestTest.java |   4 -
 .../course/nodes/wiki/FunctionalWikiTest.java |  57 ++++--
 .../org/olat/util/FunctionalCourseUtil.java   | 190 ++++++++++++++++--
 4 files changed, 264 insertions(+), 44 deletions(-)

diff --git a/src/test/java/org/olat/course/nodes/cp/FunctionalCPTest.java b/src/test/java/org/olat/course/nodes/cp/FunctionalCPTest.java
index f59b2230822..eaba37bbb98 100644
--- a/src/test/java/org/olat/course/nodes/cp/FunctionalCPTest.java
+++ b/src/test/java/org/olat/course/nodes/cp/FunctionalCPTest.java
@@ -19,6 +19,8 @@
  */
 package org.olat.course.nodes.cp;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -27,13 +29,17 @@ import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.olat.restapi.support.vo.CourseVO;
 import org.olat.test.ArquillianDeployments;
+import org.olat.util.FunctionalCourseUtil;
 import org.olat.util.FunctionalRepositorySiteUtil;
 import org.olat.util.FunctionalUtil;
 import org.olat.util.FunctionalVOUtil;
+import org.olat.util.FunctionalCourseUtil.CourseNodeAlias;
 
 import com.thoughtworks.selenium.DefaultSelenium;
 
@@ -43,6 +49,10 @@ import com.thoughtworks.selenium.DefaultSelenium;
  */
 @RunWith(Arquillian.class)
 public class FunctionalCPTest {
+	public final static String CP_LEARNING_CONTENT_SHORT_TITLE = "cp learning content";
+	public final static String CP_LEARNING_CONTENT_LONG_TITLE = "test cp learning content";
+	public final static String CP_LEARNING_CONTENT_DESCRIPTION = "learning content";
+	
 	@Deployment(testable = false)
 	public static WebArchive createDeployment() {
 		return ArquillianDeployments.createDeployment();
@@ -53,24 +63,47 @@ public class FunctionalCPTest {
 
 	@ArquillianResource
 	URL deploymentUrl;
+	
+	static FunctionalUtil functionalUtil;
+	static FunctionalRepositorySiteUtil functionalRepositorySiteUtil;
+	static FunctionalCourseUtil functionalCourseUtil;
+	static FunctionalVOUtil functionalVOUtil;
 
-	FunctionalUtil functionalUtil;
-	FunctionalVOUtil functionalVOUtil;
-	FunctionalRepositorySiteUtil functionalRepositorySiteUtil;
+	static boolean initialized = false;
 	
 	@Before
-	public void setup(){
-		functionalUtil = new FunctionalUtil();
-		functionalUtil.setDeploymentUrl(deploymentUrl.toString());
-		
-		functionalVOUtil = new FunctionalVOUtil(functionalUtil.getUsername(), functionalUtil.getPassword());
-		functionalRepositorySiteUtil = new FunctionalRepositorySiteUtil(functionalUtil);
-	}
+	public void setup() throws IOException, URISyntaxException{
+		if(!initialized){
+			functionalUtil = new FunctionalUtil();
+			functionalUtil.setDeploymentUrl(deploymentUrl.toString());
 
+			functionalRepositorySiteUtil = new FunctionalRepositorySiteUtil(functionalUtil);
+			functionalCourseUtil = new FunctionalCourseUtil(functionalUtil, functionalRepositorySiteUtil);
+
+			functionalVOUtil = new FunctionalVOUtil(functionalUtil.getUsername(), functionalUtil.getPassword());
+
+			initialized = true;
+		}
+	}
+	
 	@Test
 	@RunAsClient
-	public void checkCreate(){
-		//TODO:JK: implement me
+	public void checkCreate() throws URISyntaxException, IOException{
+		CourseVO course = functionalVOUtil.importEmptyCourse(deploymentUrl);
+		
+		/* login for test setup */
+		Assert.assertTrue(functionalUtil.login(browser, functionalUtil.getUsername(), functionalUtil.getPassword(), true));
+		
+		/*  */
+		Assert.assertTrue(functionalRepositorySiteUtil.openCourse(browser, course.getRepoEntryKey()));
+		Assert.assertTrue(functionalCourseUtil.openCourseEditor(browser));
 		
+		Assert.assertTrue(functionalCourseUtil.createCourseNode(browser, CourseNodeAlias.CP, CP_LEARNING_CONTENT_SHORT_TITLE, CP_LEARNING_CONTENT_LONG_TITLE, CP_LEARNING_CONTENT_DESCRIPTION, 0));
+		Assert.assertTrue(functionalCourseUtil.createCPLearningContent(browser, CP_LEARNING_CONTENT_SHORT_TITLE, CP_LEARNING_CONTENT_DESCRIPTION));
+		
+		Assert.assertTrue(functionalCourseUtil.publishEntireCourse(browser, null, null));
+		
+		Assert.assertTrue(functionalCourseUtil.open(browser, course.getRepoEntryKey(), 0));
 	}
+
 }
diff --git a/src/test/java/org/olat/course/nodes/iq/FunctionalIQTestTest.java b/src/test/java/org/olat/course/nodes/iq/FunctionalIQTestTest.java
index c4a6321ec3b..39e513f6a99 100644
--- a/src/test/java/org/olat/course/nodes/iq/FunctionalIQTestTest.java
+++ b/src/test/java/org/olat/course/nodes/iq/FunctionalIQTestTest.java
@@ -22,7 +22,6 @@ package org.olat.course.nodes.iq;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.List;
 
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.container.test.api.RunAsClient;
@@ -36,13 +35,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.olat.restapi.support.vo.CourseVO;
 import org.olat.test.ArquillianDeployments;
-import org.olat.user.restapi.UserVO;
 import org.olat.util.FunctionalCourseUtil;
 import org.olat.util.FunctionalCourseUtil.CourseNodeAlias;
-import org.olat.util.FunctionalHomeSiteUtil;
 import org.olat.util.FunctionalRepositorySiteUtil;
 import org.olat.util.FunctionalUtil;
-import org.olat.util.FunctionalUtil.OlatSite;
 import org.olat.util.FunctionalVOUtil;
 
 import com.thoughtworks.selenium.DefaultSelenium;
diff --git a/src/test/java/org/olat/course/nodes/wiki/FunctionalWikiTest.java b/src/test/java/org/olat/course/nodes/wiki/FunctionalWikiTest.java
index 1b8ca459cea..cbdf0a8dd70 100644
--- a/src/test/java/org/olat/course/nodes/wiki/FunctionalWikiTest.java
+++ b/src/test/java/org/olat/course/nodes/wiki/FunctionalWikiTest.java
@@ -19,6 +19,8 @@
  */
 package org.olat.course.nodes.wiki;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -27,13 +29,17 @@ import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.olat.restapi.support.vo.CourseVO;
 import org.olat.test.ArquillianDeployments;
+import org.olat.util.FunctionalCourseUtil;
 import org.olat.util.FunctionalRepositorySiteUtil;
 import org.olat.util.FunctionalUtil;
 import org.olat.util.FunctionalVOUtil;
+import org.olat.util.FunctionalCourseUtil.CourseNodeAlias;
 
 import com.thoughtworks.selenium.DefaultSelenium;
 
@@ -43,6 +49,11 @@ import com.thoughtworks.selenium.DefaultSelenium;
  */
 @RunWith(Arquillian.class)
 public class FunctionalWikiTest {
+	
+	public final static String WIKI_SHORT_TITLE = "wiki";
+	public final static String WIKI_LONG_TITLE = "test wiki";
+	public final static String WIKI_DESCRIPTION = "wiki";
+	
 	@Deployment(testable = false)
 	public static WebArchive createDeployment() {
 		return ArquillianDeployments.createDeployment();
@@ -54,23 +65,45 @@ public class FunctionalWikiTest {
 	@ArquillianResource
 	URL deploymentUrl;
 
-	FunctionalUtil functionalUtil;
-	FunctionalVOUtil functionalVOUtil;
-	FunctionalRepositorySiteUtil functionalRepositorySiteUtil;
+	static FunctionalUtil functionalUtil;
+	static FunctionalRepositorySiteUtil functionalRepositorySiteUtil;
+	static FunctionalCourseUtil functionalCourseUtil;
+	static FunctionalVOUtil functionalVOUtil;
+
+	static boolean initialized = false;
 	
 	@Before
-	public void setup(){
-		functionalUtil = new FunctionalUtil();
-		functionalUtil.setDeploymentUrl(deploymentUrl.toString());
-		
-		functionalVOUtil = new FunctionalVOUtil(functionalUtil.getUsername(), functionalUtil.getPassword());
-		functionalRepositorySiteUtil = new FunctionalRepositorySiteUtil(functionalUtil);
-	}
+	public void setup() throws IOException, URISyntaxException{
+		if(!initialized){
+			functionalUtil = new FunctionalUtil();
+			functionalUtil.setDeploymentUrl(deploymentUrl.toString());
+
+			functionalRepositorySiteUtil = new FunctionalRepositorySiteUtil(functionalUtil);
+			functionalCourseUtil = new FunctionalCourseUtil(functionalUtil, functionalRepositorySiteUtil);
+
+			functionalVOUtil = new FunctionalVOUtil(functionalUtil.getUsername(), functionalUtil.getPassword());
 
+			initialized = true;
+		}
+	}
+	
 	@Test
 	@RunAsClient
-	public void checkCreate(){
-		//TODO:JK: implement me
+	public void checkCreate() throws URISyntaxException, IOException{
+		CourseVO course = functionalVOUtil.importEmptyCourse(deploymentUrl);
+		
+		/* login for test setup */
+		Assert.assertTrue(functionalUtil.login(browser, functionalUtil.getUsername(), functionalUtil.getPassword(), true));
+		
+		/*  */
+		Assert.assertTrue(functionalRepositorySiteUtil.openCourse(browser, course.getRepoEntryKey()));
+		Assert.assertTrue(functionalCourseUtil.openCourseEditor(browser));
+		
+		Assert.assertTrue(functionalCourseUtil.createCourseNode(browser, CourseNodeAlias.WIKI, WIKI_SHORT_TITLE, WIKI_LONG_TITLE, WIKI_DESCRIPTION, 0));
+		Assert.assertTrue(functionalCourseUtil.createWiki(browser, WIKI_SHORT_TITLE, WIKI_DESCRIPTION));
+		
+		Assert.assertTrue(functionalCourseUtil.publishEntireCourse(browser, null, null));
 		
+		Assert.assertTrue(functionalCourseUtil.open(browser, course.getRepoEntryKey(), 0));
 	}
 }
diff --git a/src/test/java/org/olat/util/FunctionalCourseUtil.java b/src/test/java/org/olat/util/FunctionalCourseUtil.java
index 08916ccfd0b..2339b63da0a 100644
--- a/src/test/java/org/olat/util/FunctionalCourseUtil.java
+++ b/src/test/java/org/olat/util/FunctionalCourseUtil.java
@@ -61,7 +61,13 @@ public class FunctionalCourseUtil {
 	public final static String BLOG_FORM_CSS = "o_sel_blog_form";
 	
 	public final static String TEST_CHOOSE_REPOSITORY_FILE_CSS = "o_sel_test_choose_repofile";
-	public final static String TEST_CREATE_RESOURCE_CSS = "o_sel_repo_popup_create_resource";
+	public final static String CP_CHOOSE_REPOSITORY_FILE_CSS = "o_sel_cp_choose_repofile";
+	public final static String WIKI_CHOOSE_REPOSITORY_FILE_CSS = "o_sel_wiki_choose_repofile";
+	public final static String FEED_CHOOSE_REPOSITORY_FILE_CSS = "o_sel_feed_choose_repofile";
+	
+	public final static String REPOSITORY_POPUP_CREATE_RESOURCE_CSS = "o_sel_repo_popup_create_resource";
+	public final static String REPOSITORY_SAVE_DETAILS_CSS = "o_sel_repo_save_details";
+	public final static String REPOSITORY_ADD_FORWARD_CSS = "o_sel_repo_add_forward";
 	
 	public enum CourseNodeTab {
 		TITLE_AND_DESCRIPTION,
@@ -123,6 +129,11 @@ public class FunctionalCourseUtil {
 	}
 	
 	public enum CourseNodeAlias {
+		CP("o_cp_icon"),
+		BLOG("o_blog_icon"),
+		PODCAST("o_podcast_icon"),
+		WIKI("o_wiki_icon"),
+		PORTFOLIO_TASK("o_ep_icon"),
 		IQ_TEST("o_iqtest_icon"),
 		IQ_SELFTEST("o_iqself_icon"),
 		IQ_QUESTIONAIRE("o_iqsurv_icon");
@@ -171,6 +182,20 @@ public class FunctionalCourseUtil {
 		TEST_CONFIGURATION;
 	}
 	
+	public enum CourseEditorCpTab {
+		TITLE_AND_DESCRIPTION,
+		VISIBILITY,
+		ACCESS,
+		LEARNING_CONTENT;
+	}
+	
+	public enum CourseEditorWikiTab {
+		TITLE_AND_DESCRIPTION,
+		VISIBILITY,
+		ACCESS,
+		LEARNING_CONTENT;
+	}
+	
 	private String courseRunCss;
 	private String courseOpenEditorCss;
 	
@@ -200,7 +225,13 @@ public class FunctionalCourseUtil {
 	private String blogFormCss;
 	
 	private String testChooseRepositoryFileCss;
-	private String testCreateResourceCss;
+	private String cpChooseRepositoryFileCss;
+	private String wikiChooseRepositoryFileCss;
+	private String feedChooseRepositoryFileCss;
+	
+	private String repositoryPopupCreateResourceCss;
+	private String repositorySaveDetailsCss;
+	private String repositoryAddForwardCss;
 	
 	private FunctionalUtil functionalUtil;
 	private FunctionalRepositorySiteUtil functionalRepositorySiteUtil;
@@ -238,7 +269,13 @@ public class FunctionalCourseUtil {
 		setBlogFormCss(BLOG_FORM_CSS);
 		
 		setTestChooseRepositoryFileCss(TEST_CHOOSE_REPOSITORY_FILE_CSS);
-		setTestCreateResourceCss(TEST_CREATE_RESOURCE_CSS);
+		setCpChooseRepositoryFileCss(CP_CHOOSE_REPOSITORY_FILE_CSS);
+		setWikiChooseRepositoryFileCss(WIKI_CHOOSE_REPOSITORY_FILE_CSS);
+		setFeedChooseRepositoryFileCss(FEED_CHOOSE_REPOSITORY_FILE_CSS);
+		
+		setRepositoryPopupCreateResourceCss(REPOSITORY_POPUP_CREATE_RESOURCE_CSS);
+		setRepositorySaveDetailsCss(REPOSITORY_SAVE_DETAILS_CSS);
+		setRepositoryAddForwardCss(REPOSITORY_ADD_FORWARD_CSS);
 	}
 	
 	/**
@@ -789,21 +826,41 @@ public class FunctionalCourseUtil {
 	
 	/**
 	 * @param browser
+	 * @param tab
+	 * @return true on success
+	 * 
+	 * Opens the content package configurations appropriate tab.
+	 */
+	public boolean openCourseEditorCpTab(Selenium browser, CourseEditorCpTab tab){
+		return(functionalUtil.openContentTab(browser, tab.ordinal()));
+	}
+	
+	/**
+	 * @param browser
+	 * @param tab
+	 * @return true on success
+	 * 
+	 * Opens the wiki configurations appropriate tab.
+	 */
+	public boolean openCourseEditorWikiTab(Selenium browser, CourseEditorWikiTab tab){
+		return(functionalUtil.openContentTab(browser, tab.ordinal()));
+	}
+	
+	/**
+	 * @param browser
+	 * @param chooseRepositoryCss
 	 * @param title
 	 * @param description
 	 * @return true on success
 	 * 
-	 * Creates a new test.
+	 * Opens and fills in the "create resource" popup.
 	 */
-	public boolean createQTITest(Selenium browser, String title, String description){
-		if(!openCourseEditorIQTestTab(browser, CourseEditorIQTestTab.TEST_CONFIGURATION))
-			return(false);
-		
+	private boolean createRepositoryResource(Selenium browser, String chooseRepositoryCss, String title, String description){
 		/* click on "choose, create or import file" button */
 		StringBuffer selectorBuffer = new StringBuffer();
 
 		selectorBuffer.append("xpath=//a[contains(@class, '")
-		.append(getTestChooseRepositoryFileCss())
+		.append(chooseRepositoryCss)
 		.append("')]");
 		
 		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
@@ -813,7 +870,7 @@ public class FunctionalCourseUtil {
 		selectorBuffer = new StringBuffer();
 		
 		selectorBuffer.append("xpath=//a[contains(@class, '")
-		.append(getTestCreateResourceCss())
+		.append(getRepositoryPopupCreateResourceCss())
 		.append("')]");
 		
 		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
@@ -834,7 +891,9 @@ public class FunctionalCourseUtil {
 		/* click save */
 		selectorBuffer = new StringBuffer();
 		
-		selectorBuffer.append("xpath=(//div[contains(@class, 'b_window')]//form//div[contains(@class, 'o_sel_repo_save_details')]//button)[1]");
+		selectorBuffer.append("xpath=(//div[contains(@class, 'b_window')]//form//div[contains(@class, '")
+		.append(getRepositorySaveDetailsCss())
+		.append("')]//button)[1]");
 		
 		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 		
@@ -843,7 +902,9 @@ public class FunctionalCourseUtil {
 		/* click next */
 		selectorBuffer = new StringBuffer();
 		
-		selectorBuffer.append("xpath=//div[contains(@class, 'b_window')]//a[contains(@class, 'o_sel_repo_add_forward')]");
+		selectorBuffer.append("xpath=//div[contains(@class, 'b_window')]//a[contains(@class, '")
+		.append(getRepositoryAddForwardCss())
+		.append("')]");
 
 		functionalUtil.waitForPageToLoadElement(browser, selectorBuffer.toString());
 		
@@ -854,6 +915,63 @@ public class FunctionalCourseUtil {
 		return(true);
 	}
 	
+	/**
+	 * @param browser
+	 * @param title
+	 * @param description
+	 * @return true on success
+	 * 
+	 * Creates a new test.
+	 */
+	public boolean createQTITest(Selenium browser, String title, String description){
+		if(!openCourseEditorIQTestTab(browser, CourseEditorIQTestTab.TEST_CONFIGURATION))
+			return(false);
+		
+		if(!createRepositoryResource(browser, getTestChooseRepositoryFileCss(), title, description)){
+			return(false);
+		}
+				
+		return(true);
+	}
+	
+	/**
+	 * @param browser
+	 * @param title
+	 * @param description
+	 * @return true on success
+	 * 
+	 * Creates a new CP learning content.
+	 */
+	public boolean createCPLearningContent(Selenium browser, String title, String description){
+		if(!openCourseEditorCpTab(browser, CourseEditorCpTab.LEARNING_CONTENT))
+			return(false);
+		
+		if(!createRepositoryResource(browser, getCpChooseRepositoryFileCss(), title, description)){
+			return(false);
+		}
+				
+		return(true);
+	}
+	
+	/**
+	 * @param browser
+	 * @param title
+	 * @param description
+	 * @return true on success
+	 * 
+	 * Creates a new wiki.
+	 */
+	public boolean createWiki(Selenium browser, String title, String description){
+		if(!openCourseEditorWikiTab(browser, CourseEditorWikiTab.LEARNING_CONTENT))
+			return(false);
+		
+		if(!createRepositoryResource(browser, getWikiChooseRepositoryFileCss(), title, description)){
+			return(false);
+		}
+				
+		return(true);
+	}
+	
 	public FunctionalUtil getFunctionalUtil() {
 		return functionalUtil;
 	}
@@ -1043,12 +1161,52 @@ public class FunctionalCourseUtil {
 		this.testChooseRepositoryFileCss = testChooseRepositoryFileCss;
 	}
 
-	public String getTestCreateResourceCss() {
-		return testCreateResourceCss;
+	public String getCpChooseRepositoryFileCss() {
+		return cpChooseRepositoryFileCss;
+	}
+
+	public void setCpChooseRepositoryFileCss(String cpChooseRepositoryFileCss) {
+		this.cpChooseRepositoryFileCss = cpChooseRepositoryFileCss;
+	}
+
+	public String getWikiChooseRepositoryFileCss() {
+		return wikiChooseRepositoryFileCss;
+	}
+
+	public void setWikiChooseRepositoryFileCss(String wikiChooseRepositoryFileCss) {
+		this.wikiChooseRepositoryFileCss = wikiChooseRepositoryFileCss;
+	}
+
+	public String getFeedChooseRepositoryFileCss() {
+		return feedChooseRepositoryFileCss;
+	}
+
+	public void setFeedChooseRepositoryFileCss(String feedChooseRepositoryFileCss) {
+		this.feedChooseRepositoryFileCss = feedChooseRepositoryFileCss;
+	}
+
+	public String getRepositoryPopupCreateResourceCss() {
+		return repositoryPopupCreateResourceCss;
+	}
+
+	public void setRepositoryPopupCreateResourceCss(String repositoryPopupCreateResourceCss) {
+		this.repositoryPopupCreateResourceCss = repositoryPopupCreateResourceCss;
+	}
+
+	public String getRepositorySaveDetailsCss() {
+		return repositorySaveDetailsCss;
+	}
+
+	public void setRepositorySaveDetailsCss(String repositorySaveDetailsCss) {
+		this.repositorySaveDetailsCss = repositorySaveDetailsCss;
+	}
+
+	public String getRepositoryAddForwardCss() {
+		return repositoryAddForwardCss;
 	}
 
-	public void setTestCreateResourceCss(String testCreateResourceCss) {
-		this.testCreateResourceCss = testCreateResourceCss;
+	public void setRepositoryAddForwardCss(String repositoryAddForwardCss) {
+		this.repositoryAddForwardCss = repositoryAddForwardCss;
 	}
 	
 }
-- 
GitLab