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
5d7f0c60
Commit
5d7f0c60
authored
Nov 17, 2012
by
Victor Shnayder
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add tests, make them pass.
parent
4b9eafac
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
92 additions
and
15 deletions
+92
-15
common/djangoapps/student/tests.py
+74
-6
common/djangoapps/student/views.py
+14
-7
lms/djangoapps/certificates/models.py
+4
-2
No files found.
common/djangoapps/student/tests.py
View file @
5d7f0c60
...
...
@@ -13,7 +13,7 @@ from mock import patch, Mock
from
nose.plugins.skip
import
SkipTest
from
.models
import
User
,
UserProfile
,
CourseEnrollment
,
replicate_user
,
USER_FIELDS_TO_COPY
import
.views
from
.views
import
process_survey_link
,
_cert_info
,
unique_id_for_user
COURSE_1
=
'edX/toy/2012_Fall'
COURSE_2
=
'edx/full/6.002_Spring_2012'
...
...
@@ -204,17 +204,85 @@ class CourseEndingTest(TestCase):
def
test_process_survey_link
(
self
):
username
=
"fred"
id
=
sha1
(
username
)
user
=
Mock
(
username
=
username
)
id
=
unique_id_for_user
(
user
)
link1
=
"http://www.mysurvey.com"
self
.
assertEqual
(
process_survey_link
(
link1
),
link1
)
self
.
assertEqual
(
process_survey_link
(
link1
,
user
),
link1
)
link2
=
"http://www.mysurvey.com?unique={UNIQUE_ID}"
link2_expected
=
"http://www.mysurvey.com?unique={UNIQUE_ID}"
.
format
(
UNIQUE_ID
=
id
)
self
.
assertEqual
(
views
.
process_survey_link
(
link2
),
link2_expected
)
self
.
assertEqual
(
process_survey_link
(
link2
,
user
),
link2_expected
)
def
test_cert_info
(
self
):
user
=
Mock
(
username
=
"fred"
)
survey_url
=
"http://a_survey.com"
course
=
Mock
(
end_of_course_survey_url
=
survey_url
)
cert_status
=
None
self
.
assertEqual
(
views
.
_cert_info
(
user
,
course
,
None
),
{
'status'
:
'processing'
})
self
.
assertEqual
(
_cert_info
(
user
,
course
,
None
),
{
'status'
:
'processing'
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
False
,
'show_survey_button'
:
False
,})
cert_status
=
{
'status'
:
'unavailable'
}
self
.
assertEqual
(
_cert_info
(
user
,
course
,
cert_status
),
{
'status'
:
'processing'
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
False
,
'show_survey_button'
:
False
})
cert_status
=
{
'status'
:
'generating'
,
'grade'
:
'67'
}
self
.
assertEqual
(
_cert_info
(
user
,
course
,
cert_status
),
{
'status'
:
'generating'
,
'show_disabled_download_button'
:
True
,
'show_download_url'
:
False
,
'show_survey_button'
:
True
,
'survey_url'
:
survey_url
,
'grade'
:
'67'
})
cert_status
=
{
'status'
:
'regenerating'
,
'grade'
:
'67'
}
self
.
assertEqual
(
_cert_info
(
user
,
course
,
cert_status
),
{
'status'
:
'generating'
,
'show_disabled_download_button'
:
True
,
'show_download_url'
:
False
,
'show_survey_button'
:
True
,
'survey_url'
:
survey_url
,
'grade'
:
'67'
})
download_url
=
'http://s3.edx/cert'
cert_status
=
{
'status'
:
'downloadable'
,
'grade'
:
'67'
,
'download_url'
:
download_url
}
self
.
assertEqual
(
_cert_info
(
user
,
course
,
cert_status
),
{
'status'
:
'ready'
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
True
,
'download_url'
:
download_url
,
'show_survey_button'
:
True
,
'survey_url'
:
survey_url
,
'grade'
:
'67'
})
cert_status
=
{
'status'
:
'notpassing'
,
'grade'
:
'67'
,
'download_url'
:
download_url
}
self
.
assertEqual
(
_cert_info
(
user
,
course
,
cert_status
),
{
'status'
:
'notpassing'
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
False
,
'show_survey_button'
:
True
,
'survey_url'
:
survey_url
,
'grade'
:
'67'
})
# Test a course that doesn't have a survey specified
course2
=
Mock
(
end_of_course_survey_url
=
None
)
cert_status
=
{
'status'
:
'notpassing'
,
'grade'
:
'67'
,
'download_url'
:
download_url
}
self
.
assertEqual
(
_cert_info
(
user
,
course2
,
cert_status
),
{
'status'
:
'notpassing'
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
False
,
'show_survey_button'
:
False
,
'grade'
:
'67'
})
common/djangoapps/student/views.py
View file @
5d7f0c60
...
...
@@ -129,6 +129,9 @@ def press(request):
return
render_to_response
(
'static_templates/press.html'
,
{
'articles'
:
articles
})
def
unique_id_for_user
(
user
):
return
sha1
(
user
.
username
)
.
hexdigest
()
def
process_survey_link
(
survey_link
,
user
):
"""
If {UNIQUE_ID} appears in the link, replace it with a unique id for the user.
...
...
@@ -136,8 +139,7 @@ def process_survey_link(survey_link, user):
"""
to_replace
=
'{UNIQUE_ID}'
if
to_replace
in
survey_link
:
unique_id
=
sha1
(
user
.
username
)
return
survey_link
.
replace
(
to_replace
,
unique_id
)
return
survey_link
.
replace
(
to_replace
,
unique_id_for_user
(
user
))
return
survey_link
...
...
@@ -150,6 +152,7 @@ def cert_info(user, course):
'status': one of 'generating', 'ready', 'notpassing', 'processing'
'show_download_url': bool
'download_url': url, only present if show_download_url is True
'show_disabled_download_button': bool -- true if state is 'generating'
'show_survey_button': bool
'survey_url': url, only if show_survey_button is True
'grade': if status is not 'processing'
...
...
@@ -165,7 +168,10 @@ def _cert_info(user, course, cert_status):
"""
default_status
=
'processing'
if
cert_status
is
None
:
return
{
'status'
:
default_status
}
return
{
'status'
:
default_status
,
'show_disabled_download_button'
:
False
,
'show_download_url'
:
False
,
'show_survey_button'
:
False
}
# simplify the status for the template using this lookup table
template_state
=
{
...
...
@@ -178,9 +184,10 @@ def _cert_info(user, course, cert_status):
status
=
template_state
.
get
(
cert_status
[
'status'
],
default_status
)
d
=
{
'status'
:
status
,
'show_download_url'
:
status
in
(
'generating'
,
'ready'
),}
'show_download_url'
:
status
==
'ready'
,
'show_disabled_download_button'
:
status
==
'generating'
,}
if
(
status
in
(
'generating'
,
'ready'
,
'not
-available
'
)
and
if
(
status
in
(
'generating'
,
'ready'
,
'not
passing
'
)
and
course
.
end_of_course_survey_url
is
not
None
):
d
.
update
({
'show_survey_button'
:
True
,
...
...
@@ -188,10 +195,10 @@ def _cert_info(user, course, cert_status):
else
:
d
[
'show_survey_button'
]
=
False
if
template_state
==
'ready'
:
if
status
==
'ready'
:
d
[
'download_url'
]
=
cert_status
[
'download_url'
]
if
template_state
in
'generating'
,
'ready'
,
'notpassing'
:
if
status
in
(
'generating'
,
'ready'
,
'notpassing'
)
:
d
[
'grade'
]
=
cert_status
[
'grade'
]
return
d
...
...
lms/djangoapps/certificates/models.py
View file @
5d7f0c60
...
...
@@ -75,7 +75,9 @@ def certificate_status_for_student(student, course_id):
This returns a dictionary with a key for status, and other information.
The status is one of the following:
unavailable - A student is not eligible for a certificate.
unavailable - No entry for this student--if they are actually in
the course, they probably have not been graded for
certificate generation yet.
generating - A request has been made to generate a certificate,
but it has not been generated yet.
regenerating - A request has been made to regenerate a certificate,
...
...
@@ -90,7 +92,7 @@ def certificate_status_for_student(student, course_id):
"download_url".
If the student has been graded, the dictionary also contains their
grade for the course.
grade for the course
with the key "grade"
.
'''
try
:
...
...
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