from mock import Mock, patch
|
|
from unittest import skipIf
|
|
|
|
from django.core import mail
|
|
from django.utils.timezone import now
|
|
from hc.payments.models import Subscription
|
|
from hc.test import BaseTestCase
|
|
|
|
try:
|
|
import reportlab
|
|
except ImportError:
|
|
reportlab = None
|
|
|
|
|
|
class ChargeWebhookTestCase(BaseTestCase):
|
|
def setUp(self):
|
|
super(ChargeWebhookTestCase, self).setUp()
|
|
self.sub = Subscription(user=self.alice)
|
|
self.sub.subscription_id = "test-id"
|
|
self.sub.customer_id = "test-customer-id"
|
|
self.sub.send_invoices = True
|
|
self.sub.save()
|
|
|
|
self.tx = Mock()
|
|
self.tx.id = "abc123"
|
|
self.tx.customer_details.id = "test-customer-id"
|
|
self.tx.created_at = now()
|
|
self.tx.currency_iso_code = "USD"
|
|
self.tx.amount = 5
|
|
self.tx.subscription_details.billing_period_start_date = now()
|
|
self.tx.subscription_details.billing_period_end_date = now()
|
|
|
|
@skipIf(reportlab is None, "reportlab not installed")
|
|
@patch("hc.payments.views.Subscription.objects.by_braintree_webhook")
|
|
def test_it_works(self, mock_getter):
|
|
mock_getter.return_value = self.sub, self.tx
|
|
|
|
r = self.client.post("/pricing/charge/")
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
# See if email was sent
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
msg = mail.outbox[0]
|
|
self.assertEqual(msg.subject, "Invoice from Mychecks")
|
|
self.assertEqual(msg.to, ["[email protected]"])
|
|
self.assertEqual(msg.attachments[0][0], "MS-HC-ABC123.pdf")
|
|
|
|
@patch("hc.payments.views.Subscription.objects.by_braintree_webhook")
|
|
def test_it_obeys_send_invoices_flag(self, mock_getter):
|
|
mock_getter.return_value = self.sub, self.tx
|
|
|
|
self.sub.send_invoices = False
|
|
self.sub.save()
|
|
|
|
r = self.client.post("/pricing/charge/")
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
# It should not send the email
|
|
self.assertEqual(len(mail.outbox), 0)
|
|
|
|
@skipIf(reportlab is None, "reportlab not installed")
|
|
@patch("hc.payments.views.Subscription.objects.by_braintree_webhook")
|
|
def test_it_uses_invoice_email(self, mock_getter):
|
|
mock_getter.return_value = self.sub, self.tx
|
|
|
|
self.sub.invoice_email = "[email protected]"
|
|
self.sub.save()
|
|
|
|
r = self.client.post("/pricing/charge/")
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
# See if the email was sent to Alice's accountant:
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
self.assertEqual(mail.outbox[0].to, ["[email protected]"])
|