From e531dec8fe44804263ef208c1b5dfeb73ada7a1f Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Fri, 16 Jan 2026 23:02:37 +0100 Subject: [PATCH] Created 'test_dashboard.py' and fixed bug in 'test_models.py' --- .../expenses/tests/test_dashboard.py | 94 +++++++++++++++++++ .../expenses/tests/test_models.py | 2 +- 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 expenses_manager/expenses/tests/test_dashboard.py diff --git a/expenses_manager/expenses/tests/test_dashboard.py b/expenses_manager/expenses/tests/test_dashboard.py new file mode 100644 index 0000000..456b895 --- /dev/null +++ b/expenses_manager/expenses/tests/test_dashboard.py @@ -0,0 +1,94 @@ +import pytest +from datetime import date +from decimal import Decimal +from django.urls import reverse +from expenses.models import Expense, Category + +pytestmark = pytest.mark.django_db + +def test_dashboard_requires_login(client): + url = reverse('dashboard') + response = client.get(url) + assert response.status_code == 302 + +def test_dashboard_logged_user_can_access(client, django_user_model): + user = django_user_model.objects.create_user( + username='test', + password='1234' + ) + client.login(username='test', password='1234') + + url = reverse('dashboard') + response = client.get(url) + + assert response.status_code == 200 + +def test_dashboard_groups_by_category(client, django_user_model): + user = django_user_model.objects.create_user( + username='test', + password='1234' + ) + client.login(username='test', password='1234') + + food = Category.objects.create(name='Food', owner=user) + rent = Category.objects.create(name='Rent', owner=user) + + Expense.objects.create( + owner=user, + category=food, + amount=Decimal('10'), + date=date(2024, 1, 1), + ) + Expense.objects.create( + owner=user, + category=food, + amount=Decimal('5'), + date=date(2024, 1, 2), + ) + Expense.objects.create( + owner=user, + category=rent, + amount=Decimal('20'), + date=date(2024, 1, 3), + ) + + response = client.get(reverse('dashboard')) + + data = list(response.context['by_category']) + + assert {'category__name': 'Food', 'total': Decimal('15')} in data + assert {'category__name': 'Rent', 'total': Decimal('20')} in data + +def test_dashboard_filters_by_year(client, django_user_model): + user = django_user_model.objects.create_user( + username='test', + password='1234' + ) + client.login(username='test', password='1234') + + cat = Category.objects.create(name='General', owner=user) + + Expense.objects.create( + owner=user, + category=cat, + amount=10, + date=date(2023, 5, 1), + ) + + Expense.objects.create( + owner=user, + category=cat, + amount=20, + date=date(2024, 5, 1), + ) + + response = client.get( + reverse('dashboard'), + {'year': 2024}, + ) + + by_month = list(response.context['by_month']) + + totals = [row['total'] for row in by_month] + assert Decimal('20') in totals + assert Decimal('10') not in totals \ No newline at end of file diff --git a/expenses_manager/expenses/tests/test_models.py b/expenses_manager/expenses/tests/test_models.py index 8c31d43..be40d6d 100644 --- a/expenses_manager/expenses/tests/test_models.py +++ b/expenses_manager/expenses/tests/test_models.py @@ -9,7 +9,7 @@ def test_create_basic_expense(): password="password", ) - category = Category.objects.create(name="Comida") + category = Category.objects.create(name="Comida", owner=user) account = Account.objects.create(name="Cuenta principal", owner=user) expense = Expense.objects.create(