Exemplo n.º 1
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)
def sync_transfers(apps, schema_editor):
    # This is okay, since we're only doing a forward migration.
    from djstripe.models import Transfer

    from djstripe.context_managers import stripe_temporary_api_version

    with stripe_temporary_api_version("2016-03-07"):
        if Transfer.objects.count():
            print("syncing transfers. This may take a while.")

            for transfer in tqdm(iterable=Transfer.objects.all(), desc="Sync", unit=" transfers"):
                try:
                    Transfer.sync_from_stripe_data(transfer)
                except InvalidRequestError:
                    tqdm.write("There was an error while syncing transfer \
                    ({transfer_id}).".format(transfer_id=transfer.stripe_id))

            print("Transfer sync complete.")
Exemplo n.º 3
0
    def test_fee(
        self,
        transfer_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        transfer__attach_object_post_save_hook_mock,
    ):

        transfer = Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))
        assert transfer.fee == FAKE_BALANCE_TRANSACTION_II["fee"]
        assert transfer.fee == transfer.balance_transaction.fee
Exemplo n.º 4
0
    def test_transfer_summary(self):
        Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))
        Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER_II))
        Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER_III))

        self.assertEqual(Transfer.objects.during(2015, 8).count(), 2)

        totals = Transfer.objects.paid_totals_for(2015, 12)
        self.assertEqual(totals["total_amount"], decimal.Decimal("190.10"))
Exemplo n.º 5
0
	def test_transfer_summary(self):
		Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))
		Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER_II))
		Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER_III))

		self.assertEqual(Transfer.objects.during(2015, 8).count(), 2)

		totals = Transfer.objects.paid_totals_for(2015, 12)
		self.assertEqual(totals["total_amount"], decimal.Decimal("190.10"))
Exemplo n.º 6
0
    def test_sync_from_stripe_data(
        self,
        transfer_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        transfer__attach_object_post_save_hook_mock,
    ):

        transfer = Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))

        balance_transaction_retrieve_mock.assert_not_called()
        transfer_retrieve_mock.assert_not_called()

        assert (transfer.balance_transaction.id ==
                FAKE_TRANSFER["balance_transaction"]["id"])
        assert transfer.destination.id == FAKE_TRANSFER["destination"]

        self.assert_fks(transfer, expected_blank_fks="")
Exemplo n.º 7
0
    def test___str__(
        self,
        transfer_retrieve_mock,
        balance_transaction_retrieve_mock,
        account_retrieve_mock,
        transfer__attach_object_post_save_hook_mock,
        fake_transfer_data,
    ):

        transfer_retrieve_mock.return_value = fake_transfer_data
        transfer = Transfer.sync_from_stripe_data(fake_transfer_data)

        if fake_transfer_data["reversed"]:
            assert f"{transfer.human_readable_amount} Reversed" == str(
                transfer)

        elif fake_transfer_data["amount_reversed"]:
            assert f"{transfer.human_readable_amount} Partially Reversed" == str(
                transfer)

        else:
            assert f"{transfer.human_readable_amount}" == str(transfer)
Exemplo n.º 8
0
    def test_transfer_summary(self, account_retrieve_mock,
                              transfer__attach_object_post_save_hook_mock):
        def FAKE_TRANSFER_III():
            data = deepcopy(FAKE_TRANSFER)
            data["id"] = "tr_17O4U52eZvKYlo2CmyYbDAEy"
            data["amount"] = 19010
            data["created"] = 1451560845
            return data

        def FAKE_TRANSFER_II():
            data = deepcopy(FAKE_TRANSFER)
            data["id"] = "tr_16hTzv2eZvKYlo2CWuyMmuvV"
            data["amount"] = 2000
            data["created"] = 1440420000
            return data

        Transfer.sync_from_stripe_data(deepcopy(FAKE_TRANSFER))
        Transfer.sync_from_stripe_data(FAKE_TRANSFER_II())
        Transfer.sync_from_stripe_data(FAKE_TRANSFER_III())

        self.assertEqual(Transfer.objects.during(2015, 8).count(), 2)

        totals = Transfer.objects.paid_totals_for(2015, 12)
        self.assertEqual(totals["total_amount"], decimal.Decimal("190.10"))