Skip to content

Commit 7e1c3c1

Browse files
authored
Merge pull request #32 from jolanipekun/feature-branch
first commit, dashboard url tests
2 parents f61884f + 4ef34c9 commit 7e1c3c1

File tree

8 files changed

+180
-4
lines changed

8 files changed

+180
-4
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 4.2.5 on 2024-10-04 17:40
2+
3+
import datetime
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('FinTech', '0006_alter_expensecategory_name_alter_incomecategory_name'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='expense',
16+
name='date',
17+
field=models.DateField(default=datetime.date(2024, 10, 4)),
18+
),
19+
migrations.AlterField(
20+
model_name='income',
21+
name='date',
22+
field=models.DateField(default=datetime.date(2024, 10, 4)),
23+
),
24+
]

FinanceTracker/FinTech/tests.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

FinanceTracker/FinTech/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def dashboard(request):
1616
for catg in my_catg:
1717
out_dict[catg.name]=0
1818

19-
expenses= Expense.objects.filter(user=request.user.id)
19+
expenses= Expense.objects.filter(user=request.user.id).order_by('id')
2020
for expense in expenses:
2121
catg=expense.category
2222
pre_amount=expense.amount

FinanceTracker/FinanceTracker/tests/__init__.py

Whitespace-only changes.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from django.test import TestCase
2+
from django.contrib.auth.models import User
3+
from FinTech.models import IncomeCategory, ExpenseCategory
4+
5+
class CategoryModelTest(TestCase):
6+
7+
def setUp(self):
8+
# Create a user for testing
9+
self.user = User.objects.create_user(username='testuser', password='testpass')
10+
11+
def test_income_category_creation(self):
12+
# Create an IncomeCategory instance
13+
income_category = IncomeCategory.objects.create(name='Salary', user=self.user)
14+
15+
# Check if the category was created successfully
16+
self.assertEqual(income_category.name, 'Salary')
17+
self.assertEqual(income_category.user, self.user)
18+
self.assertIsInstance(income_category, IncomeCategory)
19+
20+
def test_expense_category_creation(self):
21+
# Create an ExpenseCategory instance
22+
expense_category = ExpenseCategory.objects.create(name='Food', user=self.user)
23+
24+
# Check if the category was created successfully
25+
self.assertEqual(expense_category.name, 'Food')
26+
self.assertEqual(expense_category.user, self.user)
27+
self.assertIsInstance(expense_category, ExpenseCategory)
28+
29+
def test_income_category_str_method(self):
30+
# Create an IncomeCategory instance
31+
income_category = IncomeCategory.objects.create(name='Salary', user=self.user)
32+
33+
# Check if the string representation is correct
34+
self.assertEqual(str(income_category), 'Salary')
35+
36+
def test_expense_category_str_method(self):
37+
# Create an ExpenseCategory instance
38+
expense_category = ExpenseCategory.objects.create(name='Food', user=self.user)
39+
40+
# Check if the string representation is correct
41+
self.assertEqual(str(expense_category), 'Food')
42+
43+
def test_income_category_user_relationship(self):
44+
# Create an IncomeCategory instance
45+
income_category = IncomeCategory.objects.create(name='Bonus', user=self.user)
46+
47+
# Check if the user relationship is correct
48+
self.assertEqual(income_category.user.username, 'testuser')
49+
self.assertEqual(self.user.user_inc_catg.count(), 1) # Check that the user has 1 income category
50+
51+
def test_expense_category_user_relationship(self):
52+
# Create an ExpenseCategory instance
53+
expense_category = ExpenseCategory.objects.create(name='Transport', user=self.user)
54+
55+
# Check if the user relationship is correct
56+
self.assertEqual(expense_category.user.username, 'testuser')
57+
self.assertEqual(self.user.user_exp_catg.count(), 1) # Check that the user has 1 expense category
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from django.test import SimpleTestCase
2+
from django.urls import reverse, resolve
3+
from FinTech.views import dashboard, income, expenses, edit_income, edit_expense, delete_expense, delete_income, expense_report, income_report, add_expense_category, add_income_category, remove_expense_category, remove_income_category, profile, settings, index, signup, login, logout
4+
5+
6+
7+
class TestUrls(SimpleTestCase):
8+
9+
def test_dashboard_url(self):
10+
url = reverse('dashboard')
11+
#print(resolve(url))
12+
self.assertEqual(resolve(url).func, dashboard)
13+
14+
def test_incomes_url(self):
15+
url = reverse('incomes')
16+
self.assertEqual(resolve(url).func, income)
17+
self.assertNotEqual(resolve(url).func, expenses)
18+
19+
def test_expenses_url(self):
20+
url = reverse('expenses')
21+
self.assertEqual(resolve(url).func, expenses)
22+
23+
def test_edit_Income_url(self):
24+
url = reverse('edit-income', args=[1])
25+
self.assertEqual(resolve(url).func, edit_income)
26+
27+
def test_edit_Expense_url(self):
28+
url = reverse('edit-expense', args=[2])
29+
self.assertEqual(resolve(url).func, edit_expense)
30+
31+
def test_Expense_Report_url(self):
32+
url = reverse('expense-report', args=['string'])
33+
self.assertEqual(resolve(url).func, expense_report)
34+
35+
def test_remove_Income_url(self):
36+
url = reverse('remove-income-category', args=[1])
37+
self.assertNotEqual(resolve(url).func, income)
38+
self.assertEqual(resolve(url).func, remove_income_category)
39+
40+
def test_profile_url(self):
41+
url = reverse('profile')
42+
self.assertEqual(resolve(url).func, profile)
43+
self.assertNotEqual(resolve(url).func, settings)
44+
45+
def test_signup_url(self):
46+
url = reverse('signup')
47+
self.assertEqual(resolve(url).func, signup)
48+
self.assertNotEqual(resolve(url).func, index)
49+
self.assertNotEqual(resolve(url).func, login)
50+
self.assertNotEqual(resolve(url).func, logout)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from django.test import TestCase, Client
2+
from django.urls import reverse
3+
from django.contrib.auth.models import User
4+
from datetime import date
5+
from unittest.mock import patch, MagicMock
6+
from FinTech.models import IncomeCategory, ExpenseCategory, Income, Expense, Budget, Account
7+
import json
8+
9+
10+
class TestViews(TestCase):
11+
12+
def setUp(self):
13+
# Create a user and log them in
14+
self.user = User.objects.create_user(username='testuser', password='testpass')
15+
self.client.login(username='testuser', password='testpass')
16+
17+
# Create an account for the user
18+
self.account = Account.objects.create(user=self.user, balance=500)
19+
20+
# Create expense categories for the user
21+
self.catg_food = ExpenseCategory.objects.create(user=self.user, name='Food')
22+
self.catg_transport = ExpenseCategory.objects.create(user=self.user, name='Transport')
23+
24+
# Create expenses for the user
25+
self.expense1 = Expense.objects.create(user=self.user, amount=50, category=self.catg_food, date=date.today())
26+
self.expense2 = Expense.objects.create(user=self.user, amount=20, category=self.catg_transport, date=date.today())
27+
self.expense3 = Expense.objects.create(user=self.user, amount=30, category=self.catg_food, date=date.today())
28+
29+
def test_dashboard_view_expenses_and_balance(self):
30+
# Call the dashboard view
31+
response = self.client.get(reverse('dashboard'))
32+
33+
# Check if the response is 200 OK
34+
self.assertEqual(response.status_code, 200)
35+
36+
# Check if the account balance is passed correctly to the template
37+
self.assertContains(response, self.account.balance)
38+
39+
# Check if the expenses by category are calculated correctly
40+
context = response.context
41+
expected_expenses = {
42+
'Food': 80, # 50 + 30
43+
'Transport': 20 # 20
44+
}
45+
46+
# Verify that the output dictionary has correct totals
47+
# self.assertEqual(context['catg_list'], ['Food', 'Transport'])
48+
self.assertEqual(context['catg_total_list'], [80, 20])

FinanceTracker/requirements.txt

-50 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)