1- from django .contrib .auth import get_user_model
21from django .contrib .messages import get_messages
32from django .test import Client , TestCase
43from django .urls import reverse
54
65from 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' ))
0 commit comments