# -*- coding: utf-8 -*- """ E2E tests for the LMS. """ import time from .helpers import UniqueCourseTest from ..pages.studio.auto_auth import AutoAuthPage from ..pages.lms.courseware import CoursewarePage from ..pages.lms.matlab_problem import MatlabProblemPage from ..fixtures.course import CourseFixture, XBlockFixtureDesc from ..fixtures.xqueue import XQueueResponseFixture from textwrap import dedent class MatlabProblemTest(UniqueCourseTest): """ Tests that verify matlab problem "Run Code". """ USERNAME = "STAFF_TESTER" EMAIL = "johndoe@example.com" def setUp(self): super(MatlabProblemTest, self).setUp() self.XQUEUE_GRADE_RESPONSE = None self.courseware_page = CoursewarePage(self.browser, self.course_id) # Install a course with sections/problems, tabs, updates, and handouts course_fix = CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'] ) problem_data = dedent("""

Write MATLAB code to create the following row vector and store it in a variable named V.

[1 1 2 3 5 8 13]

""") course_fix.add_children( XBlockFixtureDesc('chapter', 'Test Section').add_children( XBlockFixtureDesc('sequential', 'Test Subsection').add_children( XBlockFixtureDesc('problem', 'Test Matlab Problem', data=problem_data) ) ) ).install() # Auto-auth register for the course. AutoAuthPage(self.browser, username=self.USERNAME, email=self.EMAIL, course_id=self.course_id, staff=False).visit() def _goto_matlab_problem_page(self): """ Open matlab problem page with assertion. """ self.courseware_page.visit() matlab_problem_page = MatlabProblemPage(self.browser) self.assertEqual(matlab_problem_page.problem_name, 'TEST MATLAB PROBLEM') return matlab_problem_page def test_run_code(self): """ Test "Run Code" button functionality. """ # Enter a submission, which will trigger a pre-defined response from the XQueue stub. self.submission = "a=1" + self.unique_id[0:5] self.XQUEUE_GRADE_RESPONSE = {'msg': self.submission} matlab_problem_page = self._goto_matlab_problem_page() # Configure the XQueue stub's response for the text we will submit if self.XQUEUE_GRADE_RESPONSE is not None: XQueueResponseFixture(self.submission, self.XQUEUE_GRADE_RESPONSE).install() matlab_problem_page.set_response(self.submission) matlab_problem_page.click_run_code() self.assertEqual( u'Submitted. As soon as a response is returned, this message will be replaced by that feedback.', matlab_problem_page.get_grader_msg(".external-grader-message")[0] ) # Wait 5 seconds for xqueue stub server grader response sent back to lms. time.sleep(5) self.assertEqual(u'', matlab_problem_page.get_grader_msg(".external-grader-message")[0]) self.assertEqual( self.XQUEUE_GRADE_RESPONSE.get("msg"), matlab_problem_page.get_grader_msg(".ungraded-matlab-result")[0] )