def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) try: Transaction.make_transaction(**serializer.validated_data) except InvalidAmount as err: content = {err.default_code: err.detail} status_code = err.status_code return Response(content, status=status_code) return Response(serializer.data, status=status.HTTP_201_CREATED)
def test_transaction_fail_amount(self): initial_balance = 0 trans_amount = 100 account = Account.objects.create( holder=self.user, balance=initial_balance, status=Account.ACTIVE ) with self.assertRaises(InvalidAmount): Transaction.make_transaction( account=account, merchant='GH', amount=trans_amount, comment='For you' )
def test_transfer(self): initial_balance = 300 trans_amount = 100 account = Account.objects.create( holder=self.user, balance=initial_balance, status=Account.ACTIVE ) Transaction.make_transaction( account=account, merchant='GH', amount=trans_amount, comment='For you' ) transaction = Transaction.objects.all().first() self.assertIsInstance(transaction, Transaction) self.assertEqual(transaction.__str__(), f'Account {transaction.account.uid} sent {transaction.amount} to {transaction.merchant}')
def test_transaction(self): initial_balance = 300 trans_amount = 100 account = Account.objects.create( holder=self.user, balance=initial_balance, status=Account.ACTIVE ) Transaction.make_transaction( account=account, merchant='GH', amount=trans_amount, comment='For you' ) expected_balance = initial_balance - trans_amount transaction = Transaction.objects.all() self.assertEqual(account.balance, expected_balance) self.assertEqual(len(transaction), 1)