Commit f4b2c197 by jsa

don’t trigger a refund request in otto, if otto requested unenrollment.

XCOM-396
parent 445d0dab
...@@ -5,6 +5,7 @@ import logging ...@@ -5,6 +5,7 @@ import logging
from urlparse import urljoin from urlparse import urljoin
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import AnonymousUser
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
...@@ -32,6 +33,13 @@ def handle_unenroll_done(sender, course_enrollment=None, skip_refund=False, **kw ...@@ -32,6 +33,13 @@ def handle_unenroll_done(sender, course_enrollment=None, skip_refund=False, **kw
if course_enrollment and course_enrollment.refundable(): if course_enrollment and course_enrollment.refundable():
try: try:
request_user = get_request_user() or course_enrollment.user request_user = get_request_user() or course_enrollment.user
if isinstance(request_user, AnonymousUser):
# Assume the request was initiated via server-to-server
# api call (presumably Otto). In this case we cannot
# construct a client to call Otto back anyway, because
# the client does not work anonymously, and furthermore,
# there's certainly no need to inform Otto about this request.
return
refund_seat(course_enrollment, request_user) refund_seat(course_enrollment, request_user)
except: # pylint: disable=bare-except except: # pylint: disable=bare-except
# don't assume the signal was fired with `send_robust`. # don't assume the signal was fired with `send_robust`.
......
""" """
Tests for signal handling in commerce djangoapp. Tests for signal handling in commerce djangoapp.
""" """
from django.contrib.auth.models import AnonymousUser
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings from django.test.utils import override_settings
...@@ -109,6 +110,12 @@ class TestRefundSignal(TestCase): ...@@ -109,6 +110,12 @@ class TestRefundSignal(TestCase):
self.assertTrue(mock_refund_seat.called) self.assertTrue(mock_refund_seat.called)
self.assertEqual(mock_refund_seat.call_args[0], (self.course_enrollment, self.requester)) self.assertEqual(mock_refund_seat.call_args[0], (self.course_enrollment, self.requester))
# HTTP user is another server (AnonymousUser): do not try to initiate a refund at all.
mock_get_request_user.return_value = AnonymousUser()
mock_refund_seat.reset_mock()
self.send_signal()
self.assertFalse(mock_refund_seat.called)
@mock.patch('commerce.signals.log.warning') @mock.patch('commerce.signals.log.warning')
def test_not_authorized_warning(self, mock_log_warning): def test_not_authorized_warning(self, mock_log_warning):
""" """
......
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