Ejemplo n.º 1
0
    def test_update_transfer(self, event_retrieve_mock, transfer_retrieve_mock):
        fake_event_created = deepcopy(FAKE_EVENT_TRANSFER_CREATED)

        fake_event_updated = deepcopy(fake_event_created)
        fake_event_updated.update({"id": "evt_000000000000000000000000"})
        fake_event_updated.update({"type": "transfer.updated"})
        fake_event_updated["data"]["object"]["amount"] = 3057
        fake_event_updated["data"]["object"]["status"] = "fish"

        event_retrieve_mock.side_effect = [fake_event_created, fake_event_updated]
        transfer_retrieve_mock.side_effect = [
            fake_event_created["data"]["object"],
            fake_event_updated["data"]["object"]
        ]

        # Create transfer
        created_event = Event.sync_from_stripe_data(fake_event_created)
        created_event.invoke_webhook_handlers()

        # Signal a transfer update
        updated_event = Event.sync_from_stripe_data(fake_event_updated)
        updated_event.invoke_webhook_handlers()

        transfer_instance = Transfer.objects.get(status="fish")
        self.assertEqual(2, transfer_retrieve_mock.call_count)

        # Test to string to ensure data was updated
        self.assertEqual("<amount={amount}, status={status}, stripe_id={stripe_id}>".format(
            amount=fake_event_updated["data"]["object"]["amount"] / decimal.Decimal("100"),
            status=fake_event_updated["data"]["object"]["status"],
            stripe_id=fake_event_updated["data"]["object"]["id"]
        ), str(transfer_instance))
Ejemplo n.º 2
0
    def test_subscription_schedule_released(self, customer_retrieve_mock,
                                            schedule_retrieve_mock):

        fake_stripe_event = deepcopy(FAKE_EVENT_SUBSCRIPTION_SCHEDULE_UPDATED)
        fake_stripe_event["data"]["object"]["released_at"] = 1605058030
        fake_stripe_event["data"]["object"]["status"] = "released"
        fake_stripe_event["data"]["previous_attributes"] = {
            "released_at": None,
            "status": "not_started",
        }

        schedule_retrieve_mock.return_value = fake_stripe_event["data"][
            "object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        schedule = SubscriptionSchedule.objects.get(
            id=fake_stripe_event["data"]["object"]["id"])

        assert schedule.status == "released"
        assert schedule.released_at is not None

        schedule_retrieve_mock.return_value = FAKE_EVENT_SUBSCRIPTION_SCHEDULE_RELEASED[
            "data"]["object"]

        event = Event.sync_from_stripe_data(
            FAKE_EVENT_SUBSCRIPTION_SCHEDULE_RELEASED)
        event.invoke_webhook_handlers()

        schedule.refresh_from_db()

        assert schedule.status == "released"
        assert schedule.released_at is not None
Ejemplo n.º 3
0
    def test_process_event_race_condition(self, transfer_retrieve_mock):
        transfer = Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))
        transfer_retrieve_mock.reset_mock()
        event_data = deepcopy(FAKE_EVENT_TRANSFER_CREATED)

        # emulate the race condition in _get_or_create_from_stripe_object where
        # an object is created by a different request during the call
        #
        # Sequence of events:
        # 1) first Transfer.stripe_objects.get fails with DoesNotExist
        #    (due to it not existing in reality, but due to our side_effect in the test)
        # 2) object is really created by a different request in reality
        # 3) Transfer._create_from_stripe_object fails with IntegrityError due to
        #    duplicate id
        # 4) second Transfer.stripe_objects.get succeeds
        #    (due to being created by step 2 in reality, due to side effect in the test)
        side_effect = [Transfer.DoesNotExist(), transfer]

        with patch(
                "djstripe.models.Transfer.stripe_objects.get",
                side_effect=side_effect,
                autospec=True,
        ) as transfer_objects_get_mock:
            Event.process(event_data)

        self.assertEqual(transfer_objects_get_mock.call_count, 2)
        self.assertEqual(transfer_retrieve_mock.call_count, 1)
