|
|
@@ -0,0 +1,163 @@
|
|
|
+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)
|