def test_create_course_run_in_studio(self, mock_access_token): # pylint: disable=unused-argument organization = OrganizationFactory() partner = organization.partner start = datetime.datetime.utcnow() course_run_key = 'course-v1:TestX+Testing101x+1T2017' body = {'id': course_run_key} studio_url_root = partner.studio_url.strip('/') url = '{}/api/v1/course_runs/'.format(studio_url_root) responses.add(responses.POST, url, json=body, status=200) body = {'card_image': 'https://example.com/image.jpg'} url = '{root}/api/v1/course_runs/{course_run_key}/images/'.format( root=studio_url_root, course_run_key=course_run_key) responses.add(responses.POST, url, json=body, status=200) with mock.patch( 'course_discovery.apps.publisher.signals.logger.exception' ) as mock_logger: publisher_course_run = CourseRunFactory( start=start, lms_course_id=None, course__organizations=[organization]) # We refresh because the signal should update the instance with the course run key from Studio publisher_course_run.refresh_from_db() assert len(responses.calls) == 2 assert publisher_course_run.lms_course_id == course_run_key mock_logger.assert_called_with( 'Organization [%s] does not have an associated OrganizationExtension', organization.key, )
def test_create_course_run_in_studio_as_rerun(self, mock_access_token): # pylint: disable=unused-argument number = 'TestX' organization = OrganizationFactory() partner = organization.partner course_key = '{org}+{number}'.format(org=organization.key, number=number) discovery_course_run = DiscoveryCourseRunFactory( course__partner=partner, course__key=course_key) start = datetime.datetime.utcnow() course_run_key = 'course-v1:TestX+Testing101x+1T2017' body = {'id': course_run_key} studio_url_root = partner.studio_url.strip('/') url = '{root}/api/v1/course_runs/{course_run_key}/rerun/'.format( root=studio_url_root, course_run_key=discovery_course_run.key) responses.add(responses.POST, url, json=body, status=200) body = {'card_image': 'https://example.com/image.jpg'} url = '{root}/api/v1/course_runs/{course_run_key}/images/'.format( root=studio_url_root, course_run_key=course_run_key) responses.add(responses.POST, url, json=body, status=200) publisher_course_run = CourseRunFactory( start=start, lms_course_id=None, course__organizations=[organization], course__number=number) # We refresh because the signal should update the instance with the course run key from Studio publisher_course_run.refresh_from_db() assert len(responses.calls) == 2 assert publisher_course_run.lms_course_id == course_run_key
def test_create_course_run_in_studio_with_image_failure(self, __): organization = OrganizationFactory() OrganizationExtensionFactory(organization=organization) partner = organization.partner start = datetime.datetime.utcnow() course_run_key = 'course-v1:TestX+Testing101x+1T2017' body = {'id': course_run_key} studio_url_root = partner.studio_url.strip('/') url = '{}/api/v1/course_runs/'.format(studio_url_root) responses.add(responses.POST, url, json=body, status=200) course = CourseFactory(organizations=[organization]) with mock.patch('course_discovery.apps.api.utils.logger.exception' ) as mock_logger: publisher_course_run = CourseRunFactory( course=course, start=start, lms_course_id=None, ) assert mock_logger.call_count == 1 assert mock_logger.call_args_list[0] == mock.call( 'An error occurred while setting the course run image for [{key}] in studio. All other fields ' 'were successfully saved in Studio.'.format(key=course_run_key)) publisher_course_run.refresh_from_db() assert len(responses.calls) == 2 assert publisher_course_run.lms_course_id == course_run_key