109 lines
3.7 KiB
Python
109 lines
3.7 KiB
Python
|
|
# 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"
|