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
ccb5b6c7
Commit
ccb5b6c7
authored
Dec 29, 2015
by
Jonathan Piacenti
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adjust get_completion_badge usages to handle exceptions.
parent
4fde73fa
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
45 additions
and
14 deletions
+45
-14
lms/djangoapps/badges/events/course_complete.py
+2
-0
lms/djangoapps/certificates/management/commands/regenerate_user.py
+7
-5
lms/djangoapps/certificates/tests/test_cert_management.py
+9
-3
lms/djangoapps/certificates/tests/test_webview_views.py
+21
-4
lms/djangoapps/certificates/views/webview.py
+6
-2
No files found.
lms/djangoapps/badges/events/course_complete.py
View file @
ccb5b6c7
...
...
@@ -82,6 +82,8 @@ def get_completion_badge(course_id, user):
return
None
mode
=
badge_classes
[
0
]
.
mode
course
=
modulestore
()
.
get_course
(
course_id
)
if
not
course
.
issue_badges
:
return
None
return
BadgeClass
.
get_badge_class
(
slug
=
course_slug
(
course_id
,
mode
),
issuing_component
=
''
,
...
...
lms/djangoapps/certificates/management/commands/regenerate_user.py
View file @
ccb5b6c7
...
...
@@ -111,11 +111,13 @@ class Command(BaseCommand):
course_id
)
badge_class
=
get_completion_badge
(
course_id
,
student
)
badge
=
badge_class
.
get_for_user
(
student
)
if
badge
:
badge
.
delete
()
LOGGER
.
info
(
u"Cleared badge for student
%
s."
,
student
.
id
)
if
course
.
issue_badges
:
badge_class
=
get_completion_badge
(
course_id
,
student
)
badge
=
badge_class
.
get_for_user
(
student
)
if
badge
:
badge
.
delete
()
LOGGER
.
info
(
u"Cleared badge for student
%
s."
,
student
.
id
)
# Add the certificate request to the queue
ret
=
regenerate_user_certificates
(
...
...
lms/djangoapps/certificates/tests/test_cert_management.py
View file @
ccb5b6c7
...
...
@@ -150,6 +150,7 @@ class ResubmitErrorCertificatesTest(CertificateManagementTest):
self
.
_assert_cert_status
(
phantom_course
,
self
.
user
,
CertificateStatuses
.
error
)
@ddt.ddt
@attr
(
'shard_1'
)
class
RegenerateCertificatesTest
(
CertificateManagementTest
):
"""
...
...
@@ -164,20 +165,23 @@ class RegenerateCertificatesTest(CertificateManagementTest):
super
(
RegenerateCertificatesTest
,
self
)
.
setUp
()
self
.
course
=
self
.
courses
[
0
]
@ddt.data
(
True
,
False
)
@override_settings
(
CERT_QUEUE
=
'test-queue'
)
@patch
(
'certificates.api.XQueueCertInterface'
,
spec
=
True
)
def
test_clear_badge
(
self
,
xqueue
):
def
test_clear_badge
(
self
,
issue_badges
,
xqueue
):
"""
Given that I have a user with a badge
If I run regeneration for a user
Then certificate generation will be requested
And the badge will be deleted
And the badge will be deleted
if badge issuing is enabled
"""
key
=
self
.
course
.
location
.
course_key
self
.
_create_cert
(
key
,
self
.
user
,
CertificateStatuses
.
downloadable
)
badge_class
=
get_completion_badge
(
key
,
self
.
user
)
BadgeAssertionFactory
(
badge_class
=
badge_class
,
user
=
self
.
user
)
self
.
assertTrue
(
BadgeAssertion
.
objects
.
filter
(
user
=
self
.
user
,
badge_class
=
badge_class
))
self
.
course
.
issue_badges
=
issue_badges
self
.
store
.
update_item
(
self
.
course
,
None
)
self
.
_run_command
(
username
=
self
.
user
.
email
,
course
=
unicode
(
key
),
noop
=
False
,
insecure
=
False
,
template_file
=
None
,
grade_value
=
None
...
...
@@ -190,7 +194,9 @@ class RegenerateCertificatesTest(CertificateManagementTest):
template_file
=
None
,
generate_pdf
=
True
)
self
.
assertFalse
(
BadgeAssertion
.
objects
.
filter
(
user
=
self
.
user
,
badge_class
=
badge_class
))
self
.
assertEquals
(
bool
(
BadgeAssertion
.
objects
.
filter
(
user
=
self
.
user
,
badge_class
=
badge_class
)),
not
issue_badges
)
@override_settings
(
CERT_QUEUE
=
'test-queue'
)
@patch
(
'capa.xqueue_interface.XQueueInterface.send_to_queue'
,
spec
=
True
)
...
...
lms/djangoapps/certificates/tests/test_webview_views.py
View file @
ccb5b6c7
...
...
@@ -14,12 +14,9 @@ from django.core.urlresolvers import reverse
from
django.test.client
import
Client
from
django.test.utils
import
override_settings
<<<<<<<
HEAD
from
course_modes.models
import
CourseMode
=======
from
badges.events.course_complete
import
get_completion_badge
>>>>>>>
a248c5a
...
Add
completion
and
enrollment
badges
.
from
badges.tests.factories
import
BadgeAssertionFactory
,
CourseCompleteImageConfigurationFactory
from
badges.tests.factories
import
BadgeAssertionFactory
,
CourseCompleteImageConfigurationFactory
,
BadgeClassFactory
from
openedx.core.lib.tests.assertions.events
import
assert_event_matches
from
student.tests.factories
import
UserFactory
,
CourseEnrollmentFactory
from
student.roles
import
CourseStaffRole
...
...
@@ -338,6 +335,26 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
)
self
.
assertIn
(
'logo_test1.png'
,
response
.
content
)
@ddt.data
(
True
,
False
)
@patch
(
'certificates.views.webview.get_completion_badge'
)
@override_settings
(
FEATURES
=
FEATURES_WITH_BADGES_ENABLED
)
def
test_fetch_badge_info
(
self
,
issue_badges
,
mock_get_completion_badge
):
"""
Test: Fetch badge class info if badges are enabled.
"""
badge_class
=
BadgeClassFactory
(
course_id
=
self
.
course_id
,
mode
=
self
.
cert
.
mode
)
mock_get_completion_badge
.
return_value
=
badge_class
self
.
_add_course_certificates
(
count
=
1
,
signatory_count
=
1
,
is_active
=
True
)
test_url
=
get_certificate_url
(
course_id
=
self
.
cert
.
course_id
,
uuid
=
self
.
cert
.
verify_uuid
)
response
=
self
.
client
.
get
(
test_url
)
self
.
assertEqual
(
response
.
status_code
,
200
)
if
issue_badges
:
mock_get_completion_badge
.
assertCalled
()
else
:
mock_get_completion_badge
.
assertNotCalled
()
@override_settings
(
FEATURES
=
FEATURES_WITH_BADGES_ENABLED
)
@patch.dict
(
"django.conf.settings.SOCIAL_SHARING_SETTINGS"
,
{
"CERTIFICATE_TWITTER"
:
True
,
...
...
lms/djangoapps/certificates/views/webview.py
View file @
ccb5b6c7
...
...
@@ -359,7 +359,11 @@ def _track_certificate_events(request, context, course, user, user_certificate):
if
'evidence_visit'
in
request
.
GET
:
badge_class
=
get_completion_badge
(
course_key
,
user
)
badges
=
badge_class
.
get_for_user
(
user
)
if
not
badge_class
:
log
.
warning
(
'Visit to evidence URL for badge, but badges not configured for course "
%
s"'
,
course_key
)
badges
=
[]
else
:
badges
=
badge_class
.
get_for_user
(
user
)
if
badges
:
# There should only ever be one of these.
badge
=
badges
[
0
]
...
...
@@ -441,7 +445,7 @@ def _update_badge_context(context, course, user):
Updates context with badge info.
"""
badge
=
None
if
settings
.
FEATURES
.
get
(
'ENABLE_OPENBADGES'
):
if
settings
.
FEATURES
.
get
(
'ENABLE_OPENBADGES'
)
and
course
.
issue_badges
:
badges
=
get_completion_badge
(
course
.
location
.
course_key
,
user
)
.
get_for_user
(
user
)
if
badges
:
badge
=
badges
[
0
]
...
...
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