From 6813bbc36d533007ee2a37266e3e8c4f9b6fe4cc Mon Sep 17 00:00:00 2001 From: jkraehemann <none@none> Date: Thu, 13 Sep 2012 11:08:38 +0200 Subject: [PATCH] commit before merge --- .../org/olat/course/FunctionalCourseTest.java | 2 +- .../portfolio/FunctionalArtefactTest.java | 264 ++++++++++++++++-- .../olat/util/FunctionalEPortfolioUtil.java | 32 ++- 3 files changed, 268 insertions(+), 30 deletions(-) diff --git a/src/test/java/org/olat/course/FunctionalCourseTest.java b/src/test/java/org/olat/course/FunctionalCourseTest.java index c1fe7b9f7f4..ae299310e38 100644 --- a/src/test/java/org/olat/course/FunctionalCourseTest.java +++ b/src/test/java/org/olat/course/FunctionalCourseTest.java @@ -86,7 +86,7 @@ public class FunctionalCourseTest { @Test @RunAsClient - public void checkCreate(){ + public void checkCreateUsingWizard(){ /* login */ Assert.assertTrue(functionalUtil.login(browser, functionalUtil.getUsername(), functionalUtil.getPassword(), true)); diff --git a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java index 6dcfdc32e58..54e86a6180d 100644 --- a/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java +++ b/src/test/java/org/olat/portfolio/FunctionalArtefactTest.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; import java.util.List; import org.jboss.arquillian.container.test.api.Deployment; @@ -55,9 +56,11 @@ import com.thoughtworks.selenium.DefaultSelenium; */ @RunWith(Arquillian.class) public class FunctionalArtefactTest { + + /* content */ public final static String BINDER_PROGRAMMING_THEORIE = "programming (theorie)"; public final static String BINDER_PROGRAMMING_SAMPLES = "programming (code samples)"; - + public final static String FORUM_POST_TITLE = "question about multiplexing"; public final static String FORUM_POST_MESSAGE = "What multiplexing exists in operating systems?"; public final static String FORUM_ARTEFACT_TITLE = "multiplexing forum post"; @@ -66,7 +69,7 @@ public class FunctionalArtefactTest { public final static String FORUM_BINDER = BINDER_PROGRAMMING_THEORIE; public final static String FORUM_PAGE = "operating systems"; public final static String FORUM_STRUCTURE = "issue 1"; - + public final static String WIKI_ARTICLE_PAGENAME = "Multiplexing"; public final static String WIKI_ARTICLE_CONTENT = "==Time Multiplexing==\nscheduling a serially-reusable resource among several users\n\n==Space multiplexing==\ndividing a multiple-use resource up among several users"; public final static String WIKI_ARTEFACT_TITLE = "multiplexing wiki"; @@ -75,7 +78,7 @@ public class FunctionalArtefactTest { public final static String WIKI_BINDER = BINDER_PROGRAMMING_THEORIE; public final static String WIKI_PAGE = "operating systems"; public final static String WIKI_STRUCTURE = "issue 2"; - + public final static String BLOG_TITLE = "My Blog"; public final static String BLOG_DESCRIPTION = "Blog created with Selenium"; public final static String BLOG_POST_TITLE = "Multiplexing articles"; @@ -87,7 +90,7 @@ public class FunctionalArtefactTest { public final static String BLOG_BINDER = BINDER_PROGRAMMING_THEORIE; public final static String BLOG_PAGE = "operating systems"; public final static String BLOG_STRUCTURE = "issue 3"; - + public final static String TEXT_ARTEFACT_CONTENT = "Bufferbloat is a phenomenon in a packet-switched computer network whereby excess buffering of packets inside the network causes high latency and jitter, as well as reducing the overall network throughput."; public final static String TEXT_ARTEFACT_TITLE = "Definition bufferbloat"; public final static String TEXT_ARTEFACT_DESCRIPTION = "Definition bufferbloat"; @@ -95,7 +98,7 @@ public class FunctionalArtefactTest { public final static String TEXT_ARTEFACT_BINDER = BINDER_PROGRAMMING_THEORIE; public final static String TEXT_ARTEFACT_PAGE = "networking"; public final static String TEXT_ARTEFACT_STRUCTURE = "issue 1"; - + public final static String FILE_ARTEFACT_PATH = "/org/olat/portfolio/sfqcodel.cc"; public final static String FILE_ARTEFACT_TITLE = "CoDel"; public final static String FILE_ARTEFACT_DESCRIPTION = "CoDel Algorithm"; @@ -103,14 +106,14 @@ public class FunctionalArtefactTest { public final static String FILE_ARTEFACT_BINDER = BINDER_PROGRAMMING_SAMPLES; public final static String FILE_ARTEFACT_PAGE = "cpp"; public final static String FILE_ARTEFACT_STRUCTURE = "issue 1"; - + public final static String LEARNING_JOURNAL_TITLE = "Programming Topics"; public final static String LEARNING_JOURNAL_DESCRIPTION = "Some hot programming topics"; public final static String[] LEARNING_JOURNAL_TAGS = {"programming", "c", "c++"}; public final static String LEARNING_JOURNAL_BINDER = BINDER_PROGRAMMING_THEORIE; public final static String LEARNING_JOURNAL_PAGE = "journal"; public final static String LEARNING_JOURNAL_STRUCTURE = "2012/08/13"; - + @Deployment(testable = false) public static WebArchive createDeployment() { return ArquillianDeployments.createDeployment(); @@ -128,11 +131,12 @@ public class FunctionalArtefactTest { static FunctionalCourseUtil functionalCourseUtil; static FunctionalEPortfolioUtil functionalEportfolioUtil; static FunctionalVOUtil functionalVOUtil; - + static UserVO user; - + static List<Binder> map = new ArrayList<Binder>(); + static boolean initialized = false; - + @Before public void setup() throws IOException, URISyntaxException{ if(!initialized){ @@ -155,54 +159,201 @@ public class FunctionalArtefactTest { } } + Object[] prepareVerification(String binderName, String binderDescription, + String pageName, String pageDescription, + String structureName, String structureDescription, + String artefactName, String artefactDescription, String[] artefactTags, Object artefactContent){ + Binder binder = findBinderByName(this.map, binderName); + + if(binder == null){ + binder = new Binder(binderName, binderDescription); + this.map.add(binder); + } + + Binder.Page page = findPageByName(binder.page, pageName); + + if(page == null){ + page = binder.new Page(pageName, pageDescription); + binder.page.add(page); + } + + Binder.Page.Structure structure = findStructureByName(page.child, structureName); + + if(structure == null && structureName != null){ + structure = page.new Structure(structureName, structureDescription); + page.child.add(structure); + } + + Binder.Page.Artefact artefact = findArtefactByName(page.child, artefactName); + + if(artefact == null && structure != null){ + artefact = findArtefactByName(structure.child, artefactName); + } + + if(artefact == null){ + artefact = page.new Artefact(artefactName, artefactDescription, artefactTags, artefactContent); + + if(structure != null){ + structure.child.add(artefact); + }else{ + page.child.add(artefact); + } + } + + Object[] retval = new Object[]{binder, page, structure, artefact}; + + return(retval); + } + + Binder findBinderByName(List<Binder> binder, String name){ + if(name == null) + return(null); + + for(Binder current: binder){ + if(name.equals(current.name)){ + return(current); + } + } + + return(null); + } + + Binder.Page findPageByName(List<Binder.Page> page, String name){ + if(name == null) + return(null); + + for(Binder.Page current: page){ + if(name.equals(current.name)){ + return(current); + } + } + + return(null); + } + + Binder.Page.Artefact findArtefactByName(List<?> list, String name){ + if(name == null) + return(null); + + for(Object current: list){ + if(current instanceof Binder.Page.Artefact && name.equals(((Binder.Page.Artefact) current).name)){ + return((Binder.Page.Artefact) current); + } + } + + return(null); + } + + Binder.Page.Structure findStructureByName(List<?> list, String name){ + if(name == null) + return(null); + + for(Object current: list){ + if(current instanceof Binder.Page.Structure && name.equals(((Binder.Page.Structure) current).name)){ + return((Binder.Page.Structure) current); + } + } + + return(null); + } + + boolean checkArtefact(Binder.Page.Artefact artefact){ + + if(!functionalEportfolioUtil.openArtefactDetails(browser, user.getKey(), artefact.name)){ + return(false); + } + + //TODO:JK: implement me + return(true); + } + + boolean checkMap(Binder binder){ + //TODO:JK: implement me + return(true); + } + @Test @RunAsClient public void checkCollectForumPost() throws IOException, URISyntaxException{ + /* + * Prepare for verification + */ + Object[] retval = prepareVerification(FORUM_BINDER, null, + FORUM_PAGE, null, + FORUM_STRUCTURE, null, + FORUM_ARTEFACT_TITLE, FORUM_ARTEFACT_DESCRIPTION, FORUM_TAGS, null); + + Binder binder = (Binder) retval[0]; + Binder.Page page = (Binder.Page) retval[1]; + Binder.Page.Structure structure = (Binder.Page.Structure) retval[2]; + Binder.Page.Artefact artefact = (Binder.Page.Artefact) retval[3]; + + /* + * test case + */ /* deploy course with REST */ CourseVO course = functionalVOUtil.importCourseIncludingForum(deploymentUrl); - + /* login for test setup */ Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true)); - + /* create binder, page or structure if necessary */ Assert.assertTrue(functionalEportfolioUtil.createElements(browser, FORUM_BINDER, FORUM_PAGE, FORUM_STRUCTURE)); - + /* post message to forum */ Assert.assertTrue(functionalCourseUtil.postForumMessage(browser, course.getRepoEntryKey(), 0, FORUM_POST_TITLE, FORUM_POST_MESSAGE)); - + /* add artefact */ Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, FORUM_BINDER, FORUM_PAGE, FORUM_STRUCTURE, FORUM_ARTEFACT_TITLE, FORUM_ARTEFACT_DESCRIPTION, FORUM_TAGS, functionalEportfolioUtil)); + + /* + * Test for content and make assumptions if the changes were applied. + * Keep it simple use quick access with business paths. + */ + binder.ignore = false; + + page.ignore = false; + + structure.ignore = false; + + //TODO:JK: find a way to retrieve resourceable key + //artefact.content = new String(deploymentUrl.toString() + "/url/RepositoryEntry/" + course.getRepoEntryKey() + "/CourseNode/"); + artefact.ignore = false; + + /* verify */ + Assert.assertTrue(checkArtefact(artefact)); + Assert.assertTrue(checkMap(binder)); } - + @Test @RunAsClient public void checkCollectWikiArticle() throws URISyntaxException, IOException{ /* import wiki via rest */ RepositoryEntryVO vo = functionalVOUtil.importWiki(deploymentUrl); - + /* login for test setup */ Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true)); - + /* create binder, page or structure if necessary */ Assert.assertTrue(functionalEportfolioUtil.createElements(browser, WIKI_BINDER, WIKI_PAGE, WIKI_STRUCTURE)); - + /* create an article for the wiki */ Assert.assertTrue(functionalCourseUtil.createWikiArticle(browser, vo.getKey(), WIKI_ARTICLE_PAGENAME, WIKI_ARTICLE_CONTENT)); - + /* add artefact */ Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, WIKI_BINDER, WIKI_PAGE, WIKI_STRUCTURE, WIKI_ARTEFACT_TITLE, WIKI_ARTEFACT_DESCRIPTION, WIKI_TAGS, functionalEportfolioUtil)); } - + @Test @RunAsClient public void checkCollectBlogPost() throws URISyntaxException, IOException{ /* deploy course with REST */ CourseVO course = functionalVOUtil.importCourseIncludingBlog(deploymentUrl); - + /* login for test setup */ Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true)); @@ -212,26 +363,26 @@ public class FunctionalArtefactTest { /* blog */ Assert.assertTrue(functionalCourseUtil.createBlogEntry(browser, course.getRepoEntryKey(), 0, BLOG_POST_TITLE, BLOG_POST_DESCRIPTION, BLOG_POST_CONTENT)); - + /* add artefact */ Assert.assertTrue(functionalCourseUtil.addToEportfolio(browser, BLOG_BINDER, BLOG_PAGE, BLOG_STRUCTURE, BLOG_ARTEFACT_TITLE, BLOG_ARTEFACT_DESCRIPTION, BLOG_TAGS, functionalEportfolioUtil)); } - + @Test @RunAsClient public void checkAddTextArtefact(){ /* login for test setup */ Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true)); - + /* add text artefact */ Assert.assertTrue(functionalEportfolioUtil.addTextArtefact(browser, TEXT_ARTEFACT_BINDER, TEXT_ARTEFACT_PAGE, TEXT_ARTEFACT_STRUCTURE, TEXT_ARTEFACT_CONTENT, TEXT_ARTEFACT_TITLE, TEXT_ARTEFACT_DESCRIPTION, TEXT_ARTEFACT_TAGS)); } - + @Test @RunAsClient public void checkUploadFileArtefact() throws URISyntaxException, MalformedURLException{ @@ -244,18 +395,75 @@ public class FunctionalArtefactTest { FILE_ARTEFACT_TITLE, FILE_ARTEFACT_DESCRIPTION, FILE_ARTEFACT_TAGS)); } - + @Test @RunAsClient public void checkCreateLearningJournal(){ /* login for test setup */ Assert.assertTrue(functionalUtil.login(browser, user.getLogin(), user.getPassword(), true)); - + /* create learning journal */ Assert.assertTrue(functionalEportfolioUtil.createLearningJournal(browser, LEARNING_JOURNAL_BINDER, LEARNING_JOURNAL_PAGE, LEARNING_JOURNAL_STRUCTURE, LEARNING_JOURNAL_TITLE, LEARNING_JOURNAL_DESCRIPTION, LEARNING_JOURNAL_TAGS)); - + System.out.println(); } + + /** + * Description:<br/> + * Helper classes to verify interactions with openolat. + * + * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com + */ + class Binder{ + String name; + String description; + List<Page> page = new ArrayList<Page>(); + boolean ignore = true; + + Binder(String name, String description){ + this.name = name; + this.description = description; + } + + class Page{ + String name; + String description; + List child = new ArrayList(); + boolean ignore = true; + + Page(String name, String description){ + this.name = name; + this.description = description; + } + + class Structure{ + String name; + String description; + List<Artefact> child = new ArrayList<Artefact>(); + boolean ignore = true; + + Structure(String name, String description){ + this.name = name; + this.description = description; + } + } + + class Artefact{ + String name; + String description; + String[] tags; + Object content; /* in general a URL but for text artefact a String */ + boolean ignore = true; + + Artefact(String name, String description, String[] tags, Object content){ + this.name = name; + this.description = description; + this.tags = tags; + this.content = content; + } + } + } + } } diff --git a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java index 53e743c292f..15021f14f42 100644 --- a/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java +++ b/src/test/java/org/olat/util/FunctionalEPortfolioUtil.java @@ -40,6 +40,9 @@ import com.thoughtworks.selenium.Selenium; * @author jkraehemann, joel.kraehemann@frentix.com, frentix.com */ public class FunctionalEPortfolioUtil { + public final static String EP_ARTEFACTS_BUSINESS_PATH = "EPArtefacts"; + public final static String EP_MAPS_BUSINESS_PATH = "EPMaps"; + public final static String EPORTFOLIO_CSS = "b_eportfolio"; public final static String EPORTFOLIO_MAP_CSS = "b_eportfolio_map"; @@ -132,7 +135,34 @@ public class FunctionalEPortfolioUtil { setStructIconCss(STRUCT_ICON_CSS); } - + /** + * @param browser + * @param key + * @param artefactTitle + * @return + * + * + */ + public boolean openArtefactDetails(Selenium browser, Long key, String artefactTitle){ + String epArtefactsBusinessPath = functionalUtil.getDeploymentUrl().toString() + "/url/HomeSite/" + key + "/" + EP_ARTEFACTS_BUSINESS_PATH; + +// do{ +// browser.open(epArtefactsBusinessPath); +// }while(); + + //TODO:JK: implement me + + return(false); + } + + public boolean openBinder(Selenium browser, Long key, String binderTitle){ + String epMapsBusinessPath = functionalUtil.getDeploymentUrl().toString() + "/url/HomeSite/" + key + "/" + EP_MAPS_BUSINESS_PATH; + + //TODO:JK: implement me + + return(true); + } + /** * @param binder * @param page -- GitLab