# retoor <retoor@molodetz.nl>
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"