tests.py 5.2 KB

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