Skip to content

Commit d5447a7

Browse files
committed
fix: expenses tests
1 parent 09d8d27 commit d5447a7

File tree

1 file changed

+71
-98
lines changed

1 file changed

+71
-98
lines changed

Diff for: expenses/tests.py

+71-98
Original file line numberDiff line numberDiff line change
@@ -1,135 +1,108 @@
1-
from django.test import TestCase
2-
from unittest.mock import patch
3-
from rest_framework.test import APIClient
1+
from rest_framework.test import APITestCase, APIClient
42
from rest_framework import status
3+
from unittest.mock import patch
4+
from authentication.models import User
5+
from user_expense_type.models import UserExpenseType
6+
from bankcard.models import BankCard
57
from authentication.services.cognito_service import CognitoService
6-
from rest_framework.response import Response
7-
from .views import ExpenseViewSet, ExpenseGroupedByTypeAndCategoryViewSet
88

99

10-
class ExpenseViewSetTestCase(TestCase):
10+
class ExpenseViewSetTestCase(APITestCase):
1111
def setUp(self):
1212
self.client = APIClient()
13-
self.view = ExpenseViewSet()
14-
self.expense = {
15-
"user_expense_type": 1,
13+
self.user = User.objects.create_user(username="test@email.com", email="test@email.com", password="TestPassword1", first_name="Test User", user_id="389704ef-1e4f-4000-a801-bf887a1c88f2")
14+
self.user_expense_type = UserExpenseType.objects.create(username="389704ef-1e4f-4000-a801-bf887a1c88f2", set_by_user=False, name="Personal")
15+
self.bankcard = BankCard.objects.create(user_id=self.user, account_number=123456, bank_name="Test Bank", card_type="debit")
16+
self.expense_data = {
17+
"user_expense_type": self.user_expense_type.id,
1618
"category": 1,
17-
"bankcard_id": 1,
19+
"bankcard_id": self.bankcard.id,
1820
"amount": 100,
21+
"description": "Test description",
22+
"username": "389704ef-1e4f-4000-a801-bf887a1c88f2",
1923
}
2024

21-
@patch.object(ExpenseViewSet, "create")
22-
@patch.object(CognitoService, "login_user")
23-
def test_create(self, mock_login_user, mock_create):
24-
mock_login_user.return_value = {
25-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
26-
}
27-
mock_create.return_value = Response(status=status.HTTP_201_CREATED, data=self.expense)
28-
29-
request = self.client.post("/expenses/", self.expense)
30-
request.headers["Authorization"] = "Bearer mock_access_token"
25+
@patch("authentication.decorators.get_user_id_from_token")
26+
@patch("expenses.views.categorize_expense_description")
27+
@patch("expenses.views.get_user_id_from_token")
28+
def test_create(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
29+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
30+
mock_categorize.return_value = self.expense_data, None
31+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
3132

32-
response = self.client.post("/expenses/", self.expense)
33+
response = self.client.post("/expenses/", self.expense_data)
3334

3435
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
3536
self.assertEqual(response.data["amount"], 100)
3637

37-
@patch.object(ExpenseViewSet, "list")
38-
@patch.object(CognitoService, "login_user")
39-
def test_list(self, mock_login_user, mock_list):
40-
mock_login_user.return_value = {
41-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
42-
}
43-
mock_list.return_value = Response(status=status.HTTP_200_OK, data=self.expense)
44-
45-
request = self.client.get("/expenses/")
46-
request.headers["Authorization"] = "Bearer mock_access_token"
38+
@patch("authentication.decorators.get_user_id_from_token")
39+
@patch("expenses.views.categorize_expense_description")
40+
@patch("expenses.views.get_user_id_from_token")
41+
def test_list(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
42+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
43+
mock_categorize.return_value = self.expense_data, None
44+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
4745

46+
response = self.client.post("/expenses/", self.expense_data)
47+
response = self.client.post("/expenses/", self.expense_data)
4848
response = self.client.get("/expenses/")
4949

5050
self.assertEqual(response.status_code, status.HTTP_200_OK)
51-
self.assertEqual(response.data["amount"], 100)
51+
self.assertEqual(len(response.data), 2)
5252

53-
@patch.object(ExpenseViewSet, "retrieve")
54-
@patch.object(CognitoService, "login_user")
55-
def test_retrieve(self, mock_login_user, mock_retrieve):
56-
mock_login_user.return_value = {
57-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
58-
}
59-
mock_retrieve.return_value = Response(status=status.HTTP_200_OK, data=self.expense)
60-
61-
request = self.client.get("/expenses/1/")
62-
request.headers["Authorization"] = "Bearer mock_access_token"
53+
@patch("authentication.decorators.get_user_id_from_token")
54+
@patch("expenses.views.categorize_expense_description")
55+
@patch("expenses.views.get_user_id_from_token")
56+
def test_retrieve(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
57+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
58+
mock_categorize.return_value = self.expense_data, None
59+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
6360

64-
response = self.client.get("/expenses/1/")
61+
response = self.client.post("/expenses/", self.expense_data)
62+
response = self.client.get(f"/expenses/{response.data['id']}/")
6563

6664
self.assertEqual(response.status_code, status.HTTP_200_OK)
6765
self.assertEqual(response.data["amount"], 100)
6866

69-
@patch.object(ExpenseViewSet, "destroy")
70-
@patch.object(CognitoService, "login_user")
71-
def test_destroy(self, mock_login_user, mock_destroy):
72-
mock_login_user.return_value = {
73-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
74-
}
75-
mock_destroy.return_value = Response(status=status.HTTP_204_NO_CONTENT)
76-
77-
request = self.client.delete("/expenses/1/")
78-
request.headers["Authorization"] = "Bearer mock_access_token"
79-
80-
response = self.client.delete("/expenses/1/")
81-
82-
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
67+
@patch("authentication.decorators.get_user_id_from_token")
68+
@patch("expenses.views.categorize_expense_description")
69+
@patch("expenses.views.get_user_id_from_token")
70+
def test_update(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
71+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
72+
mock_categorize.return_value = self.expense_data, None
73+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
8374

84-
@patch.object(ExpenseViewSet, "partial_update")
85-
@patch.object(CognitoService, "login_user")
86-
def test_partial_update(self, mock_login_user, mock_partial_update):
87-
mock_login_user.return_value = {
88-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
89-
}
90-
new_expense = {
91-
"expense_type": 1,
92-
"category": 1,
93-
"bankcard_id": 1,
94-
"amount": 200,
95-
}
96-
mock_partial_update.return_value = Response(status=status.HTTP_200_OK, data=new_expense)
97-
98-
request = self.client.put("/expenses/1/", {"amount": 200})
99-
request.headers["Authorization"] = "Bearer mock_access_token"
100-
101-
response = self.client.put("/expenses/1/", {"amount": 200})
75+
response = self.client.post("/expenses/", self.expense_data)
76+
response = self.client.put(f"/expenses/{response.data['id']}/", {"amount": 200})
10277

10378
self.assertEqual(response.status_code, status.HTTP_200_OK)
10479
self.assertEqual(response.data["amount"], 200)
10580

81+
@patch("authentication.decorators.get_user_id_from_token")
82+
@patch("expenses.views.categorize_expense_description")
83+
@patch("expenses.views.get_user_id_from_token")
84+
def test_delete(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
85+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
86+
mock_categorize.return_value = self.expense_data, None
87+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
10688

107-
class ExpenseGroupedByTypeAndCategoryViewSetTestCase(TestCase):
108-
def setUp(self):
109-
self.client = APIClient()
110-
self.view = ExpenseGroupedByTypeAndCategoryViewSet()
111-
self.expense = {
112-
"expense_type": 1,
113-
"category": 1,
114-
"bankcard_id": 1,
115-
"amount": 100,
116-
}
117-
self.expenses_grouped = {"Personal": {"Comida": 100}}
89+
response = self.client.post("/expenses/", self.expense_data)
90+
response = self.client.delete(f"/expenses/{response.data['id']}/")
11891

119-
@patch.object(ExpenseGroupedByTypeAndCategoryViewSet, "list")
120-
@patch.object(CognitoService, "login_user")
121-
def test_list(self, mock_login_user, mock_list):
122-
mock_login_user.return_value = {
123-
"AuthenticationResult": {"AccessToken": "mock_access_token", "IdToken": "mock_id_token"}
124-
}
125-
mock_list.return_value = Response(status=status.HTTP_200_OK, data=self.expenses_grouped)
92+
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
12693

127-
request = self.client.get("/expenses/grouped/")
128-
request.headers["Authorization"] = "Bearer mock_access_token"
94+
@patch("authentication.decorators.get_user_id_from_token")
95+
@patch("expenses.views.categorize_expense_description")
96+
@patch("expenses.views.get_user_id_from_token")
97+
def test_grouped(self, mock_get_user_id, mock_categorize, mock_auth_get_user_id):
98+
mock_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
99+
mock_categorize.return_value = self.expense_data, None
100+
mock_auth_get_user_id.return_value = "389704ef-1e4f-4000-a801-bf887a1c88f2"
129101

102+
response = self.client.post("/expenses/", self.expense_data)
103+
response = self.client.post("/expenses/", self.expense_data)
130104
response = self.client.get("/expenses/grouped/")
131105

132106
self.assertEqual(response.status_code, status.HTTP_200_OK)
133-
self.assertIn("Personal", response.data)
134-
self.assertIn("Comida", response.data["Personal"])
135-
self.assertEqual(response.data["Personal"]["Comida"], 100)
107+
self.assertEqual(len(response.data), 1)
108+
self.assertEqual(response.data["Personal"]["Comida"], 200)

0 commit comments

Comments
 (0)