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
dc89a4b3
Commit
dc89a4b3
authored
Mar 18, 2013
by
cahrens
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Beginning of Selenium test, updates to work with master.
parent
49ee903e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
66 additions
and
12 deletions
+66
-12
cms/djangoapps/contentstore/features/checklists.feature
+14
-0
cms/djangoapps/contentstore/features/checklists.py
+35
-0
cms/djangoapps/contentstore/views.py
+7
-9
cms/djangoapps/models/settings/course_metadata.py
+1
-1
cms/static/client_templates/checklist.html
+8
-1
common/lib/xmodule/xmodule/course_module.py
+1
-1
No files found.
cms/djangoapps/contentstore/features/checklists.feature
0 → 100644
View file @
dc89a4b3
Feature
:
Course checklists
Scenario
:
A
course author sees checklists defined by edX
Given
I have opened a new course in Studio
When
I select Checklists from the Tools menu
Then
I see the four default edX checklists
Scenario
:
A
course author can mark tasks as complete
Given
I have opened a new course in Studio
When
I select Checklists from the Tools menu
Then
I can select tasks in a checklist
And
They are still selected after I reload the page
\ No newline at end of file
cms/djangoapps/contentstore/features/checklists.py
0 → 100644
View file @
dc89a4b3
from
lettuce
import
world
,
step
from
common
import
*
from
terrain.steps
import
reload_the_page
############### ACTIONS ####################
@step
(
'I select Checklists from the Tools menu$'
)
def
i_select_checklists
(
step
):
expand_icon_css
=
'li.nav-course-tools i.icon-expand'
if
world
.
browser
.
is_element_present_by_css
(
expand_icon_css
):
css_click
(
expand_icon_css
)
link_css
=
'li.nav-course-tools-checklists a'
css_click
(
link_css
)
@step
(
'I see the four default edX checklists$'
)
def
i_see_default_checklists
(
step
):
checklists
=
css_find
(
'.checklist-title'
)
assert_equal
(
4
,
len
(
checklists
))
assert_true
(
checklists
[
0
]
.
text
.
endswith
(
'Getting Started With Studio'
))
assert_true
(
checklists
[
1
]
.
text
.
endswith
(
'Draft a Rough Course Outline'
))
assert_true
(
checklists
[
2
]
.
text
.
endswith
(
"Explore edX
\'
s Support Tools"
))
assert_true
(
checklists
[
3
]
.
text
.
endswith
(
'Draft your Course Introduction'
))
@step
(
'I can select tasks in a checklist$'
)
def
i_can_select_tasks
(
step
):
# Use the 2nd checklist as a reference
assert_equal
(
'0'
,
css_find
(
'#course-checklist1 .status-count'
)
.
first
.
text
)
assert_equal
(
'7'
,
css_find
(
'#course-checklist1 .status-amount'
)
.
first
.
text
)
# TODO: check progress bar, select several items and check how things change
@step
(
'They are still selected after I reload the page$'
)
def
tasks_still_selected_after_reload
(
step
):
reload_the_page
(
step
)
cms/djangoapps/contentstore/views.py
View file @
dc89a4b3
...
@@ -1299,12 +1299,11 @@ def get_checklists(request, org, course, name):
...
@@ -1299,12 +1299,11 @@ def get_checklists(request, org, course, name):
template_module
=
modulestore
.
get_item
(
new_course_template
)
template_module
=
modulestore
.
get_item
(
new_course_template
)
# If course was created before checklists were introduced, copy them over from the template.
# If course was created before checklists were introduced, copy them over from the template.
key
=
"checklists"
if
not
course_module
.
checklists
:
if
not
key
in
course_module
.
metadata
:
course_module
.
checklists
=
template_module
.
checklists
course_module
.
metadata
[
key
]
=
template_module
.
metadata
[
key
]
modulestore
.
update_metadata
(
location
,
own_metadata
(
course_module
))
modulestore
.
update_metadata
(
location
,
course_module
.
metadata
)
checklists
=
course_module
.
metadata
[
key
]
checklists
=
course_module
.
checklists
return
render_to_response
(
'checklists.html'
,
return
render_to_response
(
'checklists.html'
,
{
{
'context_course'
:
course_module
,
'context_course'
:
course_module
,
...
@@ -1318,17 +1317,16 @@ def update_checklist(request, org, course, name, checklist_index=None):
...
@@ -1318,17 +1317,16 @@ def update_checklist(request, org, course, name, checklist_index=None):
location
=
get_location_and_verify_access
(
request
,
org
,
course
,
name
)
location
=
get_location_and_verify_access
(
request
,
org
,
course
,
name
)
modulestore
=
get_modulestore
(
location
)
modulestore
=
get_modulestore
(
location
)
course_module
=
modulestore
.
get_item
(
location
)
course_module
=
modulestore
.
get_item
(
location
)
key
=
"checklists"
real_method
=
get_request_method
(
request
)
real_method
=
get_request_method
(
request
)
if
checklist_index
is
not
None
and
(
real_method
==
'POST'
or
real_method
==
'PUT'
):
if
checklist_index
is
not
None
and
(
real_method
==
'POST'
or
real_method
==
'PUT'
):
modified_checklist
=
json
.
loads
(
request
.
body
)
modified_checklist
=
json
.
loads
(
request
.
body
)
(
course_module
.
metadata
[
key
])
[
int
(
checklist_index
)]
=
modified_checklist
course_module
.
checklists
[
int
(
checklist_index
)]
=
modified_checklist
modulestore
.
update_metadata
(
location
,
course_module
.
metadata
)
modulestore
.
update_metadata
(
location
,
own_metadata
(
course_module
)
)
return
HttpResponse
(
json
.
dumps
(
modified_checklist
),
mimetype
=
"application/json"
)
return
HttpResponse
(
json
.
dumps
(
modified_checklist
),
mimetype
=
"application/json"
)
elif
request
.
method
==
'GET'
:
elif
request
.
method
==
'GET'
:
# TODO: Would we ever get in this condition? Any point in having this code?
# TODO: Would we ever get in this condition? Any point in having this code?
return
HttpResponse
(
json
.
dumps
(
course_module
.
metadata
[
key
]
),
mimetype
=
"application/json"
)
return
HttpResponse
(
json
.
dumps
(
course_module
.
checklists
),
mimetype
=
"application/json"
)
@login_required
@login_required
...
...
cms/djangoapps/models/settings/course_metadata.py
View file @
dc89a4b3
...
@@ -10,7 +10,7 @@ class CourseMetadata(object):
...
@@ -10,7 +10,7 @@ class CourseMetadata(object):
For CRUD operations on metadata fields which do not have specific editors on the other pages including any user generated ones.
For CRUD operations on metadata fields which do not have specific editors on the other pages including any user generated ones.
The objects have no predefined attrs but instead are obj encodings of the editable metadata.
The objects have no predefined attrs but instead are obj encodings of the editable metadata.
'''
'''
FILTERED_LIST
=
XModuleDescriptor
.
system_metadata_fields
+
[
'start'
,
'end'
,
'enrollment_start'
,
'enrollment_end'
,
'tabs'
,
'graceperiod'
]
FILTERED_LIST
=
XModuleDescriptor
.
system_metadata_fields
+
[
'start'
,
'end'
,
'enrollment_start'
,
'enrollment_end'
,
'tabs'
,
'graceperiod'
,
'checklists'
]
@classmethod
@classmethod
def
fetch
(
cls
,
course_location
):
def
fetch
(
cls
,
course_location
):
...
...
cms/static/client_templates/checklist.html
View file @
dc89a4b3
<section
class=
"course-checklist"
id=
"<%= 'course-checklist' + checklistIndex %>"
>
<
%
var
allChecked =
itemsChecked
==
items
.
length
;
%
>
<section
<%
if
(
allChecked
)
{
%
>
class="course-checklist is-completed"
<
%
}
else
{
%
>
class="course-checklist"
<
%
}
%
>
id="
<
%=
'
course-checklist
'
+
checklistIndex
%
>
">
<
%
var
widthPercentage =
'width:'
+
percentChecked
+
'%;';
%
>
<
%
var
widthPercentage =
'width:'
+
percentChecked
+
'%;';
%
>
<span
class=
"viz viz-checklist-status"
><span
class=
"viz value viz-checklist-status-value"
style=
"<%= widthPercentage %>"
>
<span
class=
"viz viz-checklist-status"
><span
class=
"viz value viz-checklist-status-value"
style=
"<%= widthPercentage %>"
>
<span
class=
"int"
><
%=
percentChecked
%
></span>
% of checklist completed
</span></span>
<span
class=
"int"
><
%=
percentChecked
%
></span>
% of checklist completed
</span></span>
...
...
common/lib/xmodule/xmodule/course_module.py
View file @
dc89a4b3
...
@@ -179,7 +179,7 @@ class CourseFields(object):
...
@@ -179,7 +179,7 @@ class CourseFields(object):
allow_anonymous_to_peers
=
Boolean
(
scope
=
Scope
.
settings
,
default
=
False
)
allow_anonymous_to_peers
=
Boolean
(
scope
=
Scope
.
settings
,
default
=
False
)
advanced_modules
=
List
(
help
=
"Beta modules used in your course"
,
scope
=
Scope
.
settings
)
advanced_modules
=
List
(
help
=
"Beta modules used in your course"
,
scope
=
Scope
.
settings
)
has_children
=
True
has_children
=
True
checklists
=
List
(
scope
=
Scope
.
settings
)
info_sidebar_name
=
String
(
scope
=
Scope
.
settings
,
default
=
'Course Handouts'
)
info_sidebar_name
=
String
(
scope
=
Scope
.
settings
,
default
=
'Course Handouts'
)
# An extra property is used rather than the wiki_slug/number because
# An extra property is used rather than the wiki_slug/number because
...
...
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