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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
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)