class AddLogosToOrganizationTest(TestCase): def setUp(self): super().setUp() self.partner = PartnerFactory(short_code="testx") self.organization = OrganizationFactory(partner=self.partner, name="testx") self.logo = mock.MagicMock(spec=File, name="logo") self.logo.name = "logo" self.certificate_logo = mock.MagicMock(spec=File, name="certificate_logo") self.certificate_logo.name = "certificate_logo" self.banner_image = mock.MagicMock(spec=File, name="banner_image") self.banner_image.name = "banner image" def test_partner_not_found(self): with pytest.raises(Exception): call_command(Command()) def test_image_paths_not_found(self): with pytest.raises(Exception): call_command( Command(), partner="testx", ) @pytest.mark.django_db def test_two_organizations_with_same_partner_returns_correct_org(self): new_org = OrganizationFactory(partner=self.partner, name="notx") assert len(Organization.objects.all()) > 1 self.organization.logo_image = None new_org.logo_image = None with mock.patch( "course_discovery.apps.course_metadata.management.commands.add_logos_to_organization.Command._open_assets", return_value={ "logo": self.logo, "certificate_logo": self.certificate_logo, "banner_image": self.banner_image, }, ): call_command( Command(), partner="testx", logo="/", certificate_logo="/", banner_image="/", ) self.organization.refresh_from_db() assert "/media/organization/logos/" in self.organization.logo_image.path
class TestMigrateCommentsToSalesforce(TestCase): LOGGER_PATH = 'course_discovery.apps.course_metadata.management.commands.migrate_comments_to_salesforce.logger' def setUp(self): super(TestMigrateCommentsToSalesforce, self).setUp() self.partner = PartnerFactory() self.user_1 = UserFactory() self.org_1 = OrganizationFactory(partner=self.partner) self.course_1 = CourseFactory( partner=self.partner, authoring_organizations=[self.org_1], key=self.org_1.key + '+101x', title='Old Title', ) self.course_run_1 = CourseRunFactory( key='course-v1:{key}+1T2019'.format( key=self.course_1.key, ), course=self.course_1, ) self.publisher_course_1 = PublisherCourseFactory(number='101x', title='New Title') self.publisher_course_1.organizations.add(self.org_1) # pylint: disable=no-member self.publisher_course_run_1 = PublisherCourseRunFactory( course=self.publisher_course_1, lms_course_id='course-v1:{org}+{number}+1T2019'.format( org=self.org_1.key, number=self.publisher_course_1.number ), ) def tearDown(self): super(TestMigrateCommentsToSalesforce, self).tearDown() # Zero out the instances that are created during testing SalesforceUtil.instances = {} @mock.patch(LOGGER_PATH) def test_handle_no_orgs(self, mock_logger): config = MigrateCommentsToSalesforceFactory() config.orgs.all().delete() with self.assertRaises(CommandError): Command().handle() mock_logger.error.assert_called_with( 'No organizations were defined. Please add organizations to the MigrateCommentsToSalesforce model.' ) @mock.patch(LOGGER_PATH) def test_handle_no_partner(self, mock_logger): config = MigrateCommentsToSalesforceFactory() config.orgs.add(self.org_1) with self.assertRaises(CommandError): Command().handle() mock_logger.error.assert_called_with( 'No partner was defined. Please add a partner to the MigrateCommentsToSalesforce model.' ) @mock.patch(LOGGER_PATH) def test_handle_no_salesforce_configuration(self, mock_logger): config = MigrateCommentsToSalesforceFactory(partner=self.partner) config.orgs.add(self.org_1) with self.assertRaises(CommandError): Command().handle() mock_logger.error.assert_called_with( 'Salesforce configuration for {} does not exist'.format(self.partner.name) ) @mock.patch('course_discovery.apps.course_metadata.salesforce.Salesforce') def test_handle_without_publisher_course_run(self, mock_salesforce): config = MigrateCommentsToSalesforceFactory(partner=self.partner) config.orgs.add(self.org_1) SalesforceConfigurationFactory(partner=self.partner) self.publisher_course_run_1.delete() # Set return values for all of the Salesforce methods that get called mock_salesforce().Publisher_Organization__c.create.return_value = {'id': 'SomePubOrgId'} mock_salesforce().Course__c.create.return_value = {'id': 'SomeCourseId'} mock_salesforce().Case.create.return_value = {'id': 'SomeCaseId'} mock_salesforce().Course_Run__c.create.return_value = {'id': 'SomeCourseRunId'} with mock.patch(self.LOGGER_PATH) as mock_logger: Command().handle() calls = [ mock.call('No PublisherCourseRun found for {}.'.format(self.course_run_1.key)), mock.call('No PublisherCourses found for {}'.format(self.course_1.key)) ] mock_logger.warning.assert_has_calls(calls, any_order=True) @mock.patch('course_discovery.apps.course_metadata.salesforce.Salesforce') def test_handle_with_comments(self, mock_salesforce): config = MigrateCommentsToSalesforceFactory(partner=self.partner) config.orgs.add(self.org_1) SalesforceConfigurationFactory(partner=self.partner) course_comment = CommentFactory( user=self.user_1, content_type_id=ContentType.objects.get_for_model(PublisherCourse), object_pk=self.publisher_course_1.id, ) course_comment.content_type_id = ContentType.objects.get_for_model(PublisherCourse) course_comment.object_pk = self.publisher_course_1.id course_comment.save() course_run_comment = CommentFactory( user=self.user_1, content_type_id=ContentType.objects.get_for_model(PublisherCourseRun), object_pk=self.publisher_course_run_1.id, ) course_run_comment.content_type_id = ContentType.objects.get_for_model(PublisherCourseRun) course_run_comment.object_pk = self.publisher_course_run_1.id course_run_comment.save() # Set return values for all of the Salesforce methods that get called mock_salesforce().Publisher_Organization__c.create.return_value = {'id': 'SomePubOrgId'} mock_salesforce().Course__c.create.return_value = {'id': 'SomeCourseId'} mock_salesforce().Case.create.return_value = {'id': 'SomeCaseId'} mock_salesforce().Course_Run__c.create.return_value = {'id': 'SomeCourseRunId'} with mock.patch(self.LOGGER_PATH) as mock_logger: Command().handle() self.org_1.refresh_from_db() self.course_1.refresh_from_db() self.course_run_1.refresh_from_db() self.assertEqual(self.org_1.salesforce_id, 'SomePubOrgId') self.assertEqual(self.course_1.salesforce_id, 'SomeCourseId') self.assertEqual(self.course_1.salesforce_case_id, 'SomeCaseId') self.assertEqual(self.course_run_1.salesforce_id, 'SomeCourseRunId') mock_logger.info.assert_called_with('Inserted 2 comments for {}'.format(self.course_1.title))