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)
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)