Index: TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java =================================================================== diff -u -r5e2faeb2334a4ad5942f20c89d44216847d70c5e -r30689cc12a6eb6c2f7683fe5514096fdc9c804a6 --- TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java (.../MockLearner.java) (revision 5e2faeb2334a4ad5942f20c89d44216847d70c5e) +++ TestHarness4LAMS2/src/org/lamsfoundation/testharness/learner/MockLearner.java (.../MockLearner.java) (revision 30689cc12a6eb6c2f7683fe5514096fdc9c804a6) @@ -95,8 +95,12 @@ private static final String KNOCK_GATE_SUBSTRING = "/lams/learning/gate.do?method=knockGate"; + private static final String ASSESSMENT_TOOL_SUBSTRING = "laasse10"; private static final Pattern ASSESSMENT_FINISH_PATTERN = Pattern .compile("'(/lams/tool/laasse10/learning/finish\\.do\\?.*)'"); + private static final String ASSESSMENT_HAS_EDIT_RIGHT_SUBSTRING = "hasEditRight=true"; + private static final Pattern ASSESSMENT_TOOL_SESSION_ID_PATTERN = Pattern.compile("data: 'toolSessionID=(\\d+)',"); + private static final String ASSESSMENT_FINISH_BUTTON_SUBSTRING = "return finishSession()"; private static final Pattern IMAGE_GALLERY_FINISH_PATTERN = Pattern .compile("'(/lams/tool/laimag10/learning/finish\\.do\\?.*)'"); @@ -160,6 +164,10 @@ int length = 1 + TestUtil.generateRandomNumber(MockLearner.ARBITRARY_TEXT_ALPHABET.length()); StringBuilder text = new StringBuilder(length); for (int i = 0; i < length; i++) { + // make the text split into words to comply with Assessment Tool validation + if ((i % 3) == 0) { + text.append(" "); + } text.append(MockLearner.ARBITRARY_TEXT_ALPHABET.charAt(TestUtil .generateRandomNumber(MockLearner.ARBITRARY_TEXT_ALPHABET.length()))); } @@ -376,6 +384,7 @@ WebForm form = null; String action = null; String asText = resp.getText(); + do { index++; if (index >= forms.length) { @@ -414,21 +423,16 @@ form.setAttribute("action", action + "&dispatch=viewAllResults"); } else if (asText.contains(MockLearner.WIKI_EDIT_BUTTON_STRING)) { form = handleToolWiki(form, action); + } else if (asText.contains(MockLearner.ASSESSMENT_TOOL_SUBSTRING)) { + return handleToolAssessment(resp, form); } nextResp = (WebResponse) new Call(wc, test, username + " submits tool form", fillFormArbitrarily(form)) .execute(); - // check if it is assessment activity - asText = nextResp.getText(); - Matcher m = MockLearner.ASSESSMENT_FINISH_PATTERN.matcher(asText); + Matcher m = MockLearner.SUBMIT_FILES_FINISH_PATTERN.matcher(asText); if (m.find()) { - nextResp = (WebResponse) new Call(wc, test, username + " finishes Assessment", m.group(1)).execute(); - } else { - m = MockLearner.SUBMIT_FILES_FINISH_PATTERN.matcher(asText); - if (m.find()) { - nextResp = (WebResponse) new Call(wc, test, username + " finishes Submit Files", m.group()).execute(); - } + nextResp = (WebResponse) new Call(wc, test, username + " finishes Submit Files", m.group()).execute(); } return nextResp; @@ -437,6 +441,10 @@ private WebResponse handlePageWithoutForms(WebResponse resp) throws SAXException, IOException { String asText = resp.getText(); + if (asText.contains("submitAll")) { + MockLearner.log.debug(asText); + } + if (asText.contains(MockLearner.LOAD_TOOL_ACTIVITY_FLAG)) { return handleLoadToolActivity(asText); } @@ -693,6 +701,63 @@ throw new TestHarnessException("Unable to finish the scratchie, no finish link found. " + asText); } + private WebResponse handleToolAssessment(WebResponse resp, WebForm form) throws SAXException, IOException { + String asText = resp.getText(); + // check if current user is the leader + boolean hasEditRights = asText.contains(MockLearner.ASSESSMENT_HAS_EDIT_RIGHT_SUBSTRING); + String finishURL = null; + Matcher m = MockLearner.ASSESSMENT_FINISH_PATTERN.matcher(asText); + if (m.find()) { + finishURL = m.group(1); + } else { + MockLearner.log.debug(asText); + throw new TestHarnessException("Finish URL was not found in Assessment Tool"); + } + + boolean canFinish = asText.contains(MockLearner.ASSESSMENT_FINISH_BUTTON_SUBSTRING); + if (hasEditRights) { + // this is a Leader or it is a non-Leader Assessmnt + while (!canFinish) { + WebResponse nextResp = (WebResponse) new Call(wc, test, username + " submits Assessment form", + fillFormArbitrarily(form)).execute(); + asText = nextResp.getText(); + // iterate through pages + canFinish = asText.contains(MockLearner.ASSESSMENT_FINISH_BUTTON_SUBSTRING); + } + } else { + String toolSessionID = null; + String checkLeaderProgressURL = null; + // read session map ID for the current user + m = MockLearner.ASSESSMENT_TOOL_SESSION_ID_PATTERN.matcher(asText); + if (m.find()) { + // prepare URLs + toolSessionID = m.group(1); + checkLeaderProgressURL = "/lams/tool/laasse10/learning/checkLeaderProgress.do?toolSessionID=" + + toolSessionID; + } else { + MockLearner.log.debug(asText); + throw new TestHarnessException("Tool Session ID was not found in Assessment Tool"); + } + + while (!canFinish) { + MockLearner.log.debug("Waiting for leader to finish Assessment"); + try { + // in normal browser flow learners wait 15 seconds too + Thread.sleep(15000); + } catch (InterruptedException e) { + MockLearner.log.error("Interrupted waiting between check Leader progress in Assessment"); + } + // the reply is JSON + WebResponse nextResp = (WebResponse) new Call(wc, test, username + + " checks Assessment if leader finished", checkLeaderProgressURL).execute(); + asText = nextResp.getText(); + canFinish = asText.contains("true"); + } + } + + return (WebResponse) new Call(wc, test, username + " finishes Assessment", finishURL).execute(); + } + private WebResponse handleToolShareResources(WebResponse resp, String initialRedirectLink) throws IOException, SAXException { WebResponse nextResponse = (WebResponse) new Call(wc, test, username + " forwarded to Share Resources", Index: lams_tool_assessment/web/pages/learning/learning.jsp =================================================================== diff -u -r442a09c392da6bdcbfec970a670a1c5bfe7e986d -r30689cc12a6eb6c2f7683fe5514096fdc9c804a6 --- lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision 442a09c392da6bdcbfec970a670a1c5bfe7e986d) +++ lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision 30689cc12a6eb6c2f7683fe5514096fdc9c804a6) @@ -35,6 +35,8 @@ + +