test_utils.py 4.41 KB
Newer Older
1
"""Tests of commerce utilities."""
2 3 4
from urllib import urlencode

import ddt
5
from django.conf import settings
6
from django.test import TestCase
7
from django.test.client import RequestFactory
vkaracic committed
8
from django.test.utils import override_settings
9
from mock import patch
10
from waffle.testutils import override_switch
11

12
from openedx.core.lib.log_utils import audit_log
13
from student.tests.factories import UserFactory
14

15 16 17
from ..models import CommerceConfiguration
from ..utils import EcommerceService

18

19
def update_commerce_config(enabled=False, checkout_page='/test_basket/'):
20 21 22
    """ Enable / Disable CommerceConfiguration model """
    CommerceConfiguration.objects.create(
        checkout_on_ecommerce_service=enabled,
23
        single_course_checkout_page=checkout_page,
24 25 26
    )


27 28
class AuditLogTests(TestCase):
    """Tests of the commerce audit logging helper."""
29
    @patch('openedx.core.lib.log_utils.log')
30 31 32 33 34 35 36 37
    def test_log_message(self, mock_log):
        """Verify that log messages are constructed correctly."""
        audit_log('foo', qux='quux', bar='baz')

        # Verify that the logged message contains comma-separated
        # key-value pairs ordered alphabetically by key.
        message = 'foo: bar="baz", qux="quux"'
        self.assertTrue(mock_log.info.called_with(message))
vkaracic committed
38 39


40
@ddt.ddt
vkaracic committed
41 42 43 44
class EcommerceServiceTests(TestCase):
    """Tests for the EcommerceService helper class."""

    def setUp(self):
45 46 47
        self.request_factory = RequestFactory()
        self.user = UserFactory.create()
        self.request = self.request_factory.get("foo")
48
        update_commerce_config(enabled=True)
vkaracic committed
49 50 51 52
        super(EcommerceServiceTests, self).setUp()

    def test_is_enabled(self):
        """Verify that is_enabled() returns True when ecomm checkout is enabled. """
53
        is_enabled = EcommerceService().is_enabled(self.user)
vkaracic committed
54 55 56 57 58
        self.assertTrue(is_enabled)

        config = CommerceConfiguration.current()
        config.checkout_on_ecommerce_service = False
        config.save()
59
        is_not_enabled = EcommerceService().is_enabled(self.user)
vkaracic committed
60 61
        self.assertFalse(is_not_enabled)

62 63 64 65 66 67 68 69
    @override_switch(settings.DISABLE_ACCOUNT_ACTIVATION_REQUIREMENT_SWITCH, active=True)
    def test_is_enabled_activation_requirement_disabled(self):
        """Verify that is_enabled() returns True when ecomm checkout is enabled. """
        self.user.is_active = False
        self.user.save()
        is_enabled = EcommerceService().is_enabled(self.user)
        self.assertTrue(is_enabled)

vkaracic committed
70 71
    @patch('openedx.core.djangoapps.theming.helpers.is_request_in_themed_site')
    def test_is_enabled_for_microsites(self, is_microsite):
72
        """Verify that is_enabled() returns True if used for a microsite."""
vkaracic committed
73
        is_microsite.return_value = True
74 75
        is_enabled = EcommerceService().is_enabled(self.user)
        self.assertTrue(is_enabled)
vkaracic committed
76 77

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
78 79 80 81 82 83
    def test_ecommerce_url_root(self):
        """Verify that the proper root URL is returned."""
        self.assertEqual(EcommerceService().ecommerce_url_root, 'http://ecommerce_url')

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
    def test_get_absolute_ecommerce_url(self):
vkaracic committed
84
        """Verify that the proper URL is returned."""
85
        url = EcommerceService().get_absolute_ecommerce_url('/test_basket/')
vkaracic committed
86 87 88
        self.assertEqual(url, 'http://ecommerce_url/test_basket/')

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
89 90 91 92
    def test_get_receipt_page_url(self):
        """Verify that the proper Receipt page URL is returned."""
        order_number = 'ORDER1'
        url = EcommerceService().get_receipt_page_url(order_number)
93
        expected_url = 'http://ecommerce_url/checkout/receipt/?order_number={}'.format(order_number)
94 95 96
        self.assertEqual(url, expected_url)

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
97 98
    @ddt.data(['TESTSKU'], ['TESTSKU1', 'TESTSKU2', 'TESTSKU3'])
    def test_get_checkout_page_url(self, skus):
vkaracic committed
99
        """ Verify the checkout page URL is properly constructed and returned. """
100
        url = EcommerceService().get_checkout_page_url(*skus)
101 102 103
        config = CommerceConfiguration.current()
        expected_url = '{root}{basket_url}?{skus}'.format(
            basket_url=config.MULTIPLE_ITEMS_BASKET_PAGE_URL,
104 105 106
            root=settings.ECOMMERCE_PUBLIC_URL_ROOT,
            skus=urlencode({'sku': skus}, doseq=True),
        )
vkaracic committed
107
        self.assertEqual(url, expected_url)