Django.fun

Django test unit logged in user

I need some unit tests to check if a user after successful login can open profile editing page, how am I supposed to do this?

I tried this code, but it shows an error. Do I have to use my own view to register a user then to log in or there are some unit test modules for that?

class UserProfilePage(TestCase):

    def setUp(self):
        self.credentials = {
            'username': 'test_user',
            'password': 'secret'}
        user = User.objects.create_user(**self.credentials)

        self.user_profile = {
            'user': user,
            'first_name': 'Test_1',
            'surname': 'test_surname',
            'about_me': 'some_info',
            'email': 'test@anymail.com',
        }
        UserProfile.objects.create(**self.user_profile).save()

        self.user_id = UserProfile.objects.get(user=user)

    def test_profile_page_and_current_template(self):
        response = self.client.get('/blog/user/profile/', self.user_id)
        self.assertEqual(response.status_code, 200)

ValueError: Cannot query "Test_1": Must be "User" instance.

The client API allows you to login a user like so:

self.client.force_login(user)

Just run that before accessing the profile page in your test.

There also is an error in your code.

...
self.user_id = UserProfile.objects.get(user=user)
...

Here you are assigning the profile object to user_id and later trying to pass user_id as parameter in the request, instead of the user ID. I am guessing that is why you get the error.

I would suggest to only set the user as object property; you do not need anything else. Then access it with self.user.id in your test.

See also: https://docs.djangoproject.com/en/4.0/topics/testing/tools/#django.test.Client.force_login

Tutorials

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

Обработка периодических задач в Django с помощью Celery и Docker

View all tutorials →