def resync_invoiceitems(apps, schema_editor):
    """
    Since invoiceitem IDs were not previously stored (the ``stripe_id`` field held the id of the linked subsription),
    a direct migration will leave us with a bunch of orphaned objects. It was decided
    [here](https://github.com/kavdev/dj-stripe/issues/162) that a purge and re-sync would be the best option for
    subscriptions. That's being extended to InvoiceItems. No data that is currently available on stripe will be
    deleted. Anything stored locally will be purged.
    """

    # This is okay, since we're only doing a forward migration.
    from djstripe.models import InvoiceItem

    from djstripe.context_managers import stripe_temporary_api_version

    with stripe_temporary_api_version("2016-03-07"):
        if InvoiceItem.objects.count():
            print("Purging invoiceitems. Don't worry, all invoiceitems will be re-synced from stripe. Just in case you \
            didn't get the memo, we'll print out a json representation of each object for your records:")
            print(serializers.serialize("json", InvoiceItem.objects.all()))
            InvoiceItem.objects.all().delete()

            print("Re-syncing invoiceitems. This may take a while.")

            for stripe_invoiceitem in tqdm(iterable=InvoiceItem.api_list(), desc="Sync", unit=" invoiceitems"):
                invoice = InvoiceItem.sync_from_stripe_data(stripe_invoiceitem)

                if not invoice.customer:
                    tqdm.write("The customer for this invoiceitem ({invoiceitem_id}) does not exist \
                    locally (so we won't sync the invoiceitem). You'll want to figure out how that \
                    happened.".format(invoiceitem_id=stripe_invoiceitem['id']))

            print("InvoiceItem re-sync complete.")
示例#2
0
    def test_sync_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        expected_blank_fks = {
            "djstripe.Account.business_logo",
            "djstripe.Charge.dispute",
            "djstripe.Charge.transfer",
            "djstripe.Customer.coupon",
            "djstripe.Customer.subscriber",
            "djstripe.Plan.product",
            "djstripe.InvoiceItem.plan",
        }

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        # Coverage of sync of existing data
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        invoice_retrieve_mock.assert_called_once_with(
            api_key=STRIPE_SECRET_KEY, expand=[], id=FAKE_INVOICE_II["id"])
示例#3
0
    def test_sync_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        expected_blank_fks = self.default_expected_blank_fks | {
            "djstripe.InvoiceItem.plan"
        }

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        # Coverage of sync of existing data
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        invoice_retrieve_mock.assert_called_once_with(
            api_key=STRIPE_SECRET_KEY, expand=[], id=FAKE_INVOICE_II["id"])
示例#4
0
	def test_sync_with_subscription(
		self,
		invoice_retrieve_mock,
		charge_retrieve_mock,
		customer_retrieve_mock,
		subscription_retrieve_mock,
		product_retrieve_mock,
		balance_transaction_retrieve_mock,
		default_account_mock,
	):
		default_account_mock.return_value = self.account

		invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
		invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
		invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

		expected_blank_fks = {
			"djstripe.Account.business_logo",
			"djstripe.Charge.dispute",
			"djstripe.Charge.transfer",
			"djstripe.Customer.coupon",
			"djstripe.Customer.subscriber",
			"djstripe.InvoiceItem.plan",
		}

		self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

		# Coverage of sync of existing data
		invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

		self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

		invoice_retrieve_mock.assert_called_once_with(
			api_key=STRIPE_SECRET_KEY, expand=[], id=FAKE_INVOICE_II["id"]
		)
示例#5
0
    def test_sync_expanded_invoice_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        # Expand the Invoice data
        invoiceitem_data.update({
            "subscription": FAKE_SUBSCRIPTION_III["id"],
            "invoice": deepcopy(dict(FAKE_INVOICE_II)),
        })
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        expected_blank_fks = self.default_expected_blank_fks | {
            "djstripe.InvoiceItem.plan"
        }

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        # Coverage of sync of existing data
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)
    def test_sync_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        paymentintent_retrieve_mock,
        paymentmethod_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        fake_payment_intent = deepcopy(FAKE_PAYMENT_INTENT_II)
        fake_payment_intent["invoice"] = FAKE_INVOICE_II["id"]
        paymentintent_retrieve_mock.return_value = fake_payment_intent

        fake_subscription = deepcopy(FAKE_SUBSCRIPTION_III)
        fake_subscription["latest_invoice"] = FAKE_INVOICE_II["id"]
        subscription_retrieve_mock.return_value = fake_subscription

        fake_customer = deepcopy(FAKE_CUSTOMER_II)
        customer_retrieve_mock.return_value = fake_customer

        fake_card = deepcopy(FAKE_CARD_II)
        fake_card["customer"] = None

        # create Card for FAKE_CUSTOMER_III
        Card.sync_from_stripe_data(fake_card)

        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": fake_subscription["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        expected_blank_fks = self.default_expected_blank_fks | {
            "djstripe.InvoiceItem.plan",
            "djstripe.InvoiceItem.price",
        }
        expected_blank_fks.difference_update({
            "djstripe.PaymentIntent.invoice (related name)",
            "djstripe.Invoice.payment_intent",
        })

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        # Coverage of sync of existing data
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        invoice_retrieve_mock.assert_called_once_with(
            api_key=djstripe_settings.STRIPE_SECRET_KEY,
            expand=[],
            id=FAKE_INVOICE_II["id"],
            stripe_account=None,
        )
示例#7
0
	def test_str(
		self,
		invoice_retrieve_mock,
		charge_retrieve_mock,
		customer_retrieve_mock,
		subscription_retrieve_mock,
		product_retrieve_mock,
		balance_transaction_retrieve_mock,
		default_account_mock,
	):
		default_account_mock.return_value = self.account

		invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
		invoiceitem_data["plan"] = FAKE_PLAN_II
		invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
		self.assertEqual(
			invoiceitem.get_stripe_dashboard_url(),
			invoiceitem.invoice.get_stripe_dashboard_url(),
		)

		self.assertEqual(str(invoiceitem), FAKE_PRODUCT["name"])
		invoiceitem.plan = None
		self.assertEqual(
			str(invoiceitem),
			"<amount=20, date=2015-08-08 11:26:56+00:00, id=ii_16XVTY2eZvKYlo2Cxz5n3RaS>",
		)
示例#8
0
	def test_sync_null_invoice(
		self,
		invoice_retrieve_mock,
		charge_retrieve_mock,
		customer_retrieve_mock,
		subscription_retrieve_mock,
		product_retrieve_mock,
		plan_retrieve_mock,
		default_account_mock,
	):
		default_account_mock.return_value = self.account

		invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
		invoiceitem_data.update(
			{"proration": True, "plan": FAKE_PLAN_II["id"], "invoice": None}
		)
		invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

		self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.id)

		self.assert_fks(
			invoiceitem,
			expected_blank_fks={
				"djstripe.Account.business_logo",
				"djstripe.Charge.dispute",
				"djstripe.Charge.transfer",
				"djstripe.Customer.coupon",
				"djstripe.Customer.subscriber",
				"djstripe.InvoiceItem.invoice",
				"djstripe.InvoiceItem.subscription",
			},
		)
