def test_transmit_single_learner_data_performs_only_one_transmission(self):
        """
        Test sending single user's data should only update one `CornerstoneLearnerDataTransmissionAudit` entry
        """
        course_id = 'course-v1:edX+NmX+Demo_Course_2'
        course_key = 'edX+NmX'
        self._setup_enterprise_enrollment(self.user, course_id, course_key)

        # Course API course_details response
        responses.add(responses.GET,
                      urljoin(lms_api.CourseApiClient.API_BASE_URL,
                              "courses/{course}/".format(course=course_id)),
                      json={
                          "course_id": course_key,
                          "pacing": "instructor",
                          "end": "2038-06-21T12:58:17.428373Z",
                      })

        # Enrollment API
        responses.add(responses.GET,
                      urljoin(
                          lms_api.EnrollmentApiClient.API_BASE_URL,
                          "enrollment/{username},{course_id}".format(
                              username=self.user.username,
                              course_id=course_id),
                      ),
                      json=dict(mode='verified'))

        # Certificates API user's grade response
        responses.add(
            responses.GET,
            urljoin(
                lms_api.CertificatesApiClient.API_BASE_URL,
                "certificates/{user}/courses/{course}/".format(
                    course=course_id, user=self.user.username)),
            json={
                "is_passing": "true",
                "created_date": "2019-06-21T12:58:17.428373Z",
                "grade": "0.8"
            },
        )

        responses.add(
            responses.POST,
            re.compile('{base_url}{callback}{completion_path}'.format(
                base_url=self.config.cornerstone_base_url,
                callback=self.callback_url,
                completion_path=self.global_config.completion_status_api_path)
                       ),
            json={})

        transmissions = CornerstoneLearnerDataTransmissionAudit.objects.filter(
            user=self.user, course_completed=False)
        # assert we have two uncompleted data transmission
        self.assertEqual(transmissions.count(), 2)
        transmit_single_learner_data(self.user.username, course_id)
        # assert we have now one uncompleted data transmission
        self.assertEqual(transmissions.count(), 1)
 def test_transmit_single_learner_data(self, mock_learner_exporter):
     """
     The transmit_single_learner_data is called and passes kwargs to underlying transmitter.
     """
     kwargs = {
         'learner_to_transmit': self.user,
         'course_run_id': self.demo_course_run_id,
         'completed_date': NOW,
         'grade': 'Pass',
         'is_passing': True,
     }
     mock_learner_exporter.return_value = 'mock_learner_exporter'
     with mock.patch(
         'integrated_channels.cornerstone.models.CornerstoneEnterpriseCustomerConfiguration'
         '.get_learner_data_transmitter'
     ) as mock_transmitter:
         transmit_single_learner_data(self.user.username, self.demo_course_run_id)
         mock_transmitter.return_value.transmit.assert_called_once_with('mock_learner_exporter', **kwargs)
    def test_transmit_single_learner_data_performs_only_one_transmission(self):
        """
        Test sending single user's data sould only update one `CornerstoneLearnerDataTransmissionAudit` entry
        """
        course_id = 'course-v1:edX+NmX+Demo_Course_2'
        course_key = 'edX+NmX'
        self._setup_enterprise_enrollment(self.user, course_id, course_key)

        # Course API course_details response
        responses.add(responses.GET,
                      urljoin(lms_api.CourseApiClient.API_BASE_URL,
                              "courses/{course}/".format(course=course_id)),
                      json={
                          "course_id": course_key,
                          "pacing": "instructor",
                          "end": "2038-06-21T12:58:17.428373Z",
                      })

        # Certificates API user's grade response
        responses.add(
            responses.GET,
            urljoin(
                lms_api.CertificatesApiClient.API_BASE_URL,
                "certificates/{user}/courses/{course}/".format(
                    course=course_id, user=self.user.username)),
            json={
                "is_passing": "true",
                "created_date": "2019-06-21T12:58:17.428373Z",
                "grade": "0.8"
            },
        )

        transmissions = CornerstoneLearnerDataTransmissionAudit.objects.filter(
            user=self.user, course_completed=False)
        # assert we have two uncompleted data transmission
        self.assertEqual(transmissions.count(), 2)
        transmit_single_learner_data(self.user.username, course_id)
        # assert we have now one uncompleted data transmission
        self.assertEqual(transmissions.count(), 1)