Пример #1
0
    def test_complete_after_committed3(self):
        value = Currency.us_dollars("99999999.99123459", "30.12342")

        account1 = self.user1_account
        account2 = self.user2_account

        transaction = Transaction({'source' : account1._id, 'dest' : account2._id, 'amount' : value})
        transaction.save()

        # partial transaction.apply() - up to committed
        amount_rub = transaction.amount.db_value()
        Transaction.objects.update({'_id': transaction._id}, {'$set': {'state': Transaction.STATE_PENDING}})
        Account.objects.update({'_id': account1._id, 'pending_transactions': {'$ne': transaction._id}},
                {'$inc': {'balance': -amount_rub}, '$push': {'pending_transactions': transaction._id}})
        Account.objects.update({'_id': account2._id, 'pending_transactions': {'$ne': transaction._id}},
                {'$inc': {'balance': amount_rub}, '$push': {'pending_transactions': transaction._id}})
        Transaction.objects.update({'_id': transaction._id}, {'$set': {'state': Transaction.STATE_COMMITTED}})
        Account.objects.update({'_id': account1._id},
                {'$pull': {'pending_transactions': transaction._id}})
        Account.objects.update({'_id': account2._id},
                {'$pull': {'pending_transactions': transaction._id}})

        transaction = Transaction.objects.get_one({'_id' : transaction._id})

        transaction.complete()

        account1 = Account.objects.get_one({'_id' : account1._id})
        account2 = Account.objects.get_one({'_id' : account2._id})
        trans = Transaction.objects.get_one({'_id' : transaction._id})

        self.assertEqual(trans.state, Transaction.STATE_DONE)
        self.assertEqual(account1.balance.amount, -value.amount * value.rate)
        self.assertEqual(account2.balance.amount, value.amount * value.rate)
Пример #2
0
    def test_complete_after_pending1(self):
        value = Currency.us_dollars("99999999.99123459", "30.12342")

        account1 = self.user1_account
        account2 = self.user2_account

        transaction = Transaction({'source' : account1._id, 'dest' : account2._id, 'amount' : value})
        transaction.save()

        # partial transaction.apply() - up to pending
        Transaction.objects.update({'_id': transaction._id}, {'$set': {'state': Transaction.STATE_PENDING}})
        transaction = Transaction.objects.get_one({'_id' : transaction._id})

        transaction.complete()

        account1 = Account.objects.get_one({'_id' : account1._id})
        account2 = Account.objects.get_one({'_id' : account2._id})
        trans = Transaction.objects.get_one({'_id' : transaction._id})

        self.assertEqual(trans.state, Transaction.STATE_DONE)
        self.assertEqual(account1.balance.amount, -value.amount * value.rate)
        self.assertEqual(account2.balance.amount, value.amount * value.rate)