87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
from django.contrib import auth
|
|
from django.urls import reverse
|
|
|
|
|
|
def test_restricted_access(api_client, db):
|
|
url = reverse("api:v1:artists-list")
|
|
response = api_client.get(url)
|
|
|
|
assert response.status_code == 401
|
|
|
|
|
|
def test_login_correct(api_client, factories, mocker):
|
|
login = mocker.spy(auth, "login")
|
|
password = "hellotest"
|
|
user = factories["users.User"]()
|
|
user.set_password(password)
|
|
user.save()
|
|
|
|
url = reverse("api:v1:auth:login")
|
|
data = {"username": user.username, "password": password}
|
|
expected = {}
|
|
response = api_client.post(url, data)
|
|
|
|
assert response.status_code == 200
|
|
assert response.data == expected
|
|
login.assert_called_once_with(request=mocker.ANY, user=user)
|
|
|
|
|
|
def test_login_incorrect(api_client, factories, mocker):
|
|
login = mocker.spy(auth, "login")
|
|
user = factories["users.User"]()
|
|
|
|
url = reverse("api:v1:auth:login")
|
|
data = {"username": user.username, "password": "invalid"}
|
|
response = api_client.post(url, data)
|
|
|
|
assert response.status_code == 400
|
|
|
|
login.assert_not_called()
|
|
|
|
|
|
def test_login_inactive(api_client, factories, mocker):
|
|
login = mocker.spy(auth, "login")
|
|
password = "hellotest"
|
|
user = factories["users.User"](is_active=False)
|
|
user.set_password(password)
|
|
user.save()
|
|
|
|
url = reverse("api:v1:auth:login")
|
|
data = {"username": user.username, "password": password}
|
|
response = api_client.post(url, data)
|
|
|
|
assert response.status_code == 400
|
|
assert "Invalid username or password" in response.data["non_field_errors"]
|
|
|
|
login.assert_not_called()
|
|
|
|
|
|
def test_logout(logged_in_api_client, factories, mocker):
|
|
logout = mocker.spy(auth, "logout")
|
|
|
|
url = reverse("api:v1:auth:logout")
|
|
response = logged_in_api_client.post(url)
|
|
|
|
assert response.status_code == 200
|
|
assert response.data == {}
|
|
logout.assert_called_once_with(request=mocker.ANY)
|
|
|
|
|
|
def test_logout_real(api_client, factories):
|
|
password = "hellotest"
|
|
user = factories["users.User"]()
|
|
user.set_password(password)
|
|
user.save()
|
|
|
|
url = reverse("api:v1:auth:login")
|
|
data = {"username": user.username, "password": password}
|
|
response = api_client.post(url, data)
|
|
|
|
url = reverse("api:v1:auth:logout")
|
|
response = api_client.post(url)
|
|
|
|
url = reverse("api:v1:artists-list")
|
|
response = api_client.get(url)
|
|
|
|
assert response.status_code == 401
|