Add event delete tests

This commit is contained in:
Sebastiaan
2025-06-09 16:21:52 +02:00
parent fb0135cf38
commit bf3fa03db0
3 changed files with 68 additions and 4 deletions

View File

@@ -76,8 +76,8 @@ class Event(mixin.RowId, EventBase, table=True):
# --- back_populates links -------------------------------------------------
# --- many-to-many links ---------------------------------------------------
user_links: list["EventUserLink"] = Relationship(back_populates="event")
team_links: list["Team"] = Relationship(back_populates="event")
user_links: list["EventUserLink"] = Relationship(back_populates="event", cascade_delete=True)
team_links: list["Team"] = Relationship(back_populates="event", cascade_delete=True)
# --- CRUD actions ---------------------------------------------------------
@classmethod

View File

@@ -4,7 +4,9 @@ from fastapi.testclient import TestClient
from sqlmodel import Session
from app.core.config import settings
from app.models.user import PermissionRight
from app.tests.utils.event import create_random_event
from app.tests.utils.user import create_random_user, authentication_token_from_user
def test_create_event(client: TestClient, superuser_token_headers: dict[str, str]) -> None:
@@ -169,10 +171,55 @@ def test_delete_event_not_enough_permissions(
assert content["detail"] == "Not enough permissions"
def test_delete_event_admin_user(
client: TestClient, db: Session
) -> None:
event = create_random_event(db)
user = create_random_user(db)
event.add_user(user=user, rights=PermissionRight.ADMIN, session=db)
response = client.delete(
f"{settings.API_V1_STR}/events/{event.id}",
headers=authentication_token_from_user(db=db, user=user, client=client),
)
assert response.status_code == 200
content = response.json()
assert content["message"] == "Event deleted successfully"
def test_delete_event_not_enough_permissions_for_this_event(
client: TestClient, db: Session
) -> None:
event = create_random_event(db)
user = create_random_user(db)
response = client.delete(
f"{settings.API_V1_STR}/events/{event.id}",
headers=authentication_token_from_user(db=db, user=user, client=client),
)
assert response.status_code == 400
content = response.json()
assert content["detail"] == "Not enough permissions"
def test_delete_event_event_user_read_only_rights(
client: TestClient, db: Session
) -> None:
event = create_random_event(db)
user = create_random_user(db)
event.add_user(user=user, rights=PermissionRight.READ, session=db)
response = client.delete(
f"{settings.API_V1_STR}/events/{event.id}",
headers=authentication_token_from_user(db=db, user=user, client=client),
)
assert response.status_code == 400
content = response.json()
assert content["detail"] == "Not enough permissions"
# TODO: Add user (super, less rights, own rights, more rights) (*** user without rights)
# TODO: Edit user rights (super, less rights, own rights, more rights) (*** user without rights)
# TODO: Remove user (*** user without rights)
# TODO: Remove own user (is allowed)
# TODO: Remove not linked user
# TODO: Remove event when no rights
# TODO: Remove event when READ rights

View File

@@ -46,3 +46,20 @@ def authentication_token_from_email(
user = User.update(session=db, db_obj=user, in_obj=user_in_update)
return user_authentication_headers(client=client, email=email, password=password)
def authentication_token_from_user(
*, client: TestClient, user: User, db: Session
) -> dict[str, str]:
"""
Return a valid token for the user with given email.
If the user doesn't exist it is created first.
"""
password = random_lower_string()
user_in_update = UserUpdate(password=password)
if not user.id:
raise Exception("User id not set")
user = User.update(session=db, db_obj=user, in_obj=user_in_update)
return user_authentication_headers(client=client, email=str(user.email), password=password)