Django pytest case не работает, а postman не работает
Я пишу тест для API, используя Django rest framework.
Пользователь должен зарегистрироваться, а затем войти в систему, чтобы получить доступ к моей конечной точке.
Если я регистрируюсь (post) на postman, затем вхожу (post) и получаю access_token, который затем передаю в post запрос, то получаю 200.
Также используется curl
curl --location --request GET 'localhost:8000/api/v1/signals/' \
--header 'Authorization: token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJleHAiOjE2MzI4NTc2MzIsImlhdCI6MTYzMjg1NzMzMn0.WCjjg3jSZ4TO_Q51hGwZmj04iFeV9ffRnp9GaFch_IM' \
--header 'Cookie: csrftoken=HrgKpprN95ExIPmm6Y2Qqc3WvDrfqQRgqUY9v4bTN9gT7nETEuBjhtY6IS7Sv9Ky; sessionid=ml04spqh6gmjuicp8vnda1t0lqopnuvx' \
--data-raw ''
но если я пишу тест, то он не работает
def test_get_signal(client):
form_data = {
"username": "testuser",
"password": "mytestpassword",
}
CustomUser.objects.create_user(**form_data)
response = client.post("/accounts/login/", form_data, follow=True)
assert response.status_code == 200
response_content = json.loads(response.content)
token = response_content["access_token"]
headers = {
"Authorization": "Token " + token,
"Content-Type": "application/json",
}
response = client.get(
path="/api/v1/signals/",
headers=headers,
)
assert response.status_code == 200
Я получаю 403. что я делаю не так?
Решением было то, что я посылал неправильный запрос.
Нашел ответ здесь
Я переписал тест следующим образом:
def test_get_signal():
form_data = {
"username": "testuser",
"password": "mytestpassword",
}
CustomUser.objects.create_user(**form_data)
response = APIclient.post("/accounts/login/", form_data, follow=True)
assert response.status_code == 200
response_content = json.loads(response.content)
token = response_content["access_token"]
APIclient.credentials(HTTP_AUTHORIZATION="Bearer " + token)
response = APIclient.get(
path="/api/v1/signals/",
)
assert response.status_code == 200