Commit 0743a866 by christopher lee Committed by Christopher Lee

Bug fix for BasketCalculate when username or is_anonymous is not in url

LEARNER-5285
parent cae646a0
...@@ -572,8 +572,7 @@ class BasketCalculateViewTests(ProgramTestMixin, TestCase): ...@@ -572,8 +572,7 @@ class BasketCalculateViewTests(ProgramTestMixin, TestCase):
"""Verify a request made with the is_anonymous parameter is cached""" """Verify a request made with the is_anonymous parameter is cached"""
url_with_one_sku = self._generate_sku_url(self.products[0:1], username=None) url_with_one_sku = self._generate_sku_url(self.products[0:1], username=None)
url_with_two_skus = self._generate_sku_url(self.products[0:2], username=None) url_with_two_skus = self._generate_sku_url(self.products[0:2], username=None)
url_with_two_skus_reversed = self._generate_sku_url( url_with_two_skus_reversed = self._generate_sku_url([self.products[0], self.products[1]], username=None)
[self.products[0], self.products[1]], username=None)
expected = {'Test Succeeded': True} expected = {'Test Succeeded': True}
mock_calculate_basket.return_value = expected mock_calculate_basket.return_value = expected
...@@ -628,6 +627,30 @@ class BasketCalculateViewTests(ProgramTestMixin, TestCase): ...@@ -628,6 +627,30 @@ class BasketCalculateViewTests(ProgramTestMixin, TestCase):
self.assertFalse(mock_calculate_basket.called, msg='The cache should be hit.') self.assertFalse(mock_calculate_basket.called, msg='The cache should be hit.')
self.assertEqual(response.data, expected) self.assertEqual(response.data, expected)
@mock.patch('ecommerce.extensions.api.v2.views.baskets.logger.warning')
@mock.patch('ecommerce.extensions.api.v2.views.baskets.BasketCalculateView._calculate_temporary_basket')
@override_flag('disable_calculate_temporary_basket_atomic_transaction', active=True)
def test_basket_calculate_no_query_parameters(self, mock_calculate_basket, mock_logger):
"""Verify a request made without query parameters uses the request user"""
expected = {'Test Succeeded': True}
mock_calculate_basket.return_value = expected
url_with_one_sku_no_anon = self._generate_sku_url(self.products[0:1], add_query_params=False)
# Call BasketCalculate to test that we do not hit the cache
response = self.client.get(url_with_one_sku_no_anon)
self.assertEqual(response.status_code, 200)
self.assertTrue(mock_calculate_basket.called, msg='The cache should be missed.')
self.assertTrue(mock_logger.called)
self.assertEqual(response.data, expected)
mock_calculate_basket.reset_mock()
# Call BasketCalculate again to test that we do not hit the cache
response = self.client.get(url_with_one_sku_no_anon)
self.assertEqual(response.status_code, 200)
self.assertTrue(mock_calculate_basket.called, msg='The cache should be missed.')
self.assertEqual(response.data, expected)
@httpretty.activate @httpretty.activate
@mock.patch('ecommerce.extensions.api.v2.views.baskets.logger.warning') @mock.patch('ecommerce.extensions.api.v2.views.baskets.logger.warning')
@mock.patch('ecommerce.extensions.api.v2.views.baskets.BasketCalculateView._calculate_temporary_basket') @mock.patch('ecommerce.extensions.api.v2.views.baskets.BasketCalculateView._calculate_temporary_basket')
......
...@@ -478,6 +478,7 @@ class BasketCalculateView(generics.GenericAPIView): ...@@ -478,6 +478,7 @@ class BasketCalculateView(generics.GenericAPIView):
logger.warning("Request to Basket Calculate must supply either username or is_anonymous query" logger.warning("Request to Basket Calculate must supply either username or is_anonymous query"
" param. Requesting user=%s. Future versions of this API will treat this " " param. Requesting user=%s. Future versions of this API will treat this "
"WARNING as an ERROR and raise an exception.", basket_owner.username) "WARNING as an ERROR and raise an exception.", basket_owner.username)
requested_username = request.user.username
# If a username is passed in, validate that the user has staff access or is the same user. # If a username is passed in, validate that the user has staff access or is the same user.
if requested_username: if requested_username:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment