Получение 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". У меня это работает