Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
568f557d
Commit
568f557d
authored
Mar 18, 2013
by
Will Daly
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pep8 fixes
Changed constant to uppercase
parent
5fd1e742
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
88 additions
and
65 deletions
+88
-65
common/djangoapps/terrain/browser.py
+2
-1
common/djangoapps/terrain/factories.py
+1
-1
common/djangoapps/terrain/steps.py
+1
-0
common/lib/capa/capa/tests/response_xml_factory.py
+37
-29
lms/djangoapps/courseware/features/common.py
+8
-2
lms/djangoapps/courseware/features/courses.py
+1
-0
lms/djangoapps/courseware/features/high-level-tabs.feature
+1
-1
lms/djangoapps/courseware/features/homepage.feature
+2
-2
lms/djangoapps/courseware/features/login.py
+1
-0
lms/djangoapps/courseware/features/openended.feature
+2
-2
lms/djangoapps/courseware/features/problems.feature
+1
-1
lms/djangoapps/courseware/features/problems.py
+29
-24
lms/djangoapps/courseware/features/registration.py
+1
-0
lms/djangoapps/courseware/features/smart-accordion.feature
+1
-2
No files found.
common/djangoapps/terrain/browser.py
View file @
568f557d
...
...
@@ -6,7 +6,7 @@ import time
# Let the LMS and CMS do their one-time setup
# For example, setting up mongo caches
from
lms
import
one_time_startup
from
cms
import
one_time_startup
from
cms
import
one_time_startup
logger
=
getLogger
(
__name__
)
logger
.
info
(
"Loading the lettuce acceptance testing terrain file..."
)
...
...
@@ -21,6 +21,7 @@ def initial_setup(server):
# world.browser = Browser('phantomjs')
# world.browser = Browser('firefox')
@before.each_scenario
def
reset_data
(
scenario
):
# Clean out the django test database defined in the
...
...
common/djangoapps/terrain/factories.py
View file @
568f557d
...
...
@@ -154,7 +154,7 @@ class XModuleItemFactory(Factory):
# If a display name is set, use that
dest_name
=
display_name
.
replace
(
" "
,
"_"
)
if
display_name
is
not
None
else
uuid4
()
.
hex
dest_location
=
parent_location
.
_replace
(
category
=
template
.
category
,
dest_location
=
parent_location
.
_replace
(
category
=
template
.
category
,
name
=
dest_name
)
new_item
=
store
.
clone_item
(
template
,
dest_location
)
...
...
common/djangoapps/terrain/steps.py
View file @
568f557d
...
...
@@ -101,6 +101,7 @@ def i_am_an_edx_user(step):
#### helper functions
@world.absorb
def
scroll_to_bottom
():
# Maximize the browser
...
...
common/lib/capa/capa/tests/response_xml_factory.py
View file @
568f557d
This diff is collapsed.
Click to expand it.
lms/djangoapps/courseware/features/common.py
View file @
568f557d
...
...
@@ -89,6 +89,7 @@ TEST_COURSE_ORG = 'edx'
TEST_COURSE_NAME
=
'Test Course'
TEST_SECTION_NAME
=
"Problem"
@step
(
u'The course "([^"]*)" exists$'
)
def
create_course
(
step
,
course
):
...
...
@@ -100,7 +101,7 @@ def create_course(step, course):
# Create the course
# We always use the same org and display name,
# but vary the course identifier (e.g. 600x or 191x)
course
=
CourseFactory
.
create
(
org
=
TEST_COURSE_ORG
,
course
=
CourseFactory
.
create
(
org
=
TEST_COURSE_ORG
,
number
=
course
,
display_name
=
TEST_COURSE_NAME
)
...
...
@@ -112,6 +113,7 @@ def create_course(step, course):
template
=
'i4x://edx/templates/sequential/Empty'
,
display_name
=
TEST_SECTION_NAME
)
@step
(
u'I am registered for the course "([^"]*)"$'
)
def
i_am_registered_for_the_course
(
step
,
course
):
# Create the course
...
...
@@ -126,6 +128,7 @@ def i_am_registered_for_the_course(step, course):
world
.
log_in
(
'robot@edx.org'
,
'test'
)
@step
(
u'The course "([^"]*)" has extra tab "([^"]*)"$'
)
def
add_tab_to_course
(
step
,
course
,
extra_tab_name
):
section_item
=
ItemFactory
.
create
(
parent_location
=
course_location
(
course
),
...
...
@@ -155,10 +158,12 @@ def flush_xmodule_store():
modulestore
()
.
collection
.
drop
()
update_templates
()
def
course_id
(
course_num
):
return
"
%
s/
%
s/
%
s"
%
(
TEST_COURSE_ORG
,
course_num
,
return
"
%
s/
%
s/
%
s"
%
(
TEST_COURSE_ORG
,
course_num
,
TEST_COURSE_NAME
.
replace
(
" "
,
"_"
))
def
course_location
(
course_num
):
return
Location
(
loc_or_tag
=
"i4x"
,
org
=
TEST_COURSE_ORG
,
...
...
@@ -166,6 +171,7 @@ def course_location(course_num):
category
=
'course'
,
name
=
TEST_COURSE_NAME
.
replace
(
" "
,
"_"
))
def
section_location
(
course_num
):
return
Location
(
loc_or_tag
=
"i4x"
,
org
=
TEST_COURSE_ORG
,
...
...
lms/djangoapps/courseware/features/courses.py
View file @
568f557d
...
...
@@ -9,6 +9,7 @@ logger = getLogger(__name__)
## support functions
def
get_courses
():
'''
Returns dict of lists of courses available, keyed by course.org (ie university).
...
...
lms/djangoapps/courseware/features/high-level-tabs.feature
View file @
568f557d
...
...
@@ -3,7 +3,7 @@ Feature: All the high level tabs should work
As a student
I want to navigate through the high level tabs
Scenario
:
I
can navigate to all high-level tabs in a course
Scenario
:
I
can navigate to all high
-level tabs in a course
Given
:
I
am registered for the course
"6.002x"
And
The course
"6.002x"
has extra tab
"Custom Tab"
And
I log in
...
...
lms/djangoapps/courseware/features/homepage.feature
View file @
568f557d
...
...
@@ -39,9 +39,9 @@ Feature: Homepage for web users
|
MITx
|
|
HarvardX
|
|
BerkeleyX
|
|
UTx
|
|
UTx
|
|
WellesleyX
|
|
GeorgetownX
|
|
GeorgetownX
|
# # TODO: Add scenario that tests the courses available
# # using a policy or a configuration file
lms/djangoapps/courseware/features/login.py
View file @
568f557d
...
...
@@ -34,6 +34,7 @@ def click_the_dropdown(step):
#### helper functions
def
user_is_an_unactivated_user
(
uname
):
u
=
User
.
objects
.
get
(
username
=
uname
)
u
.
is_active
=
False
...
...
lms/djangoapps/courseware/features/openended.feature
View file @
568f557d
...
...
@@ -3,10 +3,10 @@ Feature: Open ended grading
In order to complete the courseware questions
I want the machine learning grading to be functional
# Commenting these all out right now until we can
# Commenting these all out right now until we can
# make a reference implementation for a course with
# an open ended grading problem that is always available
#
#
# Scenario: An answer that is too short is rejected
# Given I navigate to an openended question
# And I enter the answer "z"
...
...
lms/djangoapps/courseware/features/problems.feature
View file @
568f557d
...
...
@@ -35,7 +35,7 @@ Feature: Answer choice problems
Scenario
:
I
can submit a blank answer
Given
I am viewing a
"<ProblemType>"
problem
When
I check a problem
When
I check a problem
Then
My
"<ProblemType>"
answer is marked
"incorrect"
Examples
:
...
...
lms/djangoapps/courseware/features/problems.py
View file @
568f557d
...
...
@@ -13,7 +13,7 @@ from capa.tests.response_xml_factory import OptionResponseXMLFactory, \
# Factories from capa.tests.response_xml_factory that we will use
# to generate the problem XML, with the keyword args used to configure
# the output.
problem_factory_dict
=
{
PROBLEM_FACTORY_DICT
=
{
'drop down'
:
{
'factory'
:
OptionResponseXMLFactory
(),
'kwargs'
:
{
...
...
@@ -32,8 +32,8 @@ problem_factory_dict = {
'factory'
:
ChoiceResponseXMLFactory
(),
'kwargs'
:
{
'question_text'
:
'The correct answer is Choices 1 and 3'
,
'choice_type'
:
'checkbox'
,
'choices'
:[
True
,
False
,
True
,
False
,
False
],
'choice_type'
:
'checkbox'
,
'choices'
:
[
True
,
False
,
True
,
False
,
False
],
'choice_names'
:
[
'Choice 1'
,
'Choice 2'
,
'Choice 3'
,
'Choice 4'
]}},
'string'
:
{
...
...
@@ -41,7 +41,7 @@ problem_factory_dict = {
'kwargs'
:
{
'question_text'
:
'The answer is "correct string"'
,
'case_sensitive'
:
False
,
'answer'
:
'correct string'
}},
'answer'
:
'correct string'
}},
'numerical'
:
{
'factory'
:
NumericalResponseXMLFactory
(),
...
...
@@ -49,13 +49,13 @@ problem_factory_dict = {
'question_text'
:
'The answer is pi + 1'
,
'answer'
:
'4.14159'
,
'tolerance'
:
'0.00001'
,
'math_display'
:
True
}},
'math_display'
:
True
}},
'formula'
:
{
'factory'
:
FormulaResponseXMLFactory
(),
'kwargs'
:
{
'question_text'
:
'The solution is [mathjax]x^2+2x+y[/mathjax]'
,
'sample_dict'
:
{
'x'
:
(
-
100
,
100
),
'y'
:
(
-
100
,
100
)
},
'sample_dict'
:
{
'x'
:
(
-
100
,
100
),
'y'
:
(
-
100
,
100
)},
'num_samples'
:
10
,
'tolerance'
:
0.00001
,
'math_display'
:
True
,
...
...
@@ -77,15 +77,16 @@ problem_factory_dict = {
a1=0
a2=0
return (a1+a2)==int(expect)
"""
)
}},
"""
)}},
}
def
add_problem_to_course
(
course
,
problem_type
):
assert
(
problem_type
in
problem_factory_dict
)
assert
(
problem_type
in
PROBLEM_FACTORY_DICT
)
# Generate the problem XML using capa.tests.response_xml_factory
factory_dict
=
problem_factory_dict
[
problem_type
]
factory_dict
=
PROBLEM_FACTORY_DICT
[
problem_type
]
problem_xml
=
factory_dict
[
'factory'
]
.
build_xml
(
**
factory_dict
[
'kwargs'
])
# Create a problem item using our generated XML
...
...
@@ -95,7 +96,8 @@ def add_problem_to_course(course, problem_type):
template
=
"i4x://edx/templates/problem/Blank_Common_Problem"
,
display_name
=
str
(
problem_type
),
data
=
problem_xml
,
metadata
=
{
'rerandomize'
:
'always'
})
metadata
=
{
'rerandomize'
:
'always'
})
@step
(
u'I am viewing a "([^"]*)" problem'
)
def
view_problem
(
step
,
problem_type
):
...
...
@@ -108,9 +110,9 @@ def view_problem(step, problem_type):
# which should be loaded with the correct problem
chapter_name
=
TEST_SECTION_NAME
.
replace
(
" "
,
"_"
)
section_name
=
chapter_name
url
=
django_url
(
'/courses/edx/model_course/Test_Course/courseware/
%
s/
%
s'
%
url
=
django_url
(
'/courses/edx/model_course/Test_Course/courseware/
%
s/
%
s'
%
(
chapter_name
,
section_name
))
world
.
browser
.
visit
(
url
)
...
...
@@ -147,7 +149,7 @@ def answer_problem(step, problem_type, correctness):
inputfield
(
'string'
)
.
fill
(
textvalue
)
elif
problem_type
==
'numerical'
:
textvalue
=
"pi + 1"
if
correctness
==
'correct'
else
str
(
random
.
randint
(
-
2
,
2
))
textvalue
=
"pi + 1"
if
correctness
==
'correct'
else
str
(
random
.
randint
(
-
2
,
2
))
inputfield
(
'numerical'
)
.
fill
(
textvalue
)
elif
problem_type
==
'formula'
:
...
...
@@ -170,14 +172,17 @@ def answer_problem(step, problem_type, correctness):
# Submit the problem
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 that the expected answer mark is visible for a given problem type.
...
...
@@ -190,28 +195,28 @@ def assert_answer_mark(step, problem_type, correctness):
This can occur, for example, if the user has reset the problem. """
# Dictionaries that map problem types to the css selectors
# for correct/incorrect marks.
# for correct/incorrect marks.
# The elements are lists of selectors because a particular problem type
# might be marked in multiple ways.
# For example, multiple choice is marked incorrect differently
# depending on whether the user selects an incorrect
# might be marked in multiple ways.
# For example, multiple choice is marked incorrect differently
# depending on whether the user selects an incorrect
# item or submits without selecting any item)
correct_selectors
=
{
'drop down'
:
[
'span.correct'
],
correct_selectors
=
{
'drop down'
:
[
'span.correct'
],
'multiple choice'
:
[
'label.choicegroup_correct'
],
'checkbox'
:
[
'span.correct'
],
'string'
:
[
'div.correct'
],
'numerical'
:
[
'div.correct'
],
'formula'
:
[
'div.correct'
],
'formula'
:
[
'div.correct'
],
'script'
:
[
'div.correct'
],
}
incorrect_selectors
=
{
'drop down'
:
[
'span.incorrect'
],
'multiple choice'
:
[
'label.choicegroup_incorrect'
,
incorrect_selectors
=
{
'drop down'
:
[
'span.incorrect'
],
'multiple choice'
:
[
'label.choicegroup_incorrect'
,
'span.incorrect'
],
'checkbox'
:
[
'span.incorrect'
],
'string'
:
[
'div.incorrect'
],
'numerical'
:
[
'div.incorrect'
],
'formula'
:
[
'div.incorrect'
],
'script'
:
[
'div.incorrect'
]
}
'formula'
:
[
'div.incorrect'
],
'script'
:
[
'div.incorrect'
]}
assert
(
correctness
in
[
'correct'
,
'incorrect'
,
'unanswered'
])
assert
(
problem_type
in
correct_selectors
and
problem_type
in
incorrect_selectors
)
...
...
@@ -252,7 +257,7 @@ def inputfield(problem_type, choice=None, input_num=1):
*choice* is the name of the checkbox input in a group
of checkboxes. """
sel
=
(
"input#input_i4x-edx-model_course-problem-
%
s_2_
%
s"
%
sel
=
(
"input#input_i4x-edx-model_course-problem-
%
s_2_
%
s"
%
(
problem_type
.
replace
(
" "
,
"_"
),
str
(
input_num
)))
if
choice
is
not
None
:
...
...
lms/djangoapps/courseware/features/registration.py
View file @
568f557d
...
...
@@ -2,6 +2,7 @@ from lettuce import world, step
from
lettuce.django
import
django_url
from
common
import
TEST_COURSE_ORG
,
TEST_COURSE_NAME
@step
(
'I register for the course "([^"]*)"$'
)
def
i_register_for_the_course
(
step
,
course
):
cleaned_name
=
TEST_COURSE_NAME
.
replace
(
' '
,
'_'
)
...
...
lms/djangoapps/courseware/features/smart-accordion.feature
View file @
568f557d
...
...
@@ -60,4 +60,4 @@ Feature: There are courses on the homepage
# Scenario: Navigate through course BerkeleyX/CS184.1x/2012_Fall
# Given I am registered for course "BerkeleyX/CS184.1x/2012_Fall"
# And I log in
# Then I verify all the content of each course
\ No newline at end of file
# Then I verify all the content of each course
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment