Update
This commit is contained in:
@@ -932,3 +932,86 @@ def test_projects_list_preserves_comment_hierarchy(page, app_server):
|
||||
expect(card.locator(".post-card-comments")).not_to_contain_text(f"{marker}-excluded")
|
||||
nested = card.locator(".post-card-comments .comment-replies .comment-text")
|
||||
expect(nested).to_contain_text(f"{marker}-reply")
|
||||
|
||||
|
||||
import time as _time_containers_menu
|
||||
import requests as _requests_containers_menu
|
||||
from tests.conftest import login_user
|
||||
from devplacepy.database import get_primary_admin_uid, invalidate_admins_cache
|
||||
from devplacepy.utils import clear_user_cache
|
||||
|
||||
|
||||
_counter_containers_menu = [0]
|
||||
|
||||
|
||||
def _signup_containers_menu(prefix):
|
||||
_counter_containers_menu[0] += 1
|
||||
name = f"{prefix}{int(_time_containers_menu.time() * 1000)}{_counter_containers_menu[0]}"
|
||||
_requests_containers_menu.post(
|
||||
f"{BASE_URL}/auth/signup",
|
||||
data={
|
||||
"username": name,
|
||||
"email": f"{name}@t.dev",
|
||||
"password": "secret123",
|
||||
"confirm_password": "secret123",
|
||||
},
|
||||
allow_redirects=True,
|
||||
)
|
||||
row = get_table("users").find_one(username=name)
|
||||
return name, row["uid"], row["api_key"]
|
||||
|
||||
|
||||
def _make_admin_containers_menu(prefix):
|
||||
name, uid, key = _signup_containers_menu(prefix)
|
||||
get_table("users").update({"uid": uid, "role": "Admin"}, ["uid"])
|
||||
clear_user_cache(uid)
|
||||
invalidate_admins_cache()
|
||||
return name, uid, key
|
||||
|
||||
|
||||
def _create_project_containers_menu(key, title, is_private=False):
|
||||
data = {
|
||||
"title": title,
|
||||
"description": "containers menu gating test",
|
||||
"project_type": "software",
|
||||
"status": "In Development",
|
||||
}
|
||||
if is_private:
|
||||
data["is_private"] = "on"
|
||||
r = _requests_containers_menu.post(
|
||||
f"{BASE_URL}/projects/create",
|
||||
headers={"Accept": "application/json", "X-API-KEY": key},
|
||||
data=data,
|
||||
)
|
||||
assert r.status_code == 200, r.text
|
||||
return r.json()["data"]["slug"]
|
||||
|
||||
|
||||
def test_containers_menu_visible_for_admin_on_own_private_project(page, app_server):
|
||||
name, uid, key = _make_admin_containers_menu("cmown")
|
||||
slug = _create_project_containers_menu(key, "Containers Menu Own Private", is_private=True)
|
||||
login_user(page, {"email": f"{name}@t.dev", "password": "secret123"})
|
||||
page.goto(f"{BASE_URL}/projects/{slug}", wait_until="domcontentloaded")
|
||||
page.locator(".project-actions-more").click()
|
||||
expect(page.locator(".context-menu-item:has-text('Containers')")).to_be_visible()
|
||||
|
||||
|
||||
def test_containers_menu_visible_for_any_admin_on_public_project(page, app_server):
|
||||
_, _, owner_key = _make_admin_containers_menu("cmpubowner")
|
||||
other_name, _, _ = _make_admin_containers_menu("cmpubother")
|
||||
slug = _create_project_containers_menu(owner_key, "Containers Menu Public", is_private=False)
|
||||
login_user(page, {"email": f"{other_name}@t.dev", "password": "secret123"})
|
||||
page.goto(f"{BASE_URL}/projects/{slug}", wait_until="domcontentloaded")
|
||||
page.locator(".project-actions-more").click()
|
||||
expect(page.locator(".context-menu-item:has-text('Containers')")).to_be_visible()
|
||||
|
||||
|
||||
def test_containers_menu_hidden_for_non_owner_admin_on_member_private_project(page, app_server):
|
||||
_, member_uid, member_key = _signup_containers_menu("cmmember")
|
||||
slug = _create_project_containers_menu(member_key, "Containers Menu Member Private", is_private=True)
|
||||
admin_name, admin_uid, _ = _make_admin_containers_menu("cmviewer")
|
||||
assert get_primary_admin_uid() != admin_uid
|
||||
login_user(page, {"email": f"{admin_name}@t.dev", "password": "secret123"})
|
||||
page.goto(f"{BASE_URL}/projects/{slug}", wait_until="domcontentloaded")
|
||||
page.locator(".project-actions-more").click()
|
||||
expect(page.locator(".context-menu-item:has-text('Containers')")).to_have_count(0)
|
||||
|
||||
Reference in New Issue
Block a user