from django.test import TestCase from rest_framework.test import APITestCase from rest_framework import status from rest_framework.reverse import reverse from .serializers import (CreateTransactionSerializer) from .models import Transaction from django.contrib.auth import get_user_model User = get_user_model() # Create your tests here. class TransactionsSerializerTest(TestCase): """ Test module for test all serializers API """ user_error = { "reference": "000050", "account": "C00099", "date": "2020-01-03", "amount": -25.10, "type": "outflow", "category": "groceries", "user_id": -99 } inflow_ok = { "reference": "000051", "account": "C00099", "date": "2020-01-03", "amount": 51.13, "type": "inflow", "category": "groceries", "user_id": 1 } inflow_error = { "reference": "000052", "account": "C00099", "date": "2020-01-03", "amount": -51.13, "type": "inflow", "category": "groceries", "user_id": 1 } outflow_ok = { "reference": "000053", "account": "C00099", "date": "2020-01-03", "amount": -25.10, "type": "outflow", "category": "groceries", "user_id": 1 } outflow_error = { "reference": "000054", "account": "C00099", "date": "2020-01-03", "amount": 25.10, "type": "outflow", "category": "groceries", "user_id": 1 } type_error = { "reference": "000055", "account": "C00099", "date": "2020-01-03", "amount": 25.10, "type": "another_type", "category": "groceries", "user_id": 1 } date_error = { "reference": "000052", "account": "C00099", "amount": -51.13, "type": "inflow", "category": "groceries", "user_id": 1 } def setUp(self): user = User.objects.create(id=1,name='test',email='test@test.com',age=18) def test_wrong_outflow_value(self): serializer = CreateTransactionSerializer(data=self.outflow_error) self.assertEqual(serializer.is_valid(), False) self.assertEqual(set(serializer.errors.keys()), set(['amount'])) def test_wrong_inflow_value(self): serializer = CreateTransactionSerializer(data=self.inflow_error) self.assertEqual(serializer.is_valid(), False) self.assertEqual(set(serializer.errors.keys()), set(['amount'])) def test_wrong_type_value(self): serializer = CreateTransactionSerializer(data=self.type_error) self.assertEqual(serializer.is_valid(), False) self.assertEqual(set(serializer.errors.keys()), set(['type'])) def test_wrong_user_value(self): serializer = CreateTransactionSerializer(data=self.user_error) self.assertEqual(serializer.is_valid(), False) self.assertEqual(set(serializer.errors.keys()), set(['user_id'])) def test_wrong_date_value(self): serializer = CreateTransactionSerializer(data=self.date_error) self.assertEqual(serializer.is_valid(), False) self.assertEqual(set(serializer.errors.keys()), set(['date'])) def test_pass_inflow(self): serializer = CreateTransactionSerializer(data=self.inflow_ok) self.assertEqual(serializer.is_valid(), True) def test_pass_outflow(self): serializer = CreateTransactionSerializer(data=self.outflow_ok) self.assertEqual(serializer.is_valid(), True) class TransactionViewTest(APITestCase): """ Test case for Transactions Views """ inflow_ok = { "reference": "000051", "account": "C00099", "date": "2020-01-03", "amount": 51.1, "type": "inflow", "category": "salary", "user_id": 1 } outflow_ok = { "reference": "000053", "account": "C00099", "date": "2020-01-03", "amount": -25.10, "type": "outflow", "category": "groceries", "user_id": 1 } balance_expected = [{ "account": "C00099", "balance": inflow_ok.get('amount')+outflow_ok.get('amount'), "total_inflow": inflow_ok.get('amount'), "total_outflow": outflow_ok.get('amount'), }] balance_cashflow = { "inflow": {inflow_ok.get('category'): inflow_ok.get('amount')}, "outflow": {outflow_ok.get('category'): outflow_ok.get('amount')}, } def setUp(self): user = User.objects.create(id=1,name='test',email='test@test.com',age=18) tr1 = Transaction.objects.create(**self.inflow_ok) tr2 = Transaction.objects.create(**self.outflow_ok) def test_get_balance(self): # get API response response = self.client.get(reverse('transactions:balance-detail', kwargs={'user_id':1}),{}, format='json') self.assertEqual(response.data, self.balance_expected) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_get_cashflow(self): # get API response response = self.client.get(reverse('transactions:cashflow-detail', kwargs={'user_id':1}),{}, format='json') self.assertEqual(response.data, self.balance_cashflow) self.assertEqual(response.status_code, status.HTTP_200_OK)