# -*- coding: utf-8 -*- import mock from zerver.lib.test_classes import WebhookTestCase class StripeHookTests(WebhookTestCase): STREAM_NAME = 'test' URL_TEMPLATE = "/api/v1/external/stripe?&api_key={api_key}&stream={stream}" FIXTURE_DIR_NAME = 'stripe' def test_charge_dispute_closed(self) -> None: expected_topic = u"disputes" expected_message = u"[Dispute](https://dashboard.stripe.com/disputes/dp_00000000000000) closed. Current status: won." self.send_and_test_stream_message('charge_dispute_closed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_charge_dispute_created(self) -> None: expected_topic = u"disputes" expected_message = u"[Dispute](https://dashboard.stripe.com/disputes/dp_00000000000000) created. Current status: needs response." self.send_and_test_stream_message('charge_dispute_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_charge_failed(self) -> None: expected_topic = u"charges" expected_message = u"[Charge](https://dashboard.stripe.com/charges/ch_00000000000000) for 1.00 AUD failed" self.send_and_test_stream_message('charge_failed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") # Credit card charge def test_charge_succeeded__card(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Charge](https://dashboard.stripe.com/charges/ch_000000000000000000000000) for 1.00 AUD succeeded" self.send_and_test_stream_message('charge_succeeded__card', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") # ACH payment (really a 'payment', rather than a 'charge') def test_charge_succeeded__invoice(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Payment](https://dashboard.stripe.com/payments/py_000000000000000000000000) for $1.00 succeeded" self.send_and_test_stream_message('charge_succeeded__invoice', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_created(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Customer](https://dashboard.stripe.com/customers/cus_00000000000000) created" self.send_and_test_stream_message('customer_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_created_email(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Customer](https://dashboard.stripe.com/customers/cus_00000000000000) created\nEmail: example@abc.com" self.send_and_test_stream_message('customer_created_email', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_deleted(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Customer](https://dashboard.stripe.com/customers/cus_00000000000000) deleted" self.send_and_test_stream_message('customer_deleted', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_subscription_created(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"""\ [Subscription](https://dashboard.stripe.com/subscriptions/sub_E6STM5w5EX3K28) created Plan: [flatrate](https://dashboard.stripe.com/plans/plan_E6SQ6RAtmLVtzg) Quantity: 800 Billing method: send invoice""" self.send_and_test_stream_message('customer_subscription_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_subscription_deleted(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Subscription](https://dashboard.stripe.com/subscriptions/sub_00000000000000) deleted" self.send_and_test_stream_message('customer_subscription_deleted', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_subscription_updated(self) -> None: expected_topic = u"cus_00000000000000" expected_message = """\ [Subscription](https://dashboard.stripe.com/subscriptions/sub_E6STM5w5EX3K28) updated * Billing cycle anchor is now Nov 01, 2019, 12:00:00 UTC * Current period end is now Nov 01, 2019, 12:00:00 UTC * Current period start is now Dec 06, 2018, 05:53:55 UTC * Start is now Dec 06, 2018, 05:53:55 UTC * Status is now trialing * Trial end is now Nov 01, 2019, 12:00:00 UTC * Trial start is now Dec 06, 2018, 05:53:55 UTC""" self.send_and_test_stream_message('customer_subscription_updated', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_subscription_trial_will_end(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"[Subscription](https://dashboard.stripe.com/subscriptions/sub_00000000000000) trial will end in 3 days" # 3 days before the end of the trial, plus a little bit to make sure the rounding is working with mock.patch('time.time', return_value=1480892861 - 3*3600*24 + 100): # use fixture named stripe_customer_subscription_trial_will_end self.send_and_test_stream_message('customer_subscription_trial_will_end', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_updated__account_balance(self) -> None: expected_topic = "cus_00000000000000" expected_message = "[Customer](https://dashboard.stripe.com/customers/cus_00000000000000) updated" + \ "\n* Account balance is now 100" self.send_and_test_stream_message('customer_updated__account_balance', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_customer_discount_created(self) -> None: expected_topic = u"cus_00000000000000" expected_message = u"Discount created ([25.5% off](https://dashboard.stripe.com/coupons/25_00000000000000))." self.send_and_test_stream_message('customer_discount_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_payout_canceled(self) -> None: expected_topic = u"Payout po_00000000000000" expected_message = u"**[Payout](https://dashboard.stripe.com/payout/po_00000000000000)** for amount **$11.00** has been canceled." self.send_and_test_stream_message('payout_canceled', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_payout_created(self) -> None: expected_topic = u"Payout po_00000000000000" expected_message = u"**[Payout](https://dashboard.stripe.com/payout/po_00000000000000)** for amount **$11.00** has been created." self.send_and_test_stream_message('payout_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_payout_failed(self) -> None: expected_topic = u"Payout po_00000000000000" expected_message = u"**[Payout](https://dashboard.stripe.com/payout/po_00000000000000)** for amount **$11.00** has failed." self.send_and_test_stream_message('payout_failed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_payout_paid(self) -> None: expected_topic = u"Payout po_00000000000000" expected_message = u"**[Payout](https://dashboard.stripe.com/payout/po_00000000000000)** for amount **$11.00** has been paid." self.send_and_test_stream_message('payout_paid', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_payout_updated(self) -> None: expected_topic = u"Payout po_00000000000000" expected_message = u"**[Payout](https://dashboard.stripe.com/payout/po_00000000000000)** for amount **$11.00** has been updated." self.send_and_test_stream_message('payout_updated', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_created(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been created." self.send_and_test_stream_message('invoice_created', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_deleted(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been deleted." self.send_and_test_stream_message('invoice_deleted', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_finalized(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been finalized." self.send_and_test_stream_message('invoice_finalized', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_marked_uncollectible(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been marked as uncollectible." self.send_and_test_stream_message('invoice_marked_uncollectible', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_payment_failed(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has failed." self.send_and_test_stream_message('invoice_payment_failed', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_payment_succeeded(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has succeeded." self.send_and_test_stream_message('invoice_payment_succeeded', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_sent(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been sent." self.send_and_test_stream_message('invoice_sent', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_upcoming(self) -> None: expected_topic = u"invoice None" expected_message = u"An upcoming **[invoice](https://dashboard.stripe.com/invoices/None)** for the payment of amount **$10.00** has been created." self.send_and_test_stream_message('invoice_upcoming', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_updated(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been updated." self.send_and_test_stream_message('invoice_updated', expected_topic, expected_message, content_type="application/x-www-form-urlencoded") def test_invoice_voided(self) -> None: expected_topic = u"invoice in_00000000000000" expected_message = u"An **[invoice](https://dashboard.stripe.com/invoices/in_00000000000000)** for the payment of amount **$10.00** has been voided." self.send_and_test_stream_message('invoice_voided', expected_topic, expected_message, content_type="application/x-www-form-urlencoded")