tests.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. """
  2. Tests for Transaction app
  3. """
  4. from django.test import TestCase
  5. from rest_framework.test import APITestCase
  6. from rest_framework import status
  7. from rest_framework.reverse import reverse
  8. from django.contrib.auth import get_user_model
  9. from .serializers import (CreateTransactionSerializer)
  10. from .models import Transaction
  11. User = get_user_model()
  12. class TransactionsSerializerTest(TestCase):
  13. """ Test module for test all serializers API """
  14. user_error = {
  15. "reference": "000050",
  16. "account": "C00099",
  17. "date": "2020-01-03",
  18. "amount": -25.10,
  19. "type": "outflow",
  20. "category": "groceries",
  21. "user_id": -99
  22. }
  23. inflow_ok = {
  24. "reference": "000051",
  25. "account": "C00099",
  26. "date": "2020-01-03",
  27. "amount": 51.13,
  28. "type": "inflow",
  29. "category": "groceries",
  30. "user_id": 1
  31. }
  32. inflow_error = {
  33. "reference": "000052",
  34. "account": "C00099",
  35. "date": "2020-01-03",
  36. "amount": -51.13,
  37. "type": "inflow",
  38. "category": "groceries",
  39. "user_id": 1
  40. }
  41. outflow_ok = {
  42. "reference": "000053",
  43. "account": "C00099",
  44. "date": "2020-01-03",
  45. "amount": -25.10,
  46. "type": "outflow",
  47. "category": "groceries",
  48. "user_id": 1
  49. }
  50. outflow_error = {
  51. "reference": "000054",
  52. "account": "C00099",
  53. "date": "2020-01-03",
  54. "amount": 25.10,
  55. "type": "outflow",
  56. "category": "groceries",
  57. "user_id": 1
  58. }
  59. type_error = {
  60. "reference": "000055",
  61. "account": "C00099",
  62. "date": "2020-01-03",
  63. "amount": 25.10,
  64. "type": "another_type",
  65. "category": "groceries",
  66. "user_id": 1
  67. }
  68. date_error = {
  69. "reference": "000052",
  70. "account": "C00099",
  71. "amount": -51.13,
  72. "type": "inflow",
  73. "category": "groceries",
  74. "user_id": 1
  75. }
  76. def setUp(self):
  77. User.objects.create(id=1,name='test',email='test@test.com',age=18)
  78. def test_wrong_outflow_value(self):
  79. serializer = CreateTransactionSerializer(data=self.outflow_error)
  80. self.assertEqual(serializer.is_valid(), False)
  81. self.assertEqual(set(serializer.errors.keys()), set(['amount']))
  82. def test_wrong_inflow_value(self):
  83. serializer = CreateTransactionSerializer(data=self.inflow_error)
  84. self.assertEqual(serializer.is_valid(), False)
  85. self.assertEqual(set(serializer.errors.keys()), set(['amount']))
  86. def test_wrong_type_value(self):
  87. serializer = CreateTransactionSerializer(data=self.type_error)
  88. self.assertEqual(serializer.is_valid(), False)
  89. self.assertEqual(set(serializer.errors.keys()), set(['type']))
  90. def test_wrong_user_value(self):
  91. serializer = CreateTransactionSerializer(data=self.user_error)
  92. self.assertEqual(serializer.is_valid(), False)
  93. self.assertEqual(set(serializer.errors.keys()), set(['user_id']))
  94. def test_wrong_date_value(self):
  95. serializer = CreateTransactionSerializer(data=self.date_error)
  96. self.assertEqual(serializer.is_valid(), False)
  97. self.assertEqual(set(serializer.errors.keys()), set(['date']))
  98. def test_pass_inflow(self):
  99. serializer = CreateTransactionSerializer(data=self.inflow_ok)
  100. self.assertEqual(serializer.is_valid(), True)
  101. def test_pass_outflow(self):
  102. serializer = CreateTransactionSerializer(data=self.outflow_ok)
  103. self.assertEqual(serializer.is_valid(), True)
  104. class TransactionViewTest(APITestCase):
  105. """ Test case for Transactions Views """
  106. inflow_ok = {
  107. "reference": "000051",
  108. "account": "C00099",
  109. "date": "2020-01-03",
  110. "amount": 51.1,
  111. "type": "inflow",
  112. "category": "salary",
  113. "user_id": 1
  114. }
  115. outflow_ok = {
  116. "reference": "000053",
  117. "account": "C00099",
  118. "date": "2020-01-03",
  119. "amount": -25.10,
  120. "type": "outflow",
  121. "category": "groceries",
  122. "user_id": 1
  123. }
  124. balance_expected = [{
  125. "account": "C00099",
  126. "balance": inflow_ok.get('amount')+outflow_ok.get('amount'),
  127. "total_inflow": inflow_ok.get('amount'),
  128. "total_outflow": outflow_ok.get('amount'),
  129. }]
  130. balance_cashflow = {
  131. "inflow": {inflow_ok.get('category'): inflow_ok.get('amount')},
  132. "outflow": {outflow_ok.get('category'): outflow_ok.get('amount')},
  133. }
  134. def setUp(self):
  135. User.objects.create(id=1,name='test',email='test@test.com',age=18)
  136. Transaction.objects.create(**self.inflow_ok)
  137. Transaction.objects.create(**self.outflow_ok)
  138. def test_get_balance(self):
  139. # get API response
  140. response = self.client.get(reverse('transactions:balance-detail',
  141. kwargs={'user_id':1}),{}, format='json')
  142. self.assertEqual(response.data, self.balance_expected)
  143. self.assertEqual(response.status_code, status.HTTP_200_OK)
  144. def test_get_cashflow(self):
  145. # get API response
  146. response = self.client.get(reverse('transactions:cashflow-detail',
  147. kwargs={'user_id':1}),{}, format='json')
  148. self.assertEqual(response.data, self.balance_cashflow)
  149. self.assertEqual(response.status_code, status.HTTP_200_OK)