示例#9
0
    def test_str(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(
            invoiceitem.get_stripe_dashboard_url(),
            invoiceitem.invoice.get_stripe_dashboard_url(),
        )

        self.assertEqual(str(invoiceitem), FAKE_PRODUCT["name"])
        invoiceitem.plan = None
        self.assertEqual(
            str(invoiceitem),
            "<amount=20, date=2015-08-08 11:26:56+00:00, "
            "id=ii_16XVTY2eZvKYlo2Cxz5n3RaS>",
        )
示例#10
0
    def test_sync_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(
            invoiceitem,
            expected_blank_fks={
                "djstripe.Account.business_logo",
                "djstripe.Charge.dispute",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
                "djstripe.Customer.subscriber",
                "djstripe.Plan.product",
                "djstripe.InvoiceItem.plan",
            },
        )
示例#11
0
    def test_sync_null_invoice(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        plan_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({
            "proration": True,
            "plan": FAKE_PLAN_II["id"],
            "invoice": None
        })
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.id)

        self.assert_fks(
            invoiceitem,
            expected_blank_fks=self.default_expected_blank_fks
            | {
                "djstripe.InvoiceItem.invoice",
                "djstripe.InvoiceItem.subscription"
            },
        )
示例#12
0
    def test_sync_proration(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        plan_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({
            "proration": True,
            "plan": FAKE_PLAN_II["id"]
        })
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.id)

        self.assert_fks(
            invoiceitem,
            expected_blank_fks={
                "djstripe.Account.branding_logo",
                "djstripe.Account.branding_icon",
                "djstripe.Charge.dispute",
                "djstripe.Charge.transfer",
                "djstripe.Customer.coupon",
                "djstripe.Customer.subscriber",
                "djstripe.InvoiceItem.subscription",
            },
        )
示例#13
0
    def test_sync_with_subscription(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock,
                                    subscription_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_SUBSCRIPTION_III["id"], invoiceitem.subscription.stripe_id)
示例#14
0
    def test_sync_with_subscription(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock,
                                    subscription_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"subscription": FAKE_SUBSCRIPTION_III["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_SUBSCRIPTION_III["id"], invoiceitem.subscription.id)
示例#15
0
    def test_sync_proration(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock,
                            subscription_retrieve_mock, plan_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"proration": True, "plan": FAKE_PLAN_II["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.id)
示例#16
0
    def test_sync_proration(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock,
                            subscription_retrieve_mock, plan_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({"proration": True, "plan": FAKE_PLAN_II["id"]})
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.stripe_id)
示例#17
0
    def test_sync_proration(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        paymentintent_retrieve_mock,
        paymentmethod_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        plan_retrieve_mock,
        price_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        fake_payment_intent = deepcopy(FAKE_PAYMENT_INTENT_II)
        fake_payment_intent["invoice"] = FAKE_INVOICE_II["id"]
        paymentintent_retrieve_mock.return_value = fake_payment_intent

        fake_subscription = deepcopy(FAKE_SUBSCRIPTION_III)
        fake_subscription["latest_invoice"] = FAKE_INVOICE_II["id"]
        subscription_retrieve_mock.return_value = fake_subscription

        fake_card = deepcopy(FAKE_CARD_II)
        fake_card["customer"] = None
        # create Card for FAKE_CUSTOMER_III
        Card.sync_from_stripe_data(fake_card)

        # create invoice
        Invoice.sync_from_stripe_data(deepcopy(FAKE_INVOICE_II))

        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data.update({
            "proration": True,
            "plan": FAKE_PLAN_II["id"],
            "price": FAKE_PRICE_II["id"],
        })
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(FAKE_PLAN_II["id"], invoiceitem.plan.id)
        self.assertEqual(FAKE_PRICE_II["id"], invoiceitem.price.id)

        expected_blank_fks = self.default_expected_blank_fks | {
            "djstripe.InvoiceItem.subscription"
        }
        expected_blank_fks.difference_update({
            "djstripe.PaymentIntent.invoice (related name)",
            "djstripe.Invoice.payment_intent",
        })

        self.assert_fks(
            invoiceitem,
            expected_blank_fks=expected_blank_fks,
        )
示例#18
0
    def test_sync_expanded_invoice_with_subscription(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        # Expand the Invoice data
        invoiceitem_data.update(
            {
                "subscription": FAKE_SUBSCRIPTION_III["id"],
                "invoice": deepcopy(dict(FAKE_INVOICE_II)),
            }
        )
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        expected_blank_fks = {
            "djstripe.Account.branding_logo",
            "djstripe.Account.branding_icon",
            "djstripe.Charge.dispute",
            "djstripe.Charge.payment_intent",
            "djstripe.Charge.transfer",
            "djstripe.Customer.coupon",
            "djstripe.Customer.subscriber",
            "djstripe.InvoiceItem.plan",
            "djstripe.Invoice.payment_intent",
            "djstripe.Subscription.pending_setup_intent",
        }

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)

        # Coverage of sync of existing data
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assert_fks(invoiceitem, expected_blank_fks=expected_blank_fks)
示例#19
0
    def test_str(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock, subscription_retrieve_mock,
                 default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(invoiceitem.get_stripe_dashboard_url(), invoiceitem.invoice.get_stripe_dashboard_url())

        self.assertEqual(str(invoiceitem), "<amount={amount}, date={date}, stripe_id={stripe_id}>".format(
            amount=invoiceitem.amount,
            date=invoiceitem.date,
            stripe_id=invoiceitem_data["id"]
        ))
示例#20
0
    def test___str__(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        paymentintent_retrieve_mock,
        paymentmethod_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        plan_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):

        fake_subscription = deepcopy(FAKE_SUBSCRIPTION_III)
        fake_subscription["latest_invoice"] = FAKE_INVOICE["id"]
        subscription_retrieve_mock.side_effect = [
            deepcopy(FAKE_SUBSCRIPTION),
            fake_subscription,
        ]

        fake_customer = deepcopy(FAKE_CUSTOMER_II)
        customer_retrieve_mock.side_effect = [
            deepcopy(FAKE_CUSTOMER), fake_customer
        ]

        fake_card = deepcopy(FAKE_CARD_II)
        fake_card["customer"] = None
        # create Card for FAKE_CUSTOMER_III
        Card.sync_from_stripe_data(fake_card)

        # create invoice for latest_invoice in subscription to work.
        Invoice.sync_from_stripe_data(deepcopy(FAKE_INVOICE))

        # create invoice
        Invoice.sync_from_stripe_data(deepcopy(FAKE_INVOICE_II))

        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem_data["price"] = FAKE_PRICE_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(
            invoiceitem.get_stripe_dashboard_url(),
            invoiceitem.invoice.get_stripe_dashboard_url(),
        )

        assert str(invoiceitem) == invoiceitem.description
示例#21
0
    def test_str(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock, subscription_retrieve_mock,
                 plan_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(invoiceitem.get_stripe_dashboard_url(), invoiceitem.invoice.get_stripe_dashboard_url())

        self.assertEqual(
            str(invoiceitem),
            "Subscription to New plan name ({price})".format(price=invoiceitem.plan.human_readable_price)
        )
        invoiceitem.plan = None
        self.assertEqual(str(invoiceitem), "<amount={amount}, date={date}, stripe_id={stripe_id}>".format(
            amount=invoiceitem.amount,
            date=invoiceitem.date,
            stripe_id=invoiceitem_data["id"]
        ))
示例#22
0
    def test_str(self, invoice_retrieve_mock, charge_retrieve_mock, customer_retrieve_mock, subscription_retrieve_mock,
                 plan_retrieve_mock, default_account_mock):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(invoiceitem.get_stripe_dashboard_url(), invoiceitem.invoice.get_stripe_dashboard_url())

        self.assertEqual(
            str(invoiceitem),
            "Subscription to New plan name ({price})".format(price=invoiceitem.plan.human_readable_price)
        )
        invoiceitem.plan = None
        self.assertEqual(str(invoiceitem), "<amount={amount}, date={date}, stripe_id={stripe_id}>".format(
            amount=invoiceitem.amount,
            date=invoiceitem.date,
            stripe_id=invoiceitem_data["id"]
        ))
示例#23
0
    def test_sync_with_taxes(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM_III)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(invoiceitem.tax_rates.count(), 1)
        self.assertEqual(invoiceitem.tax_rates.first().id,
                         FAKE_TAX_RATE_EXAMPLE_1_VAT["id"])
示例#24
0
    def test_sync_with_taxes(
        self,
        invoice_retrieve_mock,
        paymentintent_retrieve_mock,
        paymentmethod_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        fake_payment_intent = deepcopy(FAKE_PAYMENT_INTENT_II)
        fake_payment_intent["invoice"] = FAKE_INVOICE_II["id"]
        paymentintent_retrieve_mock.return_value = fake_payment_intent

        fake_subscription = deepcopy(FAKE_SUBSCRIPTION_III)
        fake_subscription["latest_invoice"] = FAKE_INVOICE_II["id"]
        subscription_retrieve_mock.return_value = fake_subscription

        fake_card = deepcopy(FAKE_CARD_II)
        fake_card["customer"] = None
        # create Card for FAKE_CUSTOMER_III
        Card.sync_from_stripe_data(fake_card)

        # create invoice
        Invoice.sync_from_stripe_data(deepcopy(FAKE_INVOICE_II))

        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM_III)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem_data["price"] = FAKE_PRICE_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)

        self.assertEqual(invoiceitem.tax_rates.count(), 1)
        self.assertEqual(invoiceitem.tax_rates.first().id,
                         FAKE_TAX_RATE_EXAMPLE_1_VAT["id"])
示例#25
0
    def test___str__(
        self,
        invoice_retrieve_mock,
        charge_retrieve_mock,
        customer_retrieve_mock,
        paymentintent_retrieve_mock,
        paymentmethod_retrieve_mock,
        subscription_retrieve_mock,
        product_retrieve_mock,
        balance_transaction_retrieve_mock,
        default_account_mock,
    ):
        default_account_mock.return_value = self.account

        invoiceitem_data = deepcopy(FAKE_INVOICEITEM)
        invoiceitem_data["plan"] = FAKE_PLAN_II
        invoiceitem_data["price"] = FAKE_PRICE_II
        invoiceitem = InvoiceItem.sync_from_stripe_data(invoiceitem_data)
        self.assertEqual(
            invoiceitem.get_stripe_dashboard_url(),
            invoiceitem.invoice.get_stripe_dashboard_url(),
        )

        assert str(invoiceitem) == invoiceitem.description
示例#26
0
 def test_plan_display(self):
     invoiceitem = InvoiceItem(plan="test")
     self.assertEqual("Test Plan 1", invoiceitem.plan_display())
示例#27
0
 def test_tostring(self):
     invoiceitem = InvoiceItem(plan="test", amount=50, stripe_id='inv_xxxxxxxx123456')
     self.assertEquals("<amount=50, plan=test, stripe_id=inv_xxxxxxxx123456>", str(invoiceitem))