Beispiel #1
0
class CourseApiTests(CreditApiTestBase):
    """Test Python API for course product information."""
    def setUp(self):
        super(CourseApiTests, self).setUp()
        self.worker_user = User.objects.create_user(username=TEST_ECOMMERCE_WORKER)
        self.add_credit_course(self.course_key)
        self.credit_config = CreditConfig(cache_ttl=100, enabled=True)
        self.credit_config.save()

        # Add another provider.
        CreditProvider.objects.get_or_create(
            provider_id='ASU',
            display_name='Arizona State University',
            provider_url=self.PROVIDER_URL,
            provider_status_url=self.PROVIDER_STATUS_URL,
            provider_description=self.PROVIDER_DESCRIPTION,
            enable_integration=self.ENABLE_INTEGRATION,
            fulfillment_instructions=self.FULFILLMENT_INSTRUCTIONS,
            thumbnail_url=self.THUMBNAIL_URL
        )
        self.assertFalse(hasattr(self.worker_user, 'profile'))

    @httpretty.activate
    def test_get_credit_provider_display_names_method(self):
        """Verify that parsed providers list is returns after getting course production information."""
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

    @httpretty.activate
    @mock.patch('edx_rest_api_client.client.EdxRestApiClient.__init__')
    def test_get_credit_provider_display_names_method_with_exception(self, mock_init):
        """Verify that in case of any exception it logs the error and return."""
        mock_init.side_effect = Exception
        response = get_credit_provider_display_names(self.course_key)
        self.assertTrue(mock_init.called)
        self.assertEqual(response, None)

    @httpretty.activate
    def test_get_credit_provider_display_names_caching(self):
        """Verify that providers list is cached."""
        self.assertTrue(self.credit_config.is_cache_enabled)
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)

        # Warm up the cache.
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        # Hit the cache.
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        # Verify only one request was made.
        self.assertEqual(len(httpretty.httpretty.latest_requests), 1)

    @httpretty.activate
    def test_get_credit_provider_display_names_without_caching(self):
        """Verify that providers list is not cached."""
        self.credit_config.cache_ttl = 0
        self.credit_config.save()
        self.assertFalse(self.credit_config.is_cache_enabled)

        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)

        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        self.assertEqual(len(httpretty.httpretty.latest_requests), 2)

    @httpretty.activate
    @ddt.data(
        (None, None),
        ({'products': []}, []),
        (
            {
                'products': [{'expires': '', 'attribute_values': [{'name': 'credit_provider', 'value': 'ASU'}]}]
            }, ['Arizona State University']
        ),
        (
            {
                'products': [{'expires': '', 'attribute_values': [{'name': 'namespace', 'value': 'grade'}]}]
            }, []
        ),
        (
            {
                'products': [
                    {
                        'expires': '', 'attribute_values':
                        [
                            {'name': 'credit_provider', 'value': 'ASU'},
                            {'name': 'credit_provider', 'value': 'hogwarts'},
                            {'name': 'course_type', 'value': 'credit'}
                        ]
                    }
                ]
            }, ['Hogwarts School of Witchcraft and Wizardry', 'Arizona State University']
        )
    )
    @ddt.unpack
    def test_get_provider_api_with_multiple_data(self, data, expected_data):
        self._mock_ecommerce_courses_api(self.course_key, data)
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertEqual(expected_data, response_providers)

    @httpretty.activate
    def test_get_credit_provider_display_names_without_providers(self):
        """Verify that if all providers are in-active than method return empty list."""
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)
        CreditProvider.objects.all().update(active=False)
        self.assertEqual(get_credit_provider_display_names(self.course_key), [])

    @ddt.data(None, ['asu'], ['asu', 'co'], ['asu', 'co', 'mit'])
    def test_make_providers_strings(self, providers):
        """ Verify that method returns given provider list as comma separated string. """

        provider_string = make_providers_strings(providers)

        if not providers:
            self.assertEqual(provider_string, None)

        elif len(providers) == 1:
            self.assertEqual(provider_string, providers[0])

        elif len(providers) == 2:
            self.assertEqual(provider_string, 'asu and co')

        else:
            self.assertEqual(provider_string, 'asu, co, and mit')
