Skip to content
Snippets Groups Projects
Unverified Commit 8c9b13e6 authored by Zia Fazal's avatar Zia Fazal Committed by GitHub
Browse files

Merge pull request #21770 from edx/ziafazal/ENT-2268

ENT-2268: Added signal handler for COURSE_GRADE_NOW_PASSED
parents 0befab33 19436f8d
No related merge requests found
......@@ -62,7 +62,7 @@ def _listen_for_certificate_whitelist_append(sender, instance, **kwargs): # pyl
@receiver(COURSE_GRADE_NOW_PASSED, dispatch_uid="new_passing_learner")
def _listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument
def listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument
"""
Listen for a learner passing a course, send cert generation task,
downstream signal from COURSE_GRADE_CHANGED
......
......@@ -100,21 +100,21 @@ class TestCourseGradeFactory(GradeTestBase):
with self.assertNumQueries(4), mock_get_score(1, 2):
_assert_read(expected_pass=False, expected_percent=0) # start off with grade of 0
num_queries = 47
num_queries = 51
with self.assertNumQueries(num_queries), mock_get_score(1, 2):
grade_factory.update(self.request.user, self.course, force_update_subsections=True)
with self.assertNumQueries(5):
_assert_read(expected_pass=True, expected_percent=0.5) # updated to grade of .5
num_queries = 9
num_queries = 13
with self.assertNumQueries(num_queries), mock_get_score(1, 4):
grade_factory.update(self.request.user, self.course, force_update_subsections=False)
with self.assertNumQueries(5):
_assert_read(expected_pass=True, expected_percent=0.5) # NOT updated to grade of .25
num_queries = 26
num_queries = 30
with self.assertNumQueries(num_queries), mock_get_score(2, 2):
grade_factory.update(self.request.user, self.course, force_update_subsections=True)
......
......@@ -13,6 +13,8 @@ from django.dispatch import receiver
from email_marketing.tasks import update_user
from enterprise.models import EnterpriseCourseEnrollment, EnterpriseCustomer, EnterpriseCustomerUser
from integrated_channels.integrated_channel.tasks import transmit_single_learner_data
from openedx.core.djangoapps.signals.signals import COURSE_GRADE_NOW_PASSED
from openedx.features.enterprise_support.tasks import clear_enterprise_customer_data_consent_share_cache
from openedx.features.enterprise_support.utils import clear_data_consent_share_cache
......@@ -64,3 +66,15 @@ def update_dsc_cache_on_enterprise_customer_update(sender, instance, **kwargs):
task_id=result.task_id,
kwargs=kwargs,
))
@receiver(COURSE_GRADE_NOW_PASSED, dispatch_uid="new_passing_enterprise_learner")
def handle_enterprise_learner_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument
"""
Listen for a learner passing a course, transmit data to relevant integrated channel
"""
kwargs = {
'username': six.text_type(user.username),
'course_run_id': six.text_type(course_id)
}
transmit_single_learner_data.apply_async(kwargs=kwargs)
......@@ -6,8 +6,13 @@ import logging
import ddt
from django.test import TestCase
from mock import patch
from student.tests.factories import UserFactory
from edx_django_utils.cache import TieredCache
from opaque_keys.edx.keys import CourseKey
from lms.djangoapps.certificates.signals import listen_for_passing_grade
from student.tests.factories import UserFactory
from openedx.core.djangoapps.signals.signals import COURSE_GRADE_NOW_PASSED
from openedx.features.enterprise_support.tests.factories import (
EnterpriseCourseEnrollmentFactory,
EnterpriseCustomerFactory,
......@@ -104,3 +109,21 @@ class EnterpriseSupportSignals(TestCase):
enterprise_customer.save()
self.assertFalse(self._is_dsc_cache_found(self.user.id, self.course_id))
def test_handle_enterprise_learner_passing_grade(self):
"""
Test to assert transmit_single_learner_data is called when COURSE_GRADE_NOW_PASSED signal is fired
"""
with patch(
'integrated_channels.integrated_channel.tasks.transmit_single_learner_data.apply_async',
return_value=None
) as mock_task_apply:
course_key = CourseKey.from_string(self.course_id)
COURSE_GRADE_NOW_PASSED.disconnect(dispatch_uid='new_passing_learner')
COURSE_GRADE_NOW_PASSED.send(sender=None, user=self.user, course_id=course_key)
task_kwargs = {
'username': self.user.username,
'course_run_id': self.course_id
}
mock_task_apply.assert_called_once_with(kwargs=task_kwargs)
COURSE_GRADE_NOW_PASSED.connect(listen_for_passing_grade, dispatch_uid='new_passing_learner')
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