This commit is contained in:
2026-07-07 15:28:28 +02:00
parent 499f91e16a
commit 32c8bbe0a9
52 changed files with 3420 additions and 328 deletions
+212 -2
View File
@@ -1,14 +1,18 @@
# retoor <retoor@molodetz.nl>
from datetime import datetime, timezone
from datetime import datetime, timedelta, timezone
from devplacepy.content import (
is_owner,
can_view_project,
can_manage_instance,
can_view_instance,
can_view_project_containers,
canonical_redirect,
first_image_url,
enrich_items,
owns_instance,
)
from devplacepy.database import get_table, get_users_by_uids
from devplacepy.database import get_table, get_users_by_uids, invalidate_admins_cache
from devplacepy.utils import generate_uid
import time
import pytest
@@ -145,6 +149,212 @@ def test_can_view_admin_private_visible_to_owner_admin_only(local_db):
assert can_view_project(project, None) is False
def _make_user_at(role, created_at):
uid = generate_uid()
username = f"cv_{uid[:8]}"
get_table("users").insert(
{
"uid": uid,
"username": username,
"email": f"{username}@t.dev",
"role": role,
"created_at": created_at.isoformat(),
}
)
invalidate_admins_cache()
return get_table("users").find_one(uid=uid)
def _demote_existing_admins():
existing = [r["uid"] for r in get_table("users").find(role="Admin")]
for uid in existing:
get_table("users").update({"uid": uid, "role": "Member"}, ["uid"])
invalidate_admins_cache()
return existing
def _restore_admins(uids):
for uid in uids:
get_table("users").update({"uid": uid, "role": "Admin"}, ["uid"])
invalidate_admins_cache()
def _purge_users(*rows):
for row in rows:
if row:
get_table("users").delete(uid=row["uid"])
def test_owns_instance_true_for_creator():
owner = {"uid": "cnt-u1"}
other = {"uid": "cnt-u2"}
instance = {"created_by": owner["uid"]}
project = {"user_uid": other["uid"]}
assert owns_instance(instance, project, owner) is True
assert owns_instance(instance, project, other) is False
def test_owns_instance_true_for_project_owner():
owner = {"uid": "cnt-u1"}
creator = {"uid": "cnt-u2"}
instance = {"created_by": creator["uid"]}
project = {"user_uid": owner["uid"]}
assert owns_instance(instance, project, owner) is True
def test_owns_instance_false_when_missing_data():
assert owns_instance(None, {}, {"uid": "cnt-u1"}) is False
assert owns_instance({"created_by": "cnt-u1"}, {}, None) is False
assert owns_instance({"created_by": "cnt-u1"}, {}, {}) is False
assert owns_instance({"created_by": "cnt-u1"}, None, {"uid": "cnt-u2"}) is False
def test_can_view_project_containers_requires_admin(local_db):
owner = _make_user()
project = {"user_uid": owner["uid"], "is_private": 0}
try:
assert can_view_project_containers(project, owner) is False
assert can_view_project_containers(project, None) is False
assert can_view_project_containers(None, owner) is False
finally:
_purge_users(owner)
def test_can_view_project_containers_public_visible_to_any_admin(local_db):
restore = _demote_existing_admins()
owner_admin = other_admin = None
try:
base = datetime.now(timezone.utc)
owner_admin = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": owner_admin["uid"], "is_private": 0}
assert can_view_project_containers(project, owner_admin) is True
assert can_view_project_containers(project, other_admin) is True
finally:
_purge_users(owner_admin, other_admin)
_restore_admins(restore)
def test_can_view_project_containers_private_hidden_from_other_admin(local_db):
restore = _demote_existing_admins()
owner_admin = other_admin = None
try:
base = datetime.now(timezone.utc)
owner_admin = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": owner_admin["uid"], "is_private": 1}
assert can_view_project_containers(project, owner_admin) is True
assert can_view_project_containers(project, other_admin) is False
finally:
_purge_users(owner_admin, other_admin)
_restore_admins(restore)
def test_can_view_project_containers_primary_admin_sees_all(local_db):
restore = _demote_existing_admins()
primary = other_admin = None
try:
base = datetime.now(timezone.utc)
primary = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": other_admin["uid"], "is_private": 1}
assert can_view_project_containers(project, primary) is True
finally:
_purge_users(primary, other_admin)
_restore_admins(restore)
def test_can_view_instance_requires_admin(local_db):
owner = _make_user()
instance = {"created_by": owner["uid"], "project_uid": "p1"}
project = {"user_uid": owner["uid"], "is_private": 0}
try:
assert can_view_instance(instance, project, owner) is False
assert can_manage_instance(instance, project, owner) is False
finally:
_purge_users(owner)
def test_can_view_instance_owner_sees_own_private_hidden_from_other_admin(local_db):
restore = _demote_existing_admins()
owner_admin = other_admin = None
try:
base = datetime.now(timezone.utc)
owner_admin = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": owner_admin["uid"], "is_private": 1}
instance = {"created_by": owner_admin["uid"], "project_uid": "p1"}
assert can_view_instance(instance, project, owner_admin) is True
assert can_view_instance(instance, project, other_admin) is False
finally:
_purge_users(owner_admin, other_admin)
_restore_admins(restore)
def test_can_view_instance_public_project_visible_to_any_admin(local_db):
restore = _demote_existing_admins()
creator = other_admin = None
try:
base = datetime.now(timezone.utc)
creator = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": creator["uid"], "is_private": 0}
instance = {"created_by": creator["uid"], "project_uid": "p1"}
assert can_view_instance(instance, project, other_admin) is True
finally:
_purge_users(creator, other_admin)
_restore_admins(restore)
def test_can_view_instance_primary_admin_sees_others_private_instance(local_db):
restore = _demote_existing_admins()
primary = owner_admin = None
try:
base = datetime.now(timezone.utc)
primary = _make_user_at("Admin", base)
owner_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": owner_admin["uid"], "is_private": 1}
instance = {"created_by": owner_admin["uid"], "project_uid": "p1"}
assert can_view_instance(instance, project, primary) is True
finally:
_purge_users(primary, owner_admin)
_restore_admins(restore)
def test_can_manage_instance_only_owner_or_primary_admin(local_db):
restore = _demote_existing_admins()
primary = owner_admin = other_admin = None
try:
base = datetime.now(timezone.utc)
primary = _make_user_at("Admin", base)
owner_admin = _make_user_at("Admin", base + timedelta(seconds=1))
other_admin = _make_user_at("Admin", base + timedelta(seconds=2))
project = {"user_uid": owner_admin["uid"], "is_private": 1}
instance = {"created_by": owner_admin["uid"], "project_uid": "p1"}
assert can_manage_instance(instance, project, owner_admin) is True
assert can_manage_instance(instance, project, primary) is True
assert can_manage_instance(instance, project, other_admin) is False
finally:
_purge_users(primary, owner_admin, other_admin)
_restore_admins(restore)
def test_can_manage_instance_other_admin_denied_even_on_public_project(local_db):
restore = _demote_existing_admins()
owner_admin = other_admin = None
try:
base = datetime.now(timezone.utc)
owner_admin = _make_user_at("Admin", base)
other_admin = _make_user_at("Admin", base + timedelta(seconds=1))
project = {"user_uid": owner_admin["uid"], "is_private": 0}
instance = {"created_by": owner_admin["uid"], "project_uid": "p1"}
assert can_view_instance(instance, project, other_admin) is True
assert can_manage_instance(instance, project, other_admin) is False
finally:
_purge_users(owner_admin, other_admin)
_restore_admins(restore)
def test_canonical_redirect_when_slug_differs():
item = {"slug": "abcd1234-title", "uid": "abcd1234"}
assert canonical_redirect("posts", item, "abcd1234-title") is None