Skip to content

Commit 1518c91

Browse files
committed
test(profiles/athletes): add tests for Athlete CBViews
1 parent b80ed1a commit 1518c91

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

profiles/templates/profiles/athlete_detail.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ <h1>Dettaglio Atleta</h1>
1010
<p><strong>Categoria:</strong> {{ athlete_detail.category.name }}</p>
1111
<p><strong>Trainer:</strong> {{ athlete_detail.trainer }}</p>
1212

13-
<a href="{% url 'athletes_list' %}">Torna alla lista</a>
13+
<a href="{% url 'athlete_list' %}">Torna alla lista</a>
1414
{% endblock %}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
from django.test import TestCase, Client
2+
from django.urls import reverse
3+
from datetime import date
4+
from profiles.models import Athlete, Category, Trainer
5+
6+
7+
class AthleteViewsTest(TestCase):
8+
@classmethod
9+
def setUpTestData(cls):
10+
"""Create shared data for all tests."""
11+
cls.category = Category.objects.create(
12+
code='JM',
13+
description='Junior Maschile',
14+
age_range='Under 20'
15+
)
16+
cls.trainer = Trainer.objects.create(
17+
first_name='Paolo',
18+
last_name='Bianchi',
19+
fiscal_code='BNCPLO80A01H211B'
20+
)
21+
cls.athlete = Athlete.objects.create(
22+
first_name='Mario',
23+
last_name='Rossi',
24+
date_of_birth='1990-01-01',
25+
place_of_birth='Rome',
26+
fiscal_code='RSSMRA90A01H211B',
27+
category=cls.category,
28+
trainer=cls.trainer
29+
)
30+
31+
def setUp(self):
32+
"""Set up the client for testing."""
33+
self.client = Client()
34+
35+
# Test ListView
36+
def test_athlete_list_view(self):
37+
"""Test that the Athlete ListView returns a 200 status code and uses the correct template."""
38+
url = reverse('athlete_list')
39+
response = self.client.get(url)
40+
self.assertEqual(response.status_code, 200)
41+
self.assertTemplateUsed(response, 'profiles/athlete_list.html')
42+
self.assertIn(self.athlete, response.context['athlete_list'])
43+
44+
# Test DetailView
45+
def test_athlete_detail_view(self):
46+
"""Test that the Athlete DetailView returns a 200 status code and displays the correct object."""
47+
url = reverse('athlete_detail', kwargs={"pk": self.athlete.pk})
48+
response = self.client.get(url)
49+
self.assertEqual(response.status_code, 200)
50+
self.assertTemplateUsed(response, 'profiles/athlete_detail.html')
51+
self.assertEqual(response.context['athlete_detail'], self.athlete)
52+
53+
# Test CreateView
54+
def test_athlete_create_view(self):
55+
"""Test creating a new athlete."""
56+
url = reverse('athlete_create')
57+
payload = {
58+
'first_name': 'Luigi',
59+
'last_name': 'Bianchi',
60+
'date_of_birth': '1995-05-15',
61+
'place_of_birth': 'Milan',
62+
'fiscal_code': 'BNCLGI95E15H211B',
63+
'category': self.category.pk,
64+
'trainer': self.trainer.pk
65+
}
66+
response = self.client.post(url, payload)
67+
self.assertEqual(response.status_code, 302)
68+
self.assertEqual(Athlete.objects.count(), 2)
69+
new_athlete = Athlete.objects.get(fiscal_code='BNCLGI95E15H211B')
70+
self.assertEqual(new_athlete.first_name, 'Luigi')
71+
self.assertEqual(new_athlete.last_name, 'Bianchi')
72+
self.assertEqual(new_athlete.date_of_birth, date(1995, 5, 15))
73+
self.assertEqual(new_athlete.place_of_birth, 'Milan')
74+
self.assertEqual(new_athlete.category, self.category)
75+
self.assertEqual(new_athlete.trainer, self.trainer)
76+
77+
# Test UpdateView
78+
def test_athlete_update_view(self):
79+
"""Test updating an existing athlete."""
80+
url = reverse('athlete_update', kwargs={"pk": self.athlete.pk})
81+
payload = {
82+
'first_name': 'Mario Updated',
83+
'last_name': 'Rossi',
84+
'date_of_birth': '1990-01-01',
85+
'place_of_birth': 'Rome',
86+
'fiscal_code': 'RSSMRA90A01H211B',
87+
'category': self.category.pk,
88+
'trainer': self.trainer.pk
89+
}
90+
response = self.client.post(url, payload)
91+
self.assertEqual(response.status_code, 302) # Redirect after update
92+
self.athlete.refresh_from_db()
93+
self.assertEqual(self.athlete.first_name, 'Mario Updated')
94+
self.assertEqual(self.athlete.last_name, 'Rossi')
95+
self.assertEqual(self.athlete.date_of_birth, date(1990, 1, 1))
96+
self.assertEqual(self.athlete.place_of_birth, 'Rome')
97+
self.assertEqual(self.athlete.category, self.category)
98+
self.assertEqual(self.athlete.trainer, self.trainer)
99+
100+
# Test DeleteView
101+
def test_athlete_delete_view(self):
102+
"""Test deleting an athlete."""
103+
url = reverse('athlete_delete', kwargs={"pk": self.athlete.pk})
104+
response = self.client.post(url)
105+
self.assertEqual(response.status_code, 302)
106+
self.assertFalse(Athlete.objects.filter(pk=self.athlete.pk).exists())

0 commit comments

Comments
 (0)