Beispiel #1
0
	def test_capture_charge(
		self, balance_transaction_retrieve_mock, charge_retrieve_mock, default_account_mock
	):
		default_account_mock.return_value = self.account

		fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
		fake_charge_no_invoice.update({"invoice": None})

		charge_retrieve_mock.return_value = fake_charge_no_invoice

		charge, created = Charge._get_or_create_from_stripe_object(fake_charge_no_invoice)
		self.assertTrue(created)

		captured_charge = charge.capture()
		self.assertTrue(captured_charge.captured)

		self.assert_fks(
			charge,
			expected_blank_fks={
				"djstripe.Account.business_logo",
				"djstripe.Charge.dispute",
				"djstripe.Charge.invoice",
				"djstripe.Charge.transfer",
				"djstripe.Customer.coupon",
				"djstripe.Plan.product",
			},
		)
Beispiel #2
0
    def test_sync_from_stripe_data_with_destination(
        self,
        file_retrieve_mock,
        invoice_retrieve_mock,
        paymentmethod_card_retrieve_mock,
        payment_intent_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        charge_retrieve_mock,
    ):

        account_retrieve_mock.return_value = FAKE_STANDARD_ACCOUNT

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"destination": FAKE_STANDARD_ACCOUNT["id"]})

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]})
        self.assertTrue(created)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_called_once_with(
            api_key=djstripe_settings.STRIPE_SECRET_KEY,
            expand=[],
            id=FAKE_BALANCE_TRANSACTION["id"],
            stripe_account=None,
        )

        self.assert_fks(charge,
                        expected_blank_fks=self.default_expected_blank_fks)
Beispiel #3
0
    def test_sync_from_stripe_data_with_destination(
        self,
        file_retrive_mock,
        invoice_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        charge_retrieve_mock,
    ):
        account_retrieve_mock.return_value = FAKE_ACCOUNT

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"destination": FAKE_ACCOUNT["id"]})

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]})
        self.assertTrue(created)

        self.assertEqual(2, Account.objects.count())
        account = Account.objects.get(id=FAKE_ACCOUNT["id"])

        self.assertEqual(account, charge.account)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_not_called()

        self.assert_fks(
            charge,
            expected_blank_fks={
                "djstripe.Charge.dispute",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
            },
        )
Beispiel #4
0
    def test_sync_from_stripe_data_with_destination(
        self,
        file_retrieve_mock,
        invoice_retrieve_mock,
        payment_intent_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        charge_retrieve_mock,
    ):
        from djstripe.settings import STRIPE_SECRET_KEY

        account_retrieve_mock.return_value = FAKE_ACCOUNT

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"destination": FAKE_ACCOUNT["id"]})

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]})
        self.assertTrue(created)

        self.assertEqual(2, Account.objects.count())
        account = Account.objects.get(id=FAKE_ACCOUNT["id"])

        self.assertEqual(account, charge.account)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_called_once_with(
            api_key=STRIPE_SECRET_KEY,
            expand=[],
            id=FAKE_BALANCE_TRANSACTION["id"])

        self.assert_fks(charge,
                        expected_blank_fks=self.default_expected_blank_fks)
Beispiel #5
0
    def test_refund_charge(self, charge_retrieve_mock,
                           balance_transaction_retrieve_mock,
                           default_account_mock):
        default_account_mock.return_value = self.account

        fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
        fake_charge_no_invoice.update({"invoice": None})

        charge_retrieve_mock.return_value = fake_charge_no_invoice

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_no_invoice)
        self.assertTrue(created)

        self.assert_fks(
            charge,
            expected_blank_fks={
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.dispute",
                "djstripe.Charge.invoice",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
            },
        )

        charge.refund()

        refunded_charge, created2 = Charge._get_or_create_from_stripe_object(
            fake_charge_no_invoice)
        self.assertFalse(created2)

        self.assertEqual(refunded_charge.refunded, True)
        self.assertEqual(refunded_charge.amount_refunded,
                         decimal.Decimal("20.00"))

        self.assert_fks(
            refunded_charge,
            expected_blank_fks={
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.dispute",
                "djstripe.Charge.invoice",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
            },
        )