Ejemplo n.º 4
0
    def test_process_event_failure_rolls_back(self,
                                              invoke_webhook_handlers_mock):
        """Test that process event rolls back event creation on error
		"""
        class HandlerException(Exception):
            pass

        invoke_webhook_handlers_mock.side_effect = HandlerException
        real_create_from_stripe_object = Event._create_from_stripe_object

        def side_effect(*args, **kwargs):
            return real_create_from_stripe_object(*args, **kwargs)

        event_data = deepcopy(FAKE_EVENT_TRANSFER_CREATED)

        self.assertFalse(
            Event.objects.filter(
                id=FAKE_EVENT_TRANSFER_CREATED["id"]).exists())

        with self.assertRaises(HandlerException), patch(
                "djstripe.models.Event._create_from_stripe_object",
                side_effect=side_effect,
                autospec=True,
        ) as create_from_stripe_object_mock:
            Event.process(data=event_data)

        create_from_stripe_object_mock.assert_called_once_with(event_data)
        self.assertFalse(
            Event.objects.filter(
                id=FAKE_EVENT_TRANSFER_CREATED["id"]).exists())
Ejemplo n.º 5
0
    def test_update_transfer(self, event_retrieve_mock, transfer_retrieve_mock):
        fake_event_created = deepcopy(FAKE_EVENT_TRANSFER_CREATED)

        fake_event_updated = deepcopy(fake_event_created)
        fake_event_updated.update({"id": "evt_000000000000000000000000"})
        fake_event_updated.update({"type": "transfer.updated"})
        fake_event_updated["data"]["object"]["amount"] = 3057
        fake_event_updated["data"]["object"]["status"] = "fish"

        event_retrieve_mock.side_effect = [fake_event_created, fake_event_updated]
        transfer_retrieve_mock.side_effect = [
            fake_event_created["data"]["object"],
            fake_event_updated["data"]["object"]
        ]

        # Create transfer
        created_event = Event.sync_from_stripe_data(fake_event_created)
        created_event.validate()
        created_event.process()

        # Signal a transfer update
        updated_event = Event.sync_from_stripe_data(fake_event_updated)
        updated_event.validate()
        updated_event.process()

        transfer_instance = Transfer.objects.get(status="fish")
        self.assertEqual(2, transfer_retrieve_mock.call_count)

        # Test to string to ensure data was updated
        self.assertEquals("<amount={amount}, status={status}, stripe_id={stripe_id}>".format(
            amount=fake_event_updated["data"]["object"]["amount"] / decimal.Decimal("100"),
            status=fake_event_updated["data"]["object"]["status"],
            stripe_id=fake_event_updated["data"]["object"]["id"]
        ), str(transfer_instance))
