fix: Stop showing course certificate buttons to beta testers (#28416)
Beta testers can’t earn course certificates, so they should not see a “Request Certificate” button or other info describing how they can earn a cert. MICROBA-992
This commit is contained in:
@@ -44,6 +44,7 @@ from lms.djangoapps.certificates.api import (
|
||||
)
|
||||
from lms.djangoapps.certificates.data import CertificateStatuses
|
||||
from lms.djangoapps.grades.api import CourseGradeFactory
|
||||
from lms.djangoapps.instructor import access
|
||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||
from lms.djangoapps.verify_student.services import IDVerificationService
|
||||
from lms.djangoapps.verify_student.utils import is_verification_expiring_soon, verification_for_datetime
|
||||
@@ -465,6 +466,10 @@ def _cert_info(user, enrollment, cert_status):
|
||||
"""
|
||||
Implements the logic for cert_info -- split out for testing.
|
||||
|
||||
TODO: replace with a method that lives in the certificates app and combines this logic with
|
||||
openedx.core.djangoapps.certificates.api.can_show_certificate_message and
|
||||
lms.djangoapps.courseware.views.get_cert_data
|
||||
|
||||
Arguments:
|
||||
user (User): A user.
|
||||
enrollment (CourseEnrollment): A course enrollment.
|
||||
@@ -526,6 +531,10 @@ def _cert_info(user, enrollment, cert_status):
|
||||
if not CourseMode.is_eligible_for_certificate(enrollment.mode, status=status):
|
||||
return default_info
|
||||
|
||||
if course_overview and access.is_beta_tester(user, course_overview.id):
|
||||
# Beta testers are not eligible for a course certificate
|
||||
return default_info
|
||||
|
||||
status_dict = {
|
||||
'status': status,
|
||||
'mode': cert_status.get('mode', None),
|
||||
|
||||
@@ -54,6 +54,8 @@ from xmodule.data import CertificatesDisplayBehaviors
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
BETA_TESTER_METHOD = 'common.djangoapps.student.helpers.access.is_beta_tester'
|
||||
|
||||
|
||||
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
||||
@ddt.ddt
|
||||
@@ -169,6 +171,45 @@ class CourseEndingTest(ModuleStoreTestCase):
|
||||
assert _cert_info(user, enrollment3, cert_status) == {'status': 'processing', 'show_survey_button': False,
|
||||
'can_unenroll': True}
|
||||
|
||||
def test_cert_info_beta_tester(self):
|
||||
user = UserFactory.create()
|
||||
course = CourseOverviewFactory.create()
|
||||
mode = CourseMode.VERIFIED
|
||||
grade = '0.67'
|
||||
status = CertificateStatuses.downloadable
|
||||
cert = GeneratedCertificateFactory.create(
|
||||
user=user,
|
||||
course_id=course.id,
|
||||
status=status,
|
||||
mode=mode
|
||||
)
|
||||
enrollment = CourseEnrollmentFactory(user=user, course_id=course.id, mode=mode)
|
||||
|
||||
cert_status = {
|
||||
'status': status,
|
||||
'grade': grade,
|
||||
'download_url': cert.download_url,
|
||||
'mode': mode,
|
||||
'uuid': 'blah',
|
||||
}
|
||||
with patch(BETA_TESTER_METHOD, return_value=False):
|
||||
assert _cert_info(user, enrollment, cert_status) == {
|
||||
'status': status,
|
||||
'download_url': cert.download_url,
|
||||
'show_survey_button': False,
|
||||
'grade': grade,
|
||||
'mode': mode,
|
||||
'linked_in_url': None,
|
||||
'can_unenroll': False
|
||||
}
|
||||
|
||||
with patch(BETA_TESTER_METHOD, return_value=True):
|
||||
assert _cert_info(user, enrollment, cert_status) == {
|
||||
'status': 'processing',
|
||||
'show_survey_button': False,
|
||||
'can_unenroll': True
|
||||
}
|
||||
|
||||
@ddt.data(
|
||||
(0.70, 0.60),
|
||||
(0.60, 0.70),
|
||||
@@ -823,7 +864,7 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
|
||||
assert CourseEnrollment.is_enrolled(user, course_id)
|
||||
self.assert_no_events_were_emitted()
|
||||
|
||||
# Now deactive
|
||||
# Now deactivate
|
||||
enrollment.deactivate()
|
||||
assert not CourseEnrollment.is_enrolled(user, course_id)
|
||||
self.assert_unenrollment_event_was_emitted(user, course_id, course, enrollment)
|
||||
|
||||
Reference in New Issue
Block a user