Beispiel #6
0
    def test_refund_charge(self, charge_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
        fake_charge_no_invoice.update({"invoice": None})

        charge_retrieve_mock.return_value = fake_charge_no_invoice

        charge, created = Charge._get_or_create_from_stripe_object(fake_charge_no_invoice)
        self.assertTrue(created)

        charge.refund()

        refunded_charge, created2 = Charge._get_or_create_from_stripe_object(fake_charge_no_invoice)
        self.assertFalse(created2)

        self.assertEqual(refunded_charge.refunded, True)
        self.assertEqual(refunded_charge.amount_refunded, decimal.Decimal("22.00"))
Beispiel #7
0
    def test_capture_charge(self, charge_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
        fake_charge_no_invoice.update({"invoice": None})

        charge_retrieve_mock.return_value = fake_charge_no_invoice

        charge, created = Charge._get_or_create_from_stripe_object(fake_charge_no_invoice)
        self.assertTrue(created)

        captured_charge = charge.capture()
        self.assertTrue(captured_charge.captured)
Beispiel #8
0
    def test_sync_from_stripe_data_with_destination(self, account_retrieve_mock, charge_retrieve_mock):
        account_retrieve_mock.return_value = FAKE_ACCOUNT

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"destination": FAKE_ACCOUNT["id"]})

        charge_retrieve_mock.return_value = fake_charge_copy

        charge, created = Charge._get_or_create_from_stripe_object(fake_charge_copy)
        self.assertTrue(created)

        self.assertEqual(2, Account.objects.count())
        account = Account.objects.get(id=FAKE_ACCOUNT["id"])

        self.assertEqual(account, charge.account)
Beispiel #9
0
    def test_sync_from_stripe_data_with_transfer(
        self,
        default_account_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        transfer_retrieve_mock,
        payment_intent_retrieve_mock,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        balance_transaction_retrieve_mock,
    ):
        from djstripe.settings import STRIPE_SECRET_KEY

        default_account_mock.return_value = self.account

        fake_transfer = deepcopy(FAKE_TRANSFER)

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"transfer": fake_transfer["id"]})

        transfer_retrieve_mock.return_value = fake_transfer
        charge_retrieve_mock.return_value = fake_charge_copy

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]}
        )
        self.assertTrue(created)

        self.assertNotEqual(None, charge.transfer)
        self.assertEqual(fake_transfer["id"], charge.transfer.id)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_called_once_with(
            api_key=STRIPE_SECRET_KEY, expand=[], id=FAKE_BALANCE_TRANSACTION["id"]
        )

        self.assert_fks(
            charge,
            expected_blank_fks={
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.dispute",
                "djstripe.Customer.coupon",
                "djstripe.PaymentIntent.on_behalf_of",
                "djstripe.PaymentIntent.payment_method",
                "djstripe.Subscription.pending_setup_intent",
            },
        )
Beispiel #10
0
    def test_sync_from_stripe_data_with_transfer(
        self,
        default_account_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        transfer_retrieve_mock,
        paymentmethod_card_retrieve_mock,
        payment_intent_retrieve_mock,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        balance_transaction_retrieve_mock,
        transfer__attach_object_post_save_hook_mock,
    ):

        default_account_mock.return_value = self.account

        fake_transfer = deepcopy(FAKE_TRANSFER)

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"transfer": fake_transfer["id"]})

        transfer_retrieve_mock.return_value = fake_transfer
        charge_retrieve_mock.return_value = fake_charge_copy

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]})
        self.assertTrue(created)

        self.assertNotEqual(None, charge.transfer)
        self.assertEqual(fake_transfer["id"], charge.transfer.id)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_called_once_with(
            api_key=djstripe_settings.STRIPE_SECRET_KEY,
            expand=[],
            id=FAKE_BALANCE_TRANSACTION["id"],
            stripe_account=None,
        )

        self.assert_fks(
            charge,
            expected_blank_fks=(self.default_expected_blank_fks
                                | {
                                    "djstripe.Account.branding_logo",
                                    "djstripe.Account.branding_icon"
                                }) - {"djstripe.Charge.transfer"},
        )