Ejemplo n.º 6
0
    def test_invoice_created(self, event_retrieve_mock, invoice_retrieve_mock,
                             charge_retrieve_mock, customer_retrieve_mock,
                             subscription_retrieve_mock, default_account_mock):
        default_account_mock.return_value = Account.objects.create()

        user = get_user_model().objects.create_user(username="******",
                                                    email="*****@*****.**")
        FAKE_CUSTOMER.create_for_user(user)

        fake_stripe_event = deepcopy(FAKE_EVENT_INVOICE_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        invoice_retrieve_mock.return_value = fake_stripe_event["data"][
            "object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)

        event.validate()
        event.process()

        invoice = Invoice.objects.get(
            stripe_id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(
            invoice.amount_due,
            fake_stripe_event["data"]["object"]["amount_due"] /
            decimal.Decimal("100"))
        self.assertEqual(invoice.paid,
                         fake_stripe_event["data"]["object"]["paid"])
Ejemplo n.º 7
0
    def test_process_event_exists(self, mock_objects,
                                  mock__create_from_stripe_object,
                                  mock_atomic):
        """Test that process event returns the existing event and skips webhook processing
		when the event already exists.
		"""
        # Set up mocks
        mock_objects.filter.return_value.exists.return_value = True
        mock_data = {"id": "foo_id", "other_stuff": "more_things"}

        result = Event.process(data=mock_data)

        # Make sure that the db was queried and the existing results used.
        mock_objects.filter.assert_called_once_with(id=mock_data["id"])
        mock_objects.filter.return_value.exists.assert_called_once_with()
        mock_objects.filter.return_value.first.assert_called_once_with()
        # Make sure the webhook actions and event object creation were not performed.
        mock_atomic.return_value.__enter__.assert_not_called()
        # Using assert_not_called() doesn't work on this in Python 3.5
        self.assertEqual(mock__create_from_stripe_object.call_count, 0)
        mock__create_from_stripe_object.return_value.invoke_webhook_handlers.assert_not_called(
        )
        # Make sure the existing event was returned.
        self.assertEqual(mock_objects.filter.return_value.first.return_value,
                         result)
Ejemplo n.º 8
0
	def test_invoiceitem_created(
		self,
		product_retrieve_mock,
		event_retrieve_mock,
		invoiceitem_retrieve_mock,
		invoice_retrieve_mock,
		charge_retrieve_mock,
		subscription_retrieve_mock,
		balance_transaction_retrieve_mock,
		default_account_mock,
	):
		default_account_mock.return_value = default_account()

		user = get_user_model().objects.create_user(
			username="******", email="*****@*****.**"
		)
		FAKE_CUSTOMER_II.create_for_user(user)

		fake_stripe_event = deepcopy(FAKE_EVENT_INVOICEITEM_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event

		invoiceitem_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		invoiceitem = InvoiceItem.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertEqual(
			invoiceitem.amount,
			fake_stripe_event["data"]["object"]["amount"] / decimal.Decimal("100"),
		)
Ejemplo n.º 9
0
    def test_account_deauthorized_event(self, event_retrieve_mock):
        fake_stripe_event = deepcopy(
            FAKE_EVENT_ACCOUNT_APPLICATION_DEAUTHORIZED)

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.validate()
        event.process()
Ejemplo n.º 10
0
    def test_handle_event_payment_succeeded(self, invoice_retrieve_mock, sync_invoice_mock):
        fake_event = Event(kind="invoice.payment_succeeded", validated_message={"data": {"object": {"id": "lock"}}})

        invoice_webhook_handler(fake_event, fake_event.message["data"], "invoice", "payment_failed")

        invoice_retrieve_mock.assert_called_once_with("lock")
        sync_invoice_mock.assert_called_once_with("key", send_receipt=True)
Ejemplo n.º 11
0
    def test_charge_created(
        self,
        subscription_retrieve_mock,
        product_retrieve_mock,
        invoice_retrieve_mock,
        event_retrieve_mock,
        paymentmethod_card_retrieve_mock,
        payment_intent_retrieve_mock,
        charge_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_mock,
    ):
        FAKE_CUSTOMER.create_for_user(self.user)
        fake_stripe_event = deepcopy(FAKE_EVENT_CHARGE_SUCCEEDED)
        event_retrieve_mock.return_value = fake_stripe_event
        charge_retrieve_mock.return_value = fake_stripe_event["data"]["object"]
        account_mock.return_value = default_account()

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        charge = Charge.objects.get(
            id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(
            charge.amount,
            fake_stripe_event["data"]["object"]["amount"] /
            decimal.Decimal("100"),
        )
        self.assertEqual(charge.status,
                         fake_stripe_event["data"]["object"]["status"])
Ejemplo n.º 12
0
    def test_invoice_created_no_existing_customer(
        self,
        product_retrieve_mock,
        paymentmethod_card_retrieve_mock,
        event_retrieve_mock,
        invoice_retrieve_mock,
        payment_intent_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = default_account()

        fake_stripe_event = deepcopy(FAKE_EVENT_INVOICE_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        invoice_retrieve_mock.return_value = fake_stripe_event["data"][
            "object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        self.assertEqual(Customer.objects.count(), 1)
        customer = Customer.objects.get()
        self.assertEqual(customer.subscriber, None)
Ejemplo n.º 13
0
    def test_invoiceitem_created(
        self,
        product_retrieve_mock,
        event_retrieve_mock,
        invoiceitem_retrieve_mock,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        subscription_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = default_account()

        user = get_user_model().objects.create_user(username="******",
                                                    email="*****@*****.**")
        FAKE_CUSTOMER_II.create_for_user(user)

        fake_stripe_event = deepcopy(FAKE_EVENT_INVOICEITEM_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        invoiceitem_retrieve_mock.return_value = fake_stripe_event["data"][
            "object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        invoiceitem = InvoiceItem.objects.get(
            id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(
            invoiceitem.amount,
            fake_stripe_event["data"]["object"]["amount"] /
            decimal.Decimal("100"),
        )
Ejemplo n.º 14
0
    def test_plan_updated_request_object(self, event_retrieve_mock, plan_retrieve_mock):
        plan_retrieve_mock.return_value = FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]

        event = Event.sync_from_stripe_data(FAKE_EVENT_PLAN_REQUEST_IS_OBJECT)
        event.invoke_webhook_handlers()

        plan = Plan.objects.get(id=FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]["id"])
        self.assertEqual(plan.name, FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]["name"])
Ejemplo n.º 15
0
    def test_customer_discount_created(self, event_retrieve_mock, coupon_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_DISCOUNT_CREATED)
        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        self.assertIsNotNone(event.customer)
        self.assertEqual(event.customer.id, FAKE_CUSTOMER["id"])
        self.assertIsNotNone(event.customer.coupon)
Ejemplo n.º 16
0
	def test_customer_discount_created(self, event_retrieve_mock, coupon_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_DISCOUNT_CREATED)
		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		self.assertIsNotNone(event.customer)
		self.assertEqual(event.customer.id, FAKE_CUSTOMER["id"])
		self.assertIsNotNone(event.customer.coupon)
Ejemplo n.º 17
0
    def test_plan_created(self, event_retrieve_mock, plan_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_PLAN_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        plan_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        plan = Plan.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(plan.name, fake_stripe_event["data"]["object"]["name"])
Ejemplo n.º 18
0
    def test_transfer_created(self, event_retrieve_mock, transfer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_TRANSFER_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        transfer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        transfer = Transfer.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(transfer.amount, fake_stripe_event["data"]["object"]["amount"] / decimal.Decimal("100"))
Ejemplo n.º 19
0
    def test_customer_bogus_event_type(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
        fake_stripe_event["data"]["object"]["customer"] = fake_stripe_event["data"]["object"]["id"]
        fake_stripe_event["type"] = "customer.praised"

        event_retrieve_mock.return_value = fake_stripe_event
        customer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()
Ejemplo n.º 20
0
    def test_customer_created(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        customer = Customer.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(customer.account_balance, fake_stripe_event["data"]["object"]["account_balance"])
        self.assertEqual(customer.currency, fake_stripe_event["data"]["object"]["currency"])
Ejemplo n.º 21
0
	def _create_event(self, event_data, event_retrieve_mock, patch_data=None):
		event_data = deepcopy(event_data)

		if patch_data:
			event_data.update(patch_data)

		event_retrieve_mock.return_value = event_data
		event = Event.sync_from_stripe_data(event_data)

		return event
Ejemplo n.º 22
0
    def _create_event(self, event_data, event_retrieve_mock, patch_data=None):
        event_data = deepcopy(event_data)

        if patch_data:
            event_data.update(patch_data)

        event_retrieve_mock.return_value = event_data
        event = Event.sync_from_stripe_data(event_data)

        return event
Ejemplo n.º 23
0
    def test_customer_created_no_customer_exists(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        customer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)

        event.validate()
        event.process()

        self.assertFalse(Customer.objects.filter(stripe_id=fake_stripe_event["data"]["object"]["id"]).exists())
Ejemplo n.º 24
0
    def test_customer_discount_created(self, event_retrieve_mock,
                                       coupon_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_DISCOUNT_CREATED)
        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.validate()
        event.process()
        self.assertTrue(event.processed)

        self.assertIsNotNone(event.customer)
        self.assertEqual(event.customer.stripe_id, FAKE_CUSTOMER["id"])
        self.assertIsNotNone(event.customer.coupon)
Ejemplo n.º 25
0
	def test_customer_card_created(self, event_retrieve_mock, customer_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SOURCE_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		card = Card.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertIn(card, self.customer.legacy_cards.all())
		self.assertEqual(card.brand, fake_stripe_event["data"]["object"]["brand"])
		self.assertEqual(card.last4, fake_stripe_event["data"]["object"]["last4"])
Ejemplo n.º 26
0
    def test_customer_card_created(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SOURCE_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        card = Card.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertIn(card, self.customer.legacy_cards.all())
        self.assertEqual(card.brand, fake_stripe_event["data"]["object"]["brand"])
        self.assertEqual(card.last4, fake_stripe_event["data"]["object"]["last4"])
Ejemplo n.º 27
0
    def test_customer_subscription_created(self, event_retrieve_mock, subscription_retrieve_mock, plan_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SUBSCRIPTION_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        subscription = Subscription.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertIn(subscription, self.customer.subscriptions.all())
        self.assertEqual(subscription.status, fake_stripe_event["data"]["object"]["status"])
        self.assertEqual(subscription.quantity, fake_stripe_event["data"]["object"]["quantity"])
Ejemplo n.º 28
0
	def test_plan_created(
		self, product_retrieve_mock, event_retrieve_mock, plan_retrieve_mock
	):
		fake_stripe_event = deepcopy(FAKE_EVENT_PLAN_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event
		plan_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		plan = Plan.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertEqual(plan.nickname, fake_stripe_event["data"]["object"]["nickname"])
Ejemplo n.º 29
0
	def test_customer_bogus_event_type(self, event_retrieve_mock, customer_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
		fake_stripe_event["data"]["object"]["customer"] = fake_stripe_event["data"][
			"object"
		]["id"]
		fake_stripe_event["type"] = "customer.praised"

		event_retrieve_mock.return_value = fake_stripe_event
		customer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()
Ejemplo n.º 30
0
    def test_customer_unknown_source_created(self, event_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SOURCE_CREATED)
        fake_stripe_event["data"]["object"]["object"] = "unknown"
        fake_stripe_event["data"]["object"]["id"] = "card_xxx_test_customer_unk_source_created"
        event_retrieve_mock.return_value = fake_stripe_event

        FAKE_CUSTOMER.create_for_user(self.user)

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        self.assertFalse(Card.objects.filter(id=fake_stripe_event["data"]["object"]["id"]).exists())
Ejemplo n.º 31
0
	def test_plan_updated_request_object(
		self, product_retrieve_mock, event_retrieve_mock, plan_retrieve_mock
	):
		plan_retrieve_mock.return_value = FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]

		event = Event.sync_from_stripe_data(FAKE_EVENT_PLAN_REQUEST_IS_OBJECT)
		event.invoke_webhook_handlers()

		plan = Plan.objects.get(id=FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]["id"])
		self.assertEqual(
			plan.nickname, FAKE_EVENT_PLAN_REQUEST_IS_OBJECT["data"]["object"]["nickname"]
		)
Ejemplo n.º 32
0
    def test_handle_event_fake(self, invoice_retrieve_mock, sync_invoice_mock):
        fake_event = Event(kind="fake",
                           message={"data": {
                               "object": {
                                   "id": "door"
                               }
                           }})

        Invoice.handle_event(fake_event)

        self.assertFalse(invoice_retrieve_mock.called)
        self.assertFalse(sync_invoice_mock.called)
Ejemplo n.º 33
0
	def test_customer_created(self, event_retrieve_mock, customer_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		customer = Customer.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertEqual(
			customer.account_balance, fake_stripe_event["data"]["object"]["account_balance"]
		)
		self.assertEqual(customer.currency, fake_stripe_event["data"]["object"]["currency"])
Ejemplo n.º 34
0
    def test_price_created(self, product_retrieve_mock, event_retrieve_mock,
                           price_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_PRICE_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        price_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)
        event.invoke_webhook_handlers()

        price = Price.objects.get(id=fake_stripe_event["data"]["object"]["id"])
        self.assertEqual(price.nickname,
                         fake_stripe_event["data"]["object"]["nickname"])
Ejemplo n.º 35
0
    def test_transfer_created(self, event_retrieve_mock, transfer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_TRANSFER_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        transfer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        event = Event.sync_from_stripe_data(fake_stripe_event)

        event.validate()
        event.process()

        transfer = Transfer.objects.get(stripe_id=fake_stripe_event["data"]["object"]["id"])
        self.assertEquals(transfer.amount, fake_stripe_event["data"]["object"]["amount"] / decimal.Decimal("100"))
        self.assertEquals(transfer.status, fake_stripe_event["data"]["object"]["status"])
Ejemplo n.º 36
0
	def test_transfer_created(self, event_retrieve_mock, transfer_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_TRANSFER_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event
		transfer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		transfer = Transfer.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertEqual(
			transfer.amount,
			fake_stripe_event["data"]["object"]["amount"] / decimal.Decimal("100"),
		)
Ejemplo n.º 37
0
    def test_customer_unknown_source_created(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SOURCE_CREATED)
        fake_stripe_event["data"]["object"]["object"] = "unknown"
        event_retrieve_mock.return_value = fake_stripe_event

        Customer.objects.create(subscriber=self.user, stripe_id=FAKE_CUSTOMER["id"], livemode=False)

        event = Event.sync_from_stripe_data(fake_stripe_event)

        event.validate()
        event.process()

        self.assertFalse(Card.objects.filter(stripe_id=fake_stripe_event["data"]["object"]["id"]).exists())
Ejemplo n.º 38
0
    def test_subscription_schedule_created(self, customer_retrieve_mock,
                                           schedule_retrieve_mock):

        event = Event.sync_from_stripe_data(
            FAKE_EVENT_SUBSCRIPTION_SCHEDULE_CREATED)
        event.invoke_webhook_handlers()

        schedule = SubscriptionSchedule.objects.get(
            id=FAKE_EVENT_SUBSCRIPTION_SCHEDULE_CREATED["data"]["object"]
            ["id"])

        assert (schedule.id == FAKE_EVENT_SUBSCRIPTION_SCHEDULE_CREATED["data"]
                ["object"]["id"])
        assert schedule.status == "not_started"
Ejemplo n.º 39
0
    def test_handle_event_payment_failed(self, invoice_retrieve_mock,
                                         sync_invoice_mock):
        fake_event = Event(
            kind="invoice.payment_failed",
            validated_message={"data": {
                "object": {
                    "id": "door"
                }
            }})

        Invoice.handle_event(fake_event)

        invoice_retrieve_mock.assert_called_once_with("door")
        sync_invoice_mock.assert_called_once_with("lock", send_receipt=True)
Ejemplo n.º 40
0
    def test_customer_created(self, event_retrieve_mock, customer_retrieve_mock):
        fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_CREATED)
        event_retrieve_mock.return_value = fake_stripe_event
        customer_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

        Customer.objects.create(subscriber=self.user, stripe_id=FAKE_CUSTOMER["id"], livemode=False)

        event = Event.sync_from_stripe_data(fake_stripe_event)

        event.validate()
        event.process()

        customer = Customer.objects.get(stripe_id=fake_stripe_event["data"]["object"]["id"])
        self.assertEquals(customer.account_balance, fake_stripe_event["data"]["object"]["account_balance"])
        self.assertEquals(customer.currency, fake_stripe_event["data"]["object"]["currency"])
Ejemplo n.º 41
0
	def test_customer_unknown_source_created(self, event_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SOURCE_CREATED)
		fake_stripe_event["data"]["object"]["object"] = "unknown"
		fake_stripe_event["data"]["object"][
			"id"
		] = "card_xxx_test_customer_unk_source_created"
		event_retrieve_mock.return_value = fake_stripe_event

		FAKE_CUSTOMER.create_for_user(self.user)

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		self.assertFalse(
			Card.objects.filter(id=fake_stripe_event["data"]["object"]["id"]).exists()
		)
Ejemplo n.º 42
0
	def test_customer_subscription_created(
		self,
		event_retrieve_mock,
		product_retrieve_mock,
		subscription_retrieve_mock,
		plan_retrieve_mock,
	):
		fake_stripe_event = deepcopy(FAKE_EVENT_CUSTOMER_SUBSCRIPTION_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		subscription = Subscription.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertIn(subscription, self.customer.subscriptions.all())
		self.assertEqual(subscription.status, fake_stripe_event["data"]["object"]["status"])
		self.assertEqual(
			subscription.quantity, fake_stripe_event["data"]["object"]["quantity"]
		)
Ejemplo n.º 43
0
	def test_invoice_created_no_existing_customer(
		self,
		product_retrieve_mock,
		event_retrieve_mock,
		invoice_retrieve_mock,
		charge_retrieve_mock,
		customer_retrieve_mock,
		subscription_retrieve_mock,
		balance_transaction_retrieve_mock,
		default_account_mock,
	):
		default_account_mock.return_value = default_account()

		fake_stripe_event = deepcopy(FAKE_EVENT_INVOICE_CREATED)
		event_retrieve_mock.return_value = fake_stripe_event

		invoice_retrieve_mock.return_value = fake_stripe_event["data"]["object"]

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		self.assertEqual(Customer.objects.count(), 1)
		customer = Customer.objects.get()
		self.assertEqual(customer.subscriber, None)
Ejemplo n.º 44
0
	def test_charge_created(
		self,
		subscription_retrieve_mock,
		product_retrieve_mock,
		invoice_retrieve_mock,
		event_retrieve_mock,
		charge_retrieve_mock,
		balance_transaction_retrieve_mock,
		account_mock,
	):
		FAKE_CUSTOMER.create_for_user(self.user)
		fake_stripe_event = deepcopy(FAKE_EVENT_CHARGE_SUCCEEDED)
		event_retrieve_mock.return_value = fake_stripe_event
		charge_retrieve_mock.return_value = fake_stripe_event["data"]["object"]
		account_mock.return_value = default_account()

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()

		charge = Charge.objects.get(id=fake_stripe_event["data"]["object"]["id"])
		self.assertEqual(
			charge.amount, fake_stripe_event["data"]["object"]["amount"] / decimal.Decimal("100")
		)
		self.assertEqual(charge.status, fake_stripe_event["data"]["object"]["status"])
Ejemplo n.º 45
0
	def test_dispute_created(self, event_retrieve_mock, dispute_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_DISPUTE_CREATED)
		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()
		dispute = Dispute.objects.get()
		self.assertEqual(dispute.id, FAKE_DISPUTE["id"])
Ejemplo n.º 46
0
 def _create_event(self, event_data, event_retrieve_mock):
     event_data = deepcopy(event_data)
     event_retrieve_mock.return_value = event_data
     event = Event.sync_from_stripe_data(event_data)
     return event
Ejemplo n.º 47
0
	def test_account_deauthorized_event(self, event_retrieve_mock):
		fake_stripe_event = deepcopy(FAKE_EVENT_ACCOUNT_APPLICATION_DEAUTHORIZED)

		event = Event.sync_from_stripe_data(fake_stripe_event)
		event.invoke_webhook_handlers()