class NumericalProblemTypeTest(ProblemTypeTestBase, ProblemTypeTestMixin): """ TestCase Class for Numerical Problem Type """ problem_name = 'NUMERICAL TEST PROBLEM' problem_type = 'numerical' factory = NumericalResponseXMLFactory() factory_kwargs = { 'question_text': 'The answer is pi + 1', 'answer': '4.14159', 'tolerance': '0.00001', 'math_display': True, } status_indicators = { 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered', 'div.unsubmitted'], } def setUp(self, *args, **kwargs): """ Additional setup for NumericalProblemTypeTest """ super(NumericalProblemTypeTest, self).setUp(*args, **kwargs) def answer_problem(self, correct): """ Answer numerical problem. """ textvalue = "pi + 1" if correct else str(random.randint(-2, 2)) self.problem_page.fill_answer(textvalue)
class NumericalProblemTypeBase(ProblemTypeTestBase): """ ProblemTypeTestBase specialization for Numerical Problem Type """ problem_name = 'NUMERICAL TEST PROBLEM' problem_type = 'numerical' partially_correct = False factory = NumericalResponseXMLFactory() factory_kwargs = { 'question_text': 'The answer is pi + 1', 'answer': '4.14159', 'tolerance': '0.00001', 'math_display': True, } status_indicators = { 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered', 'div.unsubmitted'], 'submitted': ['div.submitted'], 'unsubmitted': ['div.unsubmitted'] } def problem_status(self, status): """ Returns the status of problem Args: status(string): status of the problem which is to be checked Returns: True: If provided status is present on the page False: If provided status is not present on the page """ selector = ', '.join(self.status_indicators[status]) try: self.problem_page.wait_for_element_visibility(selector, 'Status not present', timeout=10) return True except BrokenPromise: return False def answer_problem(self, correctness): """ Answer numerical problem. """ textvalue = '' if correctness == 'correct': textvalue = "pi + 1" elif correctness == 'error': textvalue = 'notNum' else: textvalue = str(random.randint(-2, 2)) self.problem_page.fill_answer(textvalue) # lint-amnesty, pylint: disable=no-member
class NumericalProblemTypeBase(ProblemTypeTestBase): """ ProblemTypeTestBase specialization for Numerical Problem Type """ problem_name = 'NUMERICAL TEST PROBLEM' problem_type = 'numerical' partially_correct = False factory = NumericalResponseXMLFactory() factory_kwargs = { 'question_text': 'The answer is pi + 1', 'answer': '4.14159', 'tolerance': '0.00001', 'math_display': True, } status_indicators = { 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered', 'div.unsubmitted'], 'submitted': ['div.submitted'], } def answer_problem(self, correctness): """ Answer numerical problem. """ textvalue = '' if correctness == 'correct': textvalue = "pi + 1" elif correctness == 'error': textvalue = 'notNum' else: textvalue = str(random.randint(-2, 2)) self.problem_page.fill_answer(textvalue)
class NumericalProblemTypeTest(ProblemTypeTestBase, ProblemTypeTestMixin): """ TestCase Class for Numerical Problem Type """ problem_name = 'NUMERICAL TEST PROBLEM' problem_type = 'numerical' partially_correct = False factory = NumericalResponseXMLFactory() factory_kwargs = { 'question_text': 'The answer is pi + 1', 'answer': '4.14159', 'tolerance': '0.00001', 'math_display': True, } status_indicators = { 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered', 'div.unsubmitted'], } def setUp(self, *args, **kwargs): """ Additional setup for NumericalProblemTypeTest """ super(NumericalProblemTypeTest, self).setUp(*args, **kwargs) def answer_problem(self, correctness): """ Answer numerical problem. """ textvalue = '' if correctness == 'correct': textvalue = "pi + 1" elif correctness == 'error': textvalue = 'notNum' else: textvalue = str(random.randint(-2, 2)) self.problem_page.fill_answer(textvalue) def test_error_input_gentle_alert(self): """ Scenario: I can answer a problem with erroneous input and will see a gentle alert Given a Numerical Problem type I can input a string answer Then I will see a Gentle alert notification And focus will shift to that notification And clicking on "Review" moves focus to the problem meta area """ # Make sure we're looking at the right problem self.problem_page.wait_for( lambda: self.problem_page.problem_name == self.problem_name, "Make sure the correct problem is on the page" ) # Answer the problem with an erroneous input to cause a gentle alert self.assertFalse(self.problem_page.is_gentle_alert_notification_visible()) self.answer_problem(correctness='error') self.problem_page.click_submit() self.problem_page.wait_for_gentle_alert_notification() # Check that clicking on "Review" goes to the problem meta location self.problem_page.click_review_in_notification(notification_type='gentle-alert') self.problem_page.wait_for_focus_on_problem_meta()
'incorrect': ['label.choicegroup_incorrect', 'span.incorrect'], 'unanswered': ['span.unanswered'] }, 'string': { 'factory': StringResponseXMLFactory(), 'kwargs': { 'question_text': 'The answer is "correct string"', 'case_sensitive': False, 'answer': 'correct string' }, 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered'] }, 'numerical': { 'factory': NumericalResponseXMLFactory(), 'kwargs': { 'question_text': 'The answer is pi + 1', 'answer': '4.14159', 'tolerance': '0.00001', 'math_display': True }, 'correct': ['div.correct'], 'incorrect': ['div.incorrect'], 'unanswered': ['div.unanswered'] }, 'formula': { 'factory': FormulaResponseXMLFactory(), 'kwargs': { 'question_text': 'The solution is [mathjax]x^2+2x+y[/mathjax]', 'sample_dict': {