Commit 034a7261 by Matt Drayer

Merge pull request #9715 from edx/ziafazal/SOL-1192

SOL-1192: include Null in filters while making a decision to pick right custom template
parents 39bfe271 4d08cfd4
...@@ -14,6 +14,7 @@ from opaque_keys.edx.keys import CourseKey ...@@ -14,6 +14,7 @@ from opaque_keys.edx.keys import CourseKey
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule_django.models import CourseKeyField
from util.organizations_helpers import get_course_organizations from util.organizations_helpers import get_course_organizations
from certificates.models import ( from certificates.models import (
...@@ -396,6 +397,7 @@ def get_certificate_template(course_key, mode): ...@@ -396,6 +397,7 @@ def get_certificate_template(course_key, mode):
if not template and org_id and mode: if not template and org_id and mode:
template = CertificateTemplate.objects.filter( template = CertificateTemplate.objects.filter(
organization_id=org_id, organization_id=org_id,
course_key=CourseKeyField.Empty,
mode=mode, mode=mode,
is_active=True is_active=True
) )
...@@ -403,11 +405,15 @@ def get_certificate_template(course_key, mode): ...@@ -403,11 +405,15 @@ def get_certificate_template(course_key, mode):
if not template and org_id: if not template and org_id:
template = CertificateTemplate.objects.filter( template = CertificateTemplate.objects.filter(
organization_id=org_id, organization_id=org_id,
course_key=CourseKeyField.Empty,
mode=None,
is_active=True is_active=True
) )
# if we still don't template find by only course mode # if we still don't template find by only course mode
if not template and mode: if not template and mode:
template = CertificateTemplate.objects.filter( template = CertificateTemplate.objects.filter(
organization_id=None,
course_key=CourseKeyField.Empty,
mode=mode, mode=mode,
is_active=True is_active=True
) )
......
...@@ -460,10 +460,11 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -460,10 +460,11 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
def test_certificate_custom_template_with_org_mode_course(self): def test_certificate_custom_template_with_org_mode_course(self):
""" """
Tests custom template search and rendering. Tests custom template search and rendering.
This test should check template matching when org={org}, course={course}, mode={mode}.
""" """
self._add_course_certificates(count=1, signatory_count=2) self._add_course_certificates(count=1, signatory_count=2)
self._create_custom_template(1, mode='honor', course_key=unicode(self.course.id)) self._create_custom_template(org_id=1, mode='honor', course_key=unicode(self.course.id))
self._create_custom_template(2, mode='honor') self._create_custom_template(org_id=2, mode='honor')
test_url = get_certificate_url( test_url = get_certificate_url(
user_id=self.user.id, user_id=self.user.id,
course_id=unicode(self.course.id) course_id=unicode(self.course.id)
...@@ -487,11 +488,17 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -487,11 +488,17 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
@override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED) @override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED)
def test_certificate_custom_template_with_org(self): def test_certificate_custom_template_with_org(self):
""" """
Tests custom template search if if have a single template for all courses of organization. Tests custom template search if we have a single template for organization and mode
with course set to Null.
This test should check template matching when org={org}, course=Null, mode={mode}.
""" """
course = CourseFactory.create(
org='cstX', number='cst_22', display_name='custom template course'
)
self._add_course_certificates(count=1, signatory_count=2) self._add_course_certificates(count=1, signatory_count=2)
self._create_custom_template(1) self._create_custom_template(org_id=1, mode='honor')
self._create_custom_template(1, mode='honor') self._create_custom_template(org_id=1, mode='honor', course_key=course.id)
test_url = get_certificate_url( test_url = get_certificate_url(
user_id=self.user.id, user_id=self.user.id,
course_id=unicode(self.course.id) course_id=unicode(self.course.id)
...@@ -506,9 +513,32 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -506,9 +513,32 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
self.assertContains(response, 'course name: {}'.format(self.course.display_name)) self.assertContains(response, 'course name: {}'.format(self.course.display_name))
@override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED) @override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED)
def test_certificate_custom_template_with_organization(self):
"""
Tests custom template search when we have a single template for a organization.
This test should check template matching when org={org}, course=Null, mode=null.
"""
self._add_course_certificates(count=1, signatory_count=2)
self._create_custom_template(org_id=1, mode='honor')
self._create_custom_template(org_id=1, mode='honor', course_key=self.course.id)
self._create_custom_template(org_id=2)
test_url = get_certificate_url(
user_id=self.user.id,
course_id=unicode(self.course.id)
)
with patch('certificates.api.get_course_organizations') as mock_get_orgs:
mock_get_orgs.side_effect = [
[{"id": 2, "name": "organization name 2"}],
]
response = self.client.get(test_url)
self.assertEqual(response.status_code, 200)
@override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED)
def test_certificate_custom_template_with_course_mode(self): def test_certificate_custom_template_with_course_mode(self):
""" """
Tests custom template search if if have a single template for a course mode. Tests custom template search if we have a single template for a course mode.
This test should check template matching when org=null, course=Null, mode={mode}.
""" """
mode = 'honor' mode = 'honor'
self._add_course_certificates(count=1, signatory_count=2) self._add_course_certificates(count=1, signatory_count=2)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment