-
Ernesto Rico Schmidt authoredErnesto Rico Schmidt authored
test_users.py 4.11 KiB
import pytest
from conftest import assert_data
from program.tests.factories import CommonUserFactory
pytestmark = pytest.mark.django_db
def url(user=None) -> str:
return f"/api/v1/users/{user.id}/" if user else "/api/v1/users/"
def user_data(is_superuser=False, add_cba=False) -> dict[str, str | dict[str, str]]:
data = {
"password": "password",
"username": "user",
}
if is_superuser:
data["is_superuser"] = is_superuser
if add_cba:
data["cba"] = {
"username": "CBA USERNAME",
"user_token": "CBA USER TOKEN",
}
return data
def test_create_user(admin_api_client):
data = user_data()
response = admin_api_client.post(url(), data=data, format="json")
assert response.status_code == 201
assert_data(response, data)
def test_create_superuser(admin_api_client):
data = user_data(is_superuser=True)
response = admin_api_client.post(url(), data=data, format="json")
assert response.status_code == 201
assert_data(response, data)
def test_create_user_unauthorized(common_api_client1):
data = user_data()
response = common_api_client1.post(url(), data=data)
assert response.status_code == 403
def test_list_users_as_common_user(common_user1, common_api_client1):
USERS = 3
CommonUserFactory.create_batch(size=USERS)
response = common_api_client1.get(url())
assert response.status_code == 200
assert len(response.data) == USERS + 1
assert response.data[0]["username"] == common_user1.username
def test_list_users_as_other_common_user(common_user1, common_user2, common_api_client2):
USERS = 3
CommonUserFactory.create_batch(size=USERS)
response = common_api_client2.get(url())
assert response.status_code == 200
assert len(response.data) == USERS + 2
assert response.data[1]["username"] == common_user2.username
def test_list_users_as_superuser(admin_api_client):
USERS = 3
CommonUserFactory.create_batch(size=USERS)
response = admin_api_client.get(url())
assert response.status_code == 200
assert len(response.data) == USERS + 1
def test_list_users_unauthenticated(api_client):
USERS = 3
CommonUserFactory.create_batch(size=USERS)
response = api_client.get(url())
assert response.status_code == 200
assert len(response.data) == 0
def test_retrieve_user_as_common_user(common_user1, common_api_client1):
response = common_api_client1.get(url(common_user1))
assert response.status_code == 200
assert response.data["username"] == common_user1.username
def test_retrieve_user_as_other_common_user(common_user1, common_api_client2):
response = common_api_client2.get(url(common_user1))
assert response.status_code == 200
def test_retrieve_user_as_superuser(common_user1, admin_api_client):
response = admin_api_client.get(url(common_user1))
assert response.status_code == 200
assert response.data["username"] == common_user1.username
def test_retrieve_user_not_found_unauthenticated(common_user1, api_client):
response = api_client.get(url(common_user1))
assert response.status_code == 404
def test_update_user(common_user1, admin_api_client):
update = {
"email": "user@aura.radio",
"first_name": "FIRST NAME",
"last_name": "LAST NAME",
}
response = admin_api_client.patch(url(common_user1), data=update)
assert response.status_code == 200
assert_data(response, update)
def test_update_user_forbidden_as_common_user(common_user1, common_api_client1):
update = {"username": "USERNAME"}
response = common_api_client1.patch(url(common_user1), data=update)
assert response.status_code == 403
def test_update_user_forbidden_as_other_common_user(common_user1, common_api_client2):
update = {"username": "USERNAME"}
response = common_api_client2.patch(url(common_user1), data=update)
assert response.status_code == 403
def test_update_user_forbidden_unauthenticated(common_user1, api_client):
update = {"username": "USERNAME"}
response = api_client.patch(url(common_user1), data=update)
assert response.status_code == 403