# retoor import pytest from devplacepy.database import get_table from devplacepy.routers.workspaces import index_entries OWNER = "wsidx-owner" STRANGER = "wsidx-stranger" PUBLIC_PROJECT = "wsidx-public" PRIVATE_PROJECT = "wsidx-private" ROWS = [ { "uid": "wsidx-instance-public", "project_uid": PUBLIC_PROJECT, "owner_uid": OWNER, "ingress_slug": "wsidx-pub", "name": "Public workspace", }, { "uid": "wsidx-instance-private", "project_uid": PRIVATE_PROJECT, "owner_uid": OWNER, "ingress_slug": "wsidx-priv", "name": "Private workspace", }, ] @pytest.fixture def seeded_workspaces(local_db): users = get_table("users") projects = get_table("projects") users.insert({"uid": OWNER, "username": "wsidx_owner", "role": "Member"}) users.insert({"uid": STRANGER, "username": "wsidx_stranger", "role": "Member"}) projects.insert( { "deleted_at": None, "deleted_by": None, "uid": PUBLIC_PROJECT, "user_uid": OWNER, "slug": "wsidx-public-project", "title": "Public workspace project", "description": "The public project description.", "is_private": 0, } ) projects.insert( { "deleted_at": None, "deleted_by": None, "uid": PRIVATE_PROJECT, "user_uid": OWNER, "slug": "wsidx-private-project", "title": "Private workspace project", "description": "The private project description.", "is_private": 1, } ) yield projects.delete(uid=PUBLIC_PROJECT) projects.delete(uid=PRIVATE_PROJECT) users.delete(uid=OWNER) users.delete(uid=STRANGER) def _by_slug(entries): return {entry["slug"]: entry for entry in entries} def test_every_row_carries_its_uid_and_owner_uid(seeded_workspaces): entries = _by_slug(index_entries(ROWS, None)) assert entries["wsidx-pub"]["uid"] == "wsidx-instance-public" assert entries["wsidx-priv"]["uid"] == "wsidx-instance-private" for entry in entries.values(): assert entry["owner_uid"] == OWNER def test_a_guest_never_sees_a_private_projects_description_or_url(seeded_workspaces): entries = _by_slug(index_entries(ROWS, None)) assert entries["wsidx-pub"]["description"] == "The public project description." assert entries["wsidx-pub"]["project_url"] == "/projects/wsidx-public-project" assert entries["wsidx-priv"]["description"] == "" assert entries["wsidx-priv"]["project_url"] == "" def test_a_stranger_is_treated_exactly_like_a_guest(seeded_workspaces): viewer = {"uid": STRANGER, "username": "wsidx_stranger", "role": "Member"} entries = _by_slug(index_entries(ROWS, viewer)) assert entries["wsidx-priv"]["description"] == "" assert entries["wsidx-priv"]["project_url"] == "" def test_the_project_owner_still_sees_their_private_project_fields(seeded_workspaces): viewer = {"uid": OWNER, "username": "wsidx_owner", "role": "Member"} entries = _by_slug(index_entries(ROWS, viewer)) assert entries["wsidx-priv"]["description"] == "The private project description." assert entries["wsidx-priv"]["project_url"] == "/projects/wsidx-private-project" def test_a_published_workspace_is_always_listed_with_its_link(seeded_workspaces): entries = _by_slug(index_entries(ROWS, None)) assert len(entries) == 2 assert entries["wsidx-priv"]["name"] == "Private workspace" assert entries["wsidx-priv"]["url"].endswith("/p/wsidx-priv") assert entries["wsidx-priv"]["owner"] == "wsidx_owner" assert entries["wsidx-priv"]["maturity"] == "general"