Beispiel #11
0
    def test_sync_from_stripe_data_with_transfer(self, default_account_mock, transfer_retrieve_mock,
                                                 charge_retrieve_mock):
        default_account_mock.return_value = self.account

        fake_transfer = deepcopy(FAKE_TRANSFER)

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"transfer": fake_transfer["id"]})

        transfer_retrieve_mock.return_value = fake_transfer
        charge_retrieve_mock.return_value = fake_charge_copy

        charge, created = Charge._get_or_create_from_stripe_object(fake_charge_copy)
        self.assertTrue(created)

        self.assertNotEqual(None, charge.transfer)
        self.assertEqual(fake_transfer["id"], charge.transfer.id)
Beispiel #12
0
    def test_capture_charge(
        self,
        payment_intent_retrieve_mock,
        balance_transaction_retrieve_mock,
        charge_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
        fake_charge_no_invoice.update({"invoice": None})

        charge_retrieve_mock.return_value = fake_charge_no_invoice

        # TODO - I think this is needed in line with above?
        fake_payment_intent_no_invoice = deepcopy(FAKE_PAYMENT_INTENT_I)
        fake_payment_intent_no_invoice.update({"invoice": None})

        payment_intent_retrieve_mock.return_value = fake_payment_intent_no_invoice

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_no_invoice
        )
        self.assertTrue(created)

        captured_charge = charge.capture()
        self.assertTrue(captured_charge.captured)

        self.assert_fks(
            charge,
            expected_blank_fks={
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.dispute",
                "djstripe.Charge.invoice",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
                "djstripe.PaymentIntent.invoice",
                "djstripe.PaymentIntent.on_behalf_of",
                "djstripe.PaymentIntent.payment_method",
                "djstripe.Plan.product",
                "djstripe.Subscription.pending_setup_intent",
            },
        )
Beispiel #13
0
    def test_capture_charge(
        self,
        paymentmethod_card_retrieve_mock,
        payment_intent_retrieve_mock,
        balance_transaction_retrieve_mock,
        charge_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        fake_charge_no_invoice = deepcopy(FAKE_CHARGE)
        fake_charge_no_invoice.update({"invoice": None})

        charge_retrieve_mock.return_value = fake_charge_no_invoice

        # TODO - I think this is needed in line with above?
        fake_payment_intent_no_invoice = deepcopy(FAKE_PAYMENT_INTENT_I)
        fake_payment_intent_no_invoice.update({"invoice": None})

        payment_intent_retrieve_mock.return_value = fake_payment_intent_no_invoice

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_no_invoice)
        self.assertTrue(created)

        captured_charge = charge.capture()
        self.assertTrue(captured_charge.captured)

        self.assertFalse(captured_charge.fraudulent)

        self.assert_fks(
            charge,
            expected_blank_fks=self.default_expected_blank_fks
            | {
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.latest_invoice (related name)",
                "djstripe.Charge.invoice",
                "djstripe.PaymentIntent.invoice (related name)",
                "djstripe.Plan.product",
            },
        )
Beispiel #14
0
    def test_sync_from_stripe_data_with_transfer(
        self,
        default_account_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        transfer_retrieve_mock,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        balance_transaction_retrieve_mock,
    ):
        default_account_mock.return_value = self.account

        fake_transfer = deepcopy(FAKE_TRANSFER)

        fake_charge_copy = deepcopy(FAKE_CHARGE)
        fake_charge_copy.update({"transfer": fake_transfer["id"]})

        transfer_retrieve_mock.return_value = fake_transfer
        charge_retrieve_mock.return_value = fake_charge_copy

        charge, created = Charge._get_or_create_from_stripe_object(
            fake_charge_copy, current_ids={fake_charge_copy["id"]})
        self.assertTrue(created)

        self.assertNotEqual(None, charge.transfer)
        self.assertEqual(fake_transfer["id"], charge.transfer.id)

        charge_retrieve_mock.assert_not_called()
        balance_transaction_retrieve_mock.assert_not_called()

        self.assert_fks(
            charge,
            expected_blank_fks={
                "djstripe.Account.business_logo",
                "djstripe.Charge.dispute",
                "djstripe.Customer.coupon",
            },
        )