diff --git a/cms/static/sass/views/_certificates.scss b/cms/static/sass/views/_certificates.scss
index e13d324d44..42903021bf 100644
--- a/cms/static/sass/views/_certificates.scss
+++ b/cms/static/sass/views/_certificates.scss
@@ -50,6 +50,10 @@
.content-supplementary {
width: flex-grid(3, 12);
}
+
+ .certificate-info-section{
+ overflow: auto;
+ }
}
// * +Main - Collection
diff --git a/cms/templates/base.html b/cms/templates/base.html
index eca989ad37..2c4564abdf 100644
--- a/cms/templates/base.html
+++ b/cms/templates/base.html
@@ -84,6 +84,7 @@ import json
url_name: "${context_course.location.name | h}",
org: "${context_course.location.org | h}",
num: "${context_course.location.course | h}",
+ display_course_number: "${_(context_course.display_coursenumber)}",
revision: "${context_course.location.revision | h}"
});
});
diff --git a/cms/templates/js/certificate-details.underscore b/cms/templates/js/certificate-details.underscore
index 32fdd3d28f..33902612dd 100644
--- a/cms/templates/js/certificate-details.underscore
+++ b/cms/templates/js/certificate-details.underscore
@@ -16,16 +16,35 @@
<%= gettext("Certificate Details") %>
-
- <%= gettext('Course Title') %>:
- <%= course.get('name') %>
-
- <% if (course_title) { %>
-
-
<%= gettext('Course Title Override') %>:
-
<%= course_title %>
+
+
+
+ <%= gettext('Course Title') %>:
+ <%= course.get('name') %>
+
+ <% if (course_title) { %>
+
+ <%= gettext('Course Title Override') %>:
+ <%= course_title %>
+
+ <% } %>
+
+
+
+
+ <%= gettext('Course Number') %>:
+ <%= course.get('num') %>
+
+
+ <% if (course.get('display_course_number')) { %>
+
+ <%= gettext('Course Number Override') %>:
+ <%= course.get('display_course_number') %>
+
+ <% } %>
- <% } %>
+
+
<%= gettext("Certificate Signatories") %>
diff --git a/common/test/acceptance/pages/studio/settings_certificates.py b/common/test/acceptance/pages/studio/settings_certificates.py
index adce19fd69..ca938634d5 100644
--- a/common/test/acceptance/pages/studio/settings_certificates.py
+++ b/common/test/acceptance/pages/studio/settings_certificates.py
@@ -11,7 +11,6 @@ The methods in these classes are organized into several conceptual buckets:
import os
from bok_choy.promise import EmptyPromise
-from ...tests.helpers import disable_animations
from .course_page import CoursePage
from common.test.acceptance.tests.helpers import disable_animations
@@ -57,6 +56,18 @@ class CertificatesPage(CoursePage):
"""
return self.q(css='.signatory-title-value').first.html[0]
+ def get_course_number(self):
+ """
+ Return Course Number
+ """
+ return self.q(css='.actual-course-number .certificate-value').first.text[0]
+
+ def get_course_number_override(self):
+ """
+ Return Course Number Override
+ """
+ return self.q(css='.course-number-override .certificate-value').first.text[0]
+
################
# Properties
################
diff --git a/common/test/acceptance/tests/studio/test_studio_settings_certificates.py b/common/test/acceptance/tests/studio/test_studio_settings_certificates.py
index eff3531a89..cd150be9b5 100644
--- a/common/test/acceptance/tests/studio/test_studio_settings_certificates.py
+++ b/common/test/acceptance/tests/studio/test_studio_settings_certificates.py
@@ -4,6 +4,7 @@ Acceptance tests for Studio's Setting pages
import re
from .base_studio_test import StudioCourseTest
from ...pages.studio.settings_certificates import CertificatesPage
+from ...pages.studio.settings_advanced import AdvancedSettingsPage
class CertificatesTest(StudioCourseTest):
@@ -18,6 +19,13 @@ class CertificatesTest(StudioCourseTest):
self.course_info['number'],
self.course_info['run']
)
+ self.advanced_settings_page = AdvancedSettingsPage(
+ self.browser,
+ self.course_info['org'],
+ self.course_info['number'],
+ self.course_info['run']
+ )
+ self.course_advanced_settings = dict()
def make_signatory_data(self, prefix='First'):
"""
@@ -229,3 +237,59 @@ class CertificatesTest(StudioCourseTest):
signatory_title = self.certificates_page.get_first_signatory_title()
self.assertNotEqual([], re.findall(r'
', signatory_title))
+
+ def test_course_number_in_certificate_details_view(self):
+ """
+ Scenario: Ensure that Course Number is displayed in certificate details view
+
+ Given I have a certificate
+ When I visit certificate details page on studio
+ Then I see Course Number next to Course Name
+ """
+ self.certificates_page.visit()
+ certificate = self.create_and_verify_certificate(
+ "Course Title Override",
+ 0,
+ [self.make_signatory_data('first')]
+ )
+
+ certificate.wait_for_certificate_delete_button()
+
+ # Make sure certificate is created
+ self.assertEqual(len(self.certificates_page.certificates), 1)
+ course_number = self.certificates_page.get_course_number()
+ self.assertEqual(self.course_info['number'], course_number)
+
+ def test_course_number_override_in_certificate_details_view(self):
+ """
+ Scenario: Ensure that Course Number Override is displayed in certificate details view
+
+ Given I have a certificate
+ When I visit certificate details page on studio
+ Then I see Course Number Override next to Course Name
+ """
+
+ self.course_advanced_settings.update(
+ {'Course Number Display String': 'Course Number Override String'}
+ )
+
+ self.certificates_page.visit()
+ certificate = self.create_and_verify_certificate(
+ "Course Title Override",
+ 0,
+ [self.make_signatory_data('first')]
+ )
+
+ certificate.wait_for_certificate_delete_button()
+
+ # Make sure certificate is created
+ self.assertEqual(len(self.certificates_page.certificates), 1)
+
+ # set up course number override in Advanced Settings Page
+ self.advanced_settings_page.visit()
+ self.advanced_settings_page.set_values(self.course_advanced_settings)
+ self.advanced_settings_page.wait_for_ajax()
+
+ self.certificates_page.visit()
+ course_number_override = self.certificates_page.get_course_number_override()
+ self.assertEqual(self.course_advanced_settings['Course Number Display String'], course_number_override)