Beispiel #2
0
class CourseApiTests(CreditApiTestBase):
    """Test Python API for course product information."""
    def setUp(self):
        super(CourseApiTests, self).setUp()
        self.worker_user = User.objects.create_user(username=TEST_ECOMMERCE_WORKER)
        self.add_credit_course(self.course_key)
        self.credit_config = CreditConfig(cache_ttl=100, enabled=True)
        self.credit_config.save()

        # Add another provider.
        CreditProvider.objects.get_or_create(
            provider_id='ASU',
            display_name='Arizona State University',
            provider_url=self.PROVIDER_URL,
            provider_status_url=self.PROVIDER_STATUS_URL,
            provider_description=self.PROVIDER_DESCRIPTION,
            enable_integration=self.ENABLE_INTEGRATION,
            fulfillment_instructions=self.FULFILLMENT_INSTRUCTIONS,
            thumbnail_url=self.THUMBNAIL_URL
        )
        self.assertFalse(hasattr(self.worker_user, 'profile'))

    @httpretty.activate
    def test_get_credit_provider_display_names_method(self):
        """Verify that parsed providers list is returns after getting course production information."""
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

    @httpretty.activate
    @mock.patch('edx_rest_api_client.client.EdxRestApiClient.__init__')
    def test_get_credit_provider_display_names_method_with_exception(self, mock_init):
        """Verify that in case of any exception it logs the error and return."""
        mock_init.side_effect = Exception
        response = get_credit_provider_display_names(self.course_key)
        self.assertTrue(mock_init.called)
        self.assertEqual(response, None)

    @httpretty.activate
    def test_get_credit_provider_display_names_caching(self):
        """Verify that providers list is cached."""
        self.assertTrue(self.credit_config.is_cache_enabled)
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)

        # Warm up the cache.
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        # Hit the cache.
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        # Verify only one request was made.
        self.assertEqual(len(httpretty.httpretty.latest_requests), 1)

    @httpretty.activate
    def test_get_credit_provider_display_names_without_caching(self):
        """Verify that providers list is not cached."""
        self.credit_config.cache_ttl = 0
        self.credit_config.save()
        self.assertFalse(self.credit_config.is_cache_enabled)

        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)

        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertListEqual(self.PROVIDERS_LIST, response_providers)

        self.assertEqual(len(httpretty.httpretty.latest_requests), 2)

    @httpretty.activate
    @ddt.data(
        (None, None),
        ({'products': []}, []),
        (
            {
                'products': [{'expires': '', 'attribute_values': [{'name': 'credit_provider', 'value': 'ASU'}]}]
            }, ['Arizona State University']
        ),
        (
            {
                'products': [{'expires': '', 'attribute_values': [{'name': 'namespace', 'value': 'grade'}]}]
            }, []
        ),
        (
            {
                'products': [
                    {
                        'expires': '', 'attribute_values':
                        [
                            {'name': 'credit_provider', 'value': 'ASU'},
                            {'name': 'credit_provider', 'value': 'hogwarts'},
                            {'name': 'course_type', 'value': 'credit'}
                        ]
                    }
                ]
            }, ['Hogwarts School of Witchcraft and Wizardry', 'Arizona State University']
        )
    )
    @ddt.unpack
    def test_get_provider_api_with_multiple_data(self, data, expected_data):
        self._mock_ecommerce_courses_api(self.course_key, data)
        response_providers = get_credit_provider_display_names(self.course_key)
        self.assertEqual(expected_data, response_providers)

    @httpretty.activate
    def test_get_credit_provider_display_names_without_providers(self):
        """Verify that if all providers are in-active than method return empty list."""
        self._mock_ecommerce_courses_api(self.course_key, self.COURSE_API_RESPONSE)
        CreditProvider.objects.all().update(active=False)
        self.assertEqual(get_credit_provider_display_names(self.course_key), [])

    @ddt.data(None, ['asu'], ['asu', 'co'], ['asu', 'co', 'mit'])
    def test_make_providers_strings(self, providers):
        """ Verify that method returns given provider list as comma separated string. """

        provider_string = make_providers_strings(providers)

        if not providers:
            self.assertEqual(provider_string, None)

        elif len(providers) == 1:
            self.assertEqual(provider_string, providers[0])

        elif len(providers) == 2:
            self.assertEqual(provider_string, 'asu and co')

        else:
            self.assertEqual(provider_string, 'asu, co, and mit')