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 f59b2230822b0a84d2c92dd2dffebc19c682b602..eaba37bbb98b12081cd82b165e2864f3888a1ae0 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 c4a6321ec3b4f4aa072f8fe94e680c370044404f..39e513f6a9928bf0c5f7b669c8f77f6e8c79e17e 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 1b8ca459ceabff7a67c24da6844a77d7a5b25f6b..cbdf0a8dd70106d4e084d898b586dbe7e34917ec 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 08916ccfd0bc1e520e6fee9c87118de837bb3301..2339b63da0a4321d6f2e96cfb68ff57836d364f6 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; } }