Skip to content

Commit c845bb5

Browse files
committed
A completely redesigned project_v2!!!
1 parent 3769857 commit c845bb5

8 files changed

Lines changed: 440 additions & 489 deletions

File tree

task_manager/labels/fixtures/labels.json

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,24 @@
33
"model": "labels.label",
44
"pk": 1,
55
"fields": {
6-
"name": "Дом",
7-
"created_at": "2025-09-17T17:01:06.830Z",
8-
"updated_at": "2025-09-17T17:05:21.885Z"
6+
"name": "Home",
7+
"time_create": "2025-10-01T15:11:06.560Z"
98
}
109
},
1110
{
1211
"model": "labels.label",
13-
"pk": 2,
12+
"pk": 6,
1413
"fields": {
15-
"name": "Работа",
16-
"created_at": "2025-09-17T17:01:10.665Z",
17-
"updated_at": "2025-09-17T17:01:10.665Z"
14+
"name": "Work",
15+
"time_create": "2025-10-01T15:46:44.757Z"
1816
}
1917
},
2018
{
2119
"model": "labels.label",
22-
"pk": 3,
20+
"pk": 10,
2321
"fields": {
24-
"name": "Рефакторинг",
25-
"created_at": "2025-09-17T17:01:17.774Z",
26-
"updated_at": "2025-09-17T17:13:42.368Z"
22+
"name": "Deploy",
23+
"time_create": "2024-10-01T15:46:44.757Z"
2724
}
2825
}
2926
]

task_manager/labels/tests.py

Lines changed: 61 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,118 @@
1-
from django.contrib.auth import get_user_model
21
from django.contrib.messages import get_messages
32
from django.test import Client, TestCase
43
from django.urls import reverse
54

65
from task_manager.labels.models import Label
6+
from task_manager.users.models import CustomUser
77

88

9-
class LabelCRUDTest(TestCase):
9+
class LabelCRUDTestWithFixtures(TestCase):
10+
fixtures = [
11+
'users.json',
12+
'statuses.json',
13+
'labels.json',
14+
'tasks.json',
15+
]
16+
1017
def setUp(self):
1118
self.client = Client()
12-
User = get_user_model()
13-
self.user = User.objects.create_user(
14-
username='testuser',
15-
password='testpass123'
16-
)
17-
self.client.login(username='testuser', password='testpass123')
18-
self.label = Label.objects.create(name='Test Label')
19-
self.labels_url = reverse('labels')
20-
self.create_url = reverse('create_label')
21-
self.edit_url = lambda id: reverse(
22-
'edit_label',
23-
kwargs={'label_id': id}
19+
self.user = CustomUser.objects.get(username='dixon')
20+
self.client.force_login(self.user)
21+
self.label = Label.objects.get(pk=1)
22+
self.labels_url = reverse('labels:labels')
23+
self.create_url = reverse('labels:create_label')
24+
self.edit_url = lambda pk: reverse(
25+
'labels:edit_label', kwargs={'pk': pk}
2426
)
25-
self.delete_url = lambda id: reverse(
26-
'delete_label',
27-
kwargs={'label_id': id}
27+
self.delete_url = lambda pk: reverse(
28+
'labels:delete_label', kwargs={'pk': pk}
2829
)
2930

3031
def test_label_list_view(self):
3132
response = self.client.get(self.labels_url)
3233
self.assertEqual(response.status_code, 200)
33-
self.assertContains(response, 'Test Label')
34-
self.assertTemplateUsed(response, 'label/index.html')
34+
self.assertContains(response, self.label.name)
35+
self.assertTemplateUsed(response, 'labels/index.html')
3536

3637
def test_create_label_view_get(self):
3738
response = self.client.get(self.create_url)
3839
self.assertEqual(response.status_code, 200)
39-
self.assertTemplateUsed(response, 'label/create.html')
40+
self.assertTemplateUsed(response, 'labels/create.html')
4041
self.assertContains(response, 'Имя')
4142

4243
def test_create_label_view_post_success(self):
4344
data = {'name': 'New Label'}
4445
response = self.client.post(self.create_url, data)
4546
self.assertRedirects(response, self.labels_url)
47+
4648
messages = list(get_messages(response.wsgi_request))
4749
self.assertEqual(len(messages), 1)
4850
self.assertEqual(str(messages[0]), 'Метка успешно создана')
51+
4952
self.assertTrue(Label.objects.filter(name='New Label').exists())
5053

51-
def test_label_create_view_post_invalid(self):
54+
def test_create_label_view_post_invalid(self):
5255
data = {'name': ''}
5356
response = self.client.post(self.create_url, data)
5457
self.assertEqual(response.status_code, 200)
55-
self.assertTrue('form' in response.context)
56-
self.assertTrue(response.context['form'].errors)
57-
self.assertIn(
58-
'This field is required.',
59-
response.context['form'].errors['name'][0]
60-
)
58+
59+
form = response.context['form']
60+
self.assertTrue(form.errors)
61+
self.assertIn('This field is required.', form.errors['name'][0])
6162

6263
def test_label_edit_view_get(self):
63-
response = self.client.get(self.edit_url(self.label.id))
64+
response = self.client.get(self.edit_url(self.label.pk))
6465
self.assertEqual(response.status_code, 200)
65-
self.assertTemplateUsed(response, 'label/edit.html')
66-
self.assertContains(response, 'Test Label')
66+
self.assertTemplateUsed(response, 'labels/edit.html')
67+
self.assertContains(response, self.label.name)
6768

6869
def test_label_edit_view_post_success(self):
6970
data = {'name': 'Updated Label'}
7071
response = self.client.post(self.edit_url(self.label.id), data)
7172
self.assertRedirects(response, self.labels_url)
73+
7274
self.label.refresh_from_db()
7375
self.assertEqual(self.label.name, 'Updated Label')
7476

7577
def test_label_edit_view_post_invalid(self):
7678
data = {'name': ''}
7779
response = self.client.post(self.edit_url(self.label.id), data)
7880
self.assertEqual(response.status_code, 200)
79-
self.assertTrue('form' in response.context)
80-
self.assertTrue(response.context['form'].errors)
81-
self.assertIn(
82-
'This field is required.',
83-
response.context['form'].errors['name'][0]
84-
)
81+
82+
form = response.context['form']
83+
self.assertTrue(form.errors)
84+
self.assertIn('This field is required.', form.errors['name'][0])
8585

8686
def test_label_delete_view_get(self):
8787
response = self.client.get(self.delete_url(self.label.id))
8888
self.assertEqual(response.status_code, 200)
89-
self.assertTemplateUsed(response, 'label/label_confirm_delete.html')
90-
self.assertContains(response, 'Test Label')
89+
self.assertTemplateUsed(response, 'labels/label_confirm_delete.html')
90+
self.assertContains(response, self.label.name)
9191

9292
def test_label_delete_view_post_success(self):
93-
response = self.client.post(self.delete_url(self.label.id))
93+
deletable_label = Label.objects.get(pk=10)
94+
response = self.client.post(self.delete_url(deletable_label.id))
9495
self.assertRedirects(response, self.labels_url)
96+
9597
messages = list(get_messages(response.wsgi_request))
9698
self.assertEqual(len(messages), 1)
9799
self.assertEqual(str(messages[0]), 'Метка успешно удалена')
98-
self.assertFalse(Label.objects.filter(id=self.label.id).exists())
100+
101+
self.assertFalse(Label.objects.filter(id=deletable_label.id).exists())
102+
103+
def test_label_delete_view_post_fail_if_used(self):
104+
used_label = Label.objects.get(pk=1)
105+
response = self.client.post(self.delete_url(used_label.id))
106+
self.assertRedirects(response, self.labels_url)
107+
108+
self.assertTrue(Label.objects.filter(id=used_label.id).exists())
109+
110+
messages = list(get_messages(response.wsgi_request))
111+
self.assertEqual(len(messages), 1)
112+
self.assertEqual(
113+
str(messages[0]),
114+
'Невозможно удалить метку, потому что она используется'
115+
)
99116

100117
def test_unauthenticated_access(self):
101118
self.client.logout()
@@ -105,8 +122,10 @@ def test_unauthenticated_access(self):
105122
self.edit_url(self.label.id),
106123
self.delete_url(self.label.id),
107124
]
125+
108126
for url in urls:
109127
response = self.client.get(url)
110-
self.assertRedirects(response, reverse('login'))
128+
self.assertRedirects(response, reverse('users:login'))
129+
111130
response = self.client.post(url)
112-
self.assertRedirects(response, reverse('login'))
131+
self.assertRedirects(response, reverse('users:login'))
Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,18 @@
11
[
22
{
33
"model": "statuses.status",
4-
"pk": 1,
4+
"pk": 7,
55
"fields": {
6-
"name": "Уже в работе",
7-
"created_at": "2025-09-15T14:35:47.805Z",
8-
"updated_at": "2025-09-15T15:02:54.812Z"
6+
"name": "Good",
7+
"time_create": "2025-10-01T15:30:04.359Z"
98
}
109
},
1110
{
1211
"model": "statuses.status",
13-
"pk": 3,
12+
"pk": 8,
1413
"fields": {
15-
"name": "На рассмотрении",
16-
"created_at": "2025-09-15T14:36:08.841Z",
17-
"updated_at": "2025-09-15T14:36:08.841Z"
18-
}
19-
},
20-
{
21-
"model": "statuses.status",
22-
"pk": 4,
23-
"fields": {
24-
"name": "Рефакторинг",
25-
"created_at": "2025-09-15T14:36:16.226Z",
26-
"updated_at": "2025-09-15T14:36:16.226Z"
27-
}
28-
},
29-
{
30-
"model": "statuses.status",
31-
"pk": 5,
32-
"fields": {
33-
"name": "Готово",
34-
"created_at": "2025-09-15T14:39:24.755Z",
35-
"updated_at": "2025-09-15T14:39:24.755Z"
36-
}
37-
},
38-
{
39-
"model": "statuses.status",
40-
"pk": 6,
41-
"fields": {
42-
"name": "В разаработке",
43-
"created_at": "2025-09-15T14:42:01.057Z",
44-
"updated_at": "2025-09-15T14:42:01.057Z"
14+
"name": "Bad",
15+
"time_create": "2025-10-01T15:47:06.239Z"
4516
}
4617
}
4718
]

0 commit comments

Comments
 (0)