Wrote lettuce tests for drop-down, multiple choice, and checkbox
problems.
This commit is contained in:
79
lms/djangoapps/courseware/features/problems.py
Normal file
79
lms/djangoapps/courseware/features/problems.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from lettuce import world, step
|
||||
from lettuce.django import django_url
|
||||
from selenium.webdriver.support.ui import Select
|
||||
from common import i_am_registered_for_the_course
|
||||
|
||||
problem_urls = { 'drop down': '/courses/edX/model_course/2013_Spring/courseware/Problem_Components/Drop_Down_Problems',
|
||||
'multiple choice': '/courses/edX/model_course/2013_Spring/courseware/Problem_Components/Multiple_Choice_Problems',
|
||||
'checkbox': '/courses/edX/model_course/2013_Spring/courseware/Problem_Components/Checkbox_Problems', }
|
||||
|
||||
@step(u'I am viewing a "([^"]*)" problem')
|
||||
def view_problem(step, problem_type):
|
||||
i_am_registered_for_the_course(step, 'edX/model_course/2013_Spring')
|
||||
url = django_url(problem_urls[problem_type])
|
||||
world.browser.visit(url)
|
||||
|
||||
@step(u'I answer a "([^"]*)" problem "([^"]*)ly"')
|
||||
def answer_problem(step, problem_type, correctness):
|
||||
assert(correctness in ['correct', 'incorrect'])
|
||||
|
||||
if problem_type == "drop down":
|
||||
select_name = "input_i4x-edX-model_course-problem-Drop_Down_Problem_2_1"
|
||||
option_text = 'Option 2' if correctness == 'correct' else 'Option 3'
|
||||
world.browser.select(select_name, option_text)
|
||||
|
||||
elif problem_type == "multiple choice":
|
||||
if correctness == 'correct':
|
||||
world.browser.find_by_css("#input_i4x-edX-model_course-problem-Multiple_Choice_Problem_2_1_choice_choice_3").check()
|
||||
else:
|
||||
world.browser.find_by_css("#input_i4x-edX-model_course-problem-Multiple_Choice_Problem_2_1_choice_choice_2").check()
|
||||
|
||||
elif problem_type == "checkbox":
|
||||
if correctness == 'correct':
|
||||
world.browser.find_by_css('#input_i4x-edX-model_course-problem-Checkbox_Problem_2_1_choice_0').check()
|
||||
world.browser.find_by_css('#input_i4x-edX-model_course-problem-Checkbox_Problem_2_1_choice_2').check()
|
||||
else:
|
||||
world.browser.find_by_css('#input_i4x-edX-model_course-problem-Checkbox_Problem_2_1_choice_3').check()
|
||||
|
||||
check_problem(step)
|
||||
|
||||
@step(u'I check a problem')
|
||||
def check_problem(step):
|
||||
world.browser.find_by_css("input.check").click()
|
||||
|
||||
@step(u'I reset the problem')
|
||||
def reset_problem(step):
|
||||
world.browser.find_by_css('input.reset').click()
|
||||
|
||||
@step(u'My "([^"]*)" answer is marked "([^"]*)"')
|
||||
def assert_answer_mark(step, problem_type, correctness):
|
||||
assert(correctness in ['correct', 'incorrect', 'unanswered'])
|
||||
|
||||
if problem_type == "multiple choice":
|
||||
if correctness == 'unanswered':
|
||||
mark_classes = ['.choicegroup_correct', '.choicegroup_incorrect',
|
||||
'.correct', '.incorrect']
|
||||
for css in mark_classes:
|
||||
assert(world.browser.is_element_not_present_by_css(css))
|
||||
|
||||
else:
|
||||
if correctness == 'correct':
|
||||
mark_class = '.choicegroup_correct'
|
||||
assert(world.browser.is_element_present_by_css(mark_class, wait_time=4))
|
||||
|
||||
else:
|
||||
# Two ways to be marked incorrect: either applying a
|
||||
# class to the label (marking a particular option)
|
||||
# or applying a class to a span (marking the whole problem incorrect)
|
||||
mark_classes = ['.choicegroup_incorrect', '.incorrect']
|
||||
assert(world.browser.is_element_present_by_css(mark_classes[0], wait_time=4) or
|
||||
world.browser.is_element_present_by_css(mark_classes[1], wait_time=4))
|
||||
|
||||
else:
|
||||
if correctness == 'unanswered':
|
||||
assert(world.browser.is_element_not_present_by_css('.correct'))
|
||||
assert(world.browser.is_element_not_present_by_css('.incorrect'))
|
||||
|
||||
else:
|
||||
mark_class = '.correct' if correctness == 'correct' else '.incorrect'
|
||||
assert(world.browser.is_element_present_by_css(mark_class, wait_time=4))
|
||||
Reference in New Issue
Block a user