Why custom clients might be ignored by unittest in Django?

26 Views Asked by At

Exploring Unittest, can't figure out why these tests ignore custom clients prepared in setUp() method and use the built-in self.client (== self.guest_client). Thus only the last test for anonimous user works properly. The same setUp() method works fine in other test files, as well as url constants.

test file:

User = get_user_model()

NOTE_SLUG = 'note-slug'
HOME_URL = reverse('notes:home')
LOGIN_URL = reverse("users:login")
SIGNUP_URL = reverse('users:signup')
LOGOUT_URL = reverse('users:logout')
NOTES_LIST_URL = reverse('notes:list')
ADD_NOTE_URL = reverse('notes:add')
NOTE_CONFIRM = reverse('notes:success')
NOTE_URL = reverse('notes:detail', args=(NOTE_SLUG,))
NOTE_EDIT_URL = reverse('notes:edit', args=(NOTE_SLUG,))
NOTE_DELETE_URL = reverse('notes:delete', args=(NOTE_SLUG,))


class TestRoutes(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.url_list = (
            HOME_URL,
            LOGIN_URL,
            SIGNUP_URL,
            LOGOUT_URL,
            NOTES_LIST_URL,
            ADD_NOTE_URL,
            NOTE_CONFIRM,
            NOTE_URL,
            NOTE_EDIT_URL,
            NOTE_DELETE_URL
        )
        cls.author = User.objects.create(username='author')
        cls.note = Note.objects.create(
            title='Заголовок',
            text='Текст заметки',
            slug='note-slug',
            author=cls.author,
        )

    def setUp(self):
        self.guest_client = Client()
        self.reader = User.objects.create(username='reader')
        self.authorized_client = Client()
        self.authorized_client.force_login(self.reader)
        self.author_client = Client()
        self.author_client.force_login(self.author)

    def test_pages_for_author(self):
        for url in self.url_list:
            with self.subTest(url=url):
                response = self.author_client.get(url)
                self.assertEqual(response.status_code, HTTPStatus.OK)

    def test_pages_for_auth_reader(self):
        for url in self.url_list[0:7]:
            with self.subTest(url=url):
                response = self.authorized_client.get(url)
                self.assertEqual(response.status_code, HTTPStatus.OK)
        for url in self.url_list[7:10]:
            with self.subTest(url=url):
                response = self.authorized_client.get(url)
                self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)

    def test_pages_for_anonymous(self):
        for url in self.url_list[0:4]:
            with self.subTest(url=url):
                response = self.guest_client.get(url)
                self.assertEqual(response.status_code, HTTPStatus.OK)
        for url in self.url_list[4:10]:
            with self.subTest(url=url):
                redirect_url = f'{LOGIN_URL}?next={url}'
                self.assertRedirects(self.guest_client.get(url), redirect_url)
0

There are 0 best solutions below