Получение jwt-токена для передачи его в модульный тест

Я пытаюсь получить токен доступа jwt, чтобы передать его в модульный тест, но каждый раз, когда я пытаюсь получить его, я получаю ошибку 'not authorized'. Пользователь создан в базе данных с фабрикой

#factories.py

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User

    username = "test_user"
    password = "test123"
    date_of_birth = "2000-01-22"
    email = "tests@test.ru"
    role = "moderator"

class AdFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Ad

    name = "test"
    author_id = factory.SubFactory(UserFactory)
    price = 100
    description = "None"
    is_published = "FALSE"
    category = factory.SubFactory(CategoryFactory)
    image = None

А я пытаюсь получить токен доступа jwt в fixtures.py

# fixtures.py

import pytest


@pytest.fixture
@pytest.mark.django_db
def user_token_jwt(client):
    username = "test_user"
    password = "test123"

    response = client.post(
        "/user/token/",
        {"username": username, "password": password},
        format="json"
    )
    print(response.data)

    return response.data["access"]

Наконец, сама тестовая функция. Пожалуйста, помогите мне понять, как получить jwt токен доступа в Django с такой архитектурой проекта?

@pytest.mark.django_db
def test_create_ad(client, ad, user_token_jwt):
    # user_token_jwt = client.post(
    #     "/user/token/",
    #     {"username": "test_user", "password": "test123"},
    #     content_type="application/json"
    # )

    expected_response = {
        'id': ad.pk,
        'name': 'test',
        'author_id': ad.author_id_id,
        'author': ad.username,
        'price': 100,
        'description': 'None',
        'is_published': 'FALSE',
        'category_id': ad.category_id,
        'image': None
    }

    data = {
        "name": "test",
        "price": 100,
        "description": "None",
        "author_id": ad.author_id,
        "category": ad.category_id,
    }
    response = client.post(
        "/ad/create/",
        data,
        content_type='application/json',
        HTTP_AUTHORIZATION="Bearer" + user_token_jwt
    )

    assert response.status_code == 201
    assert response.data == expected_response

Я не эксперт в django или pytest. Меня даже вдохновил ваш код на написание своего. СПАСИБО ;) Чтобы подтвердить ваш тест с маркером доступа, вы просто добавили пробел после Bearer? HTTP_AUTHORIZATION="Bearer " вместо "Bearer". У меня это работает

Вернуться на верх