def test_list_not_staff(self): """ Verify the endpoint returns a list of all organizations. """ org1 = OrganizationFactory.create(partner=self.partner) org2 = OrganizationFactory.create(partner=self.partner) OrganizationFactory.create(partner=self.partner) extension1 = publisher_factories.OrganizationExtensionFactory( organization=org1) publisher_factories.OrganizationExtensionFactory(organization=org2) assign_perm(OrganizationExtension.VIEW_COURSE, extension1.group, extension1) self.non_staff_user.groups.add(extension1.group) # Check Staff user get all groups response = self.client.get(self.list_path) assert response.status_code == 200 self.assert_response_data_valid(response, Organization.objects.all()) # Check non staff user gets 1 group self.client.logout() self.client.login(username=self.non_staff_user.username, password=USER_PASSWORD) response = self.client.get(self.list_path) assert response.status_code == 200 self.assert_response_data_valid(response, [org1])
def test_retrieve_not_staff(self): """ Verify the endpoint returns a list of all organizations. """ org1 = OrganizationFactory.create(partner=self.partner) org2 = OrganizationFactory.create(partner=self.partner) OrganizationFactory.create(partner=self.partner) url = reverse('api:v1:organization-detail', kwargs={'uuid': org2.uuid}) extension1 = publisher_factories.OrganizationExtensionFactory( organization=org1) publisher_factories.OrganizationExtensionFactory(organization=org2) assign_perm(OrganizationExtension.VIEW_COURSE, extension1.group, extension1) self.non_staff_user.groups.add(extension1.group) # Check Staff user get all groups response = self.client.get(url) assert response.status_code == 200 self.assert_response_data_valid(response, org2, many=False) # Check non staff user gets 1 group self.client.logout() self.client.login(username=self.non_staff_user.username, password=USER_PASSWORD) response = self.client.get(url) assert response.status_code == 404 url = reverse('api:v1:organization-detail', kwargs={'uuid': org1.uuid}) response = self.client.get(url) assert response.status_code == 200 self.assert_response_data_valid(response, org1, many=False)
def test_process_node(self): # Set the end date in the future data = mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES[0] data['field_course_end_date'] = datetime.datetime.max.strftime('%s') OrganizationFactory.create( uuid=data.get('field_course_school_node', {})[0].get('uuid')) config = DrupalLoaderConfigFactory.create( course_run_ids=data.get('field_course_id'), partner_code=self.partner.short_code, load_unpublished_course_runs=False) data_loader = DrupalCourseMarketingSiteDataLoader( self.partner, self.partner.marketing_site_url_root, ACCESS_TOKEN, 'JWT', 1, # Make this a constant of 1 for no concurrency False, set(config.course_run_ids.split(',')), config.load_unpublished_course_runs) # Need to mock this method so that the GET isn't sent out to the test data server with mock.patch( 'course_discovery.apps.publisher.dataloader.create_courses.' 'transfer_course_image'): data_loader.process_node( mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES[0]) course_metadata_course_run = CourseMetadataCourseRun.objects.get( key=data.get('field_course_id')) self.assertIsNotNone(course_metadata_course_run) self.assertIsNotNone(course_metadata_course_run.course) publisher_course_run = PublisherCourseRun.objects.get( lms_course_id=course_metadata_course_run.key) self.assertIsNotNone(publisher_course_run) self.assertIsNotNone(publisher_course_run.course)
def test_process_node_not_whitelisted(self): # Set the end date in the future data = mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES[0] data['field_course_end_date'] = datetime.datetime.max.strftime('%s') OrganizationFactory.create( uuid=data.get('field_course_school_node', {})[0].get('uuid')) config = DrupalLoaderConfigFactory.create( course_run_ids='SomeFakeCourseRunId', partner_code=self.partner.short_code, load_unpublished_course_runs=False) data_loader = DrupalCourseMarketingSiteDataLoader( self.partner, self.partner.marketing_site_url_root, ACCESS_TOKEN, 'JWT', 1, # Make this a constant of 1 for no concurrency False, set(config.course_run_ids.split(',')), config.load_unpublished_course_runs) # Need to mock this method so that the GET isn't sent out to the test data server with mock.patch( 'course_discovery.apps.publisher.dataloader.create_courses.' 'transfer_course_image'): for body in mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES: data_loader.process_node(body) # Even after looping through all course bodies no new rows should be created course_metadata_course_run = CourseMetadataCourseRun.objects.filter( key=data.get('field_course_id')) self.assertEqual(course_metadata_course_run.count(), 0)
def test_load_unpublished_course_runs_with_flag_enabled_no_course_found( self): # Set the end date in the future data = mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES[0] data['field_course_end_date'] = datetime.datetime.max.strftime('%s') # Set the status to unpublished data['status'] = '0' OrganizationFactory.create( uuid=data.get('field_course_school_node', {})[0].get('uuid')) self.course_run.key = data.get('field_course_id') self.course_run.save() load_unpublished_course_runs = True config = DrupalLoaderConfigFactory.create( course_run_ids=data.get('field_course_id'), partner_code=self.partner.short_code, load_unpublished_course_runs=load_unpublished_course_runs) data_loader = DrupalCourseMarketingSiteDataLoader( self.partner, self.partner.marketing_site_url_root, ACCESS_TOKEN, 'JWT', 1, # Make this a constant of 1 for no concurrency False, set(config.course_run_ids.split(',')), load_unpublished_course_runs) logger_target = 'course_discovery.apps.publisher.management.commands.load_drupal_data.logger' with mock.patch(logger_target) as mock_logger: # Need to mock this method so that the GET isn't sent out to the test data server with mock.patch( 'course_discovery.apps.publisher.dataloader.create_courses.' 'transfer_course_image'): data_loader.process_node( mock_data.UNIQUE_MARKETING_SITE_API_COURSE_BODIES[0]) expected_calls = [ mock.call('No Publisher Course found for Course Run [%s]', self.course_run.key) ] mock_logger.info.assert_has_calls(expected_calls)