test_utils.py 4.67 KB
Newer Older
1
"""Tests of commerce utilities."""
2
from django.conf import settings
3
from django.test import TestCase
4
from django.test.client import RequestFactory
vkaracic committed
5
from django.test.utils import override_settings
6 7
from mock import patch

vkaracic committed
8
from commerce.models import CommerceConfiguration
9 10
from commerce.utils import EcommerceService
from openedx.core.lib.log_utils import audit_log
11
from openedx.core.djangoapps.site_configuration.tests.test_util import with_site_configuration
12
from student.tests.factories import UserFactory
13

14 15 16
TEST_SITE_CONFIGURATION = {
    'ECOMMERCE_RECEIPT_PAGE_URL': '/checkout/receipt/?order_number='
}
17

18 19

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


28 29
class AuditLogTests(TestCase):
    """Tests of the commerce audit logging helper."""
30
    @patch('openedx.core.lib.log_utils.log')
31 32 33 34 35 36 37 38
    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
39 40 41 42 43 44 45


class EcommerceServiceTests(TestCase):
    """Tests for the EcommerceService helper class."""
    SKU = 'TESTSKU'

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

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

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

    @patch('openedx.core.djangoapps.theming.helpers.is_request_in_themed_site')
    def test_is_enabled_for_microsites(self, is_microsite):
65
        """Verify that is_enabled() returns True if used for a microsite."""
vkaracic committed
66
        is_microsite.return_value = True
67 68
        is_enabled = EcommerceService().is_enabled(self.user)
        self.assertTrue(is_enabled)
vkaracic committed
69 70

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
71 72 73 74 75 76
    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
77
        """Verify that the proper URL is returned."""
78
        url = EcommerceService().get_absolute_ecommerce_url('/test_basket/')
vkaracic committed
79 80 81
        self.assertEqual(url, 'http://ecommerce_url/test_basket/')

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
82 83 84 85 86 87 88 89
    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)
        expected_url = '/checkout/receipt/{}'.format(order_number)
        self.assertEqual(url, expected_url)

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
vkaracic committed
90 91 92 93 94
    def test_checkout_page_url(self):
        """ Verify the checkout page URL is properly constructed and returned. """
        url = EcommerceService().checkout_page_url(self.SKU)
        expected_url = 'http://ecommerce_url/test_basket/?sku={}'.format(self.SKU)
        self.assertEqual(url, expected_url)
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

    @override_settings(ECOMMERCE_PUBLIC_URL_ROOT='http://ecommerce_url')
    @with_site_configuration(configuration=TEST_SITE_CONFIGURATION)
    def test_get_receipt_page_url_with_site_configuration(self):
        order_number = 'ORDER1'
        config = CommerceConfiguration.current()
        config.use_ecommerce_receipt_page = True
        config.save()

        receipt_page_url = EcommerceService().get_receipt_page_url(order_number)
        expected_url = '{ecommerce_root}{receipt_page_url}{order_number}'.format(
            ecommerce_root=settings.ECOMMERCE_PUBLIC_URL_ROOT,
            order_number=order_number,
            receipt_page_url=TEST_SITE_CONFIGURATION['ECOMMERCE_RECEIPT_PAGE_URL']
        )
        self.assertEqual(receipt_page_url, expected_url)