feat: add TTLCache for get_cache_version and TEMPLATE_AUTO_RELOAD config with Makefile worker count variables
This commit is contained in:
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -157,6 +159,8 @@ def _seed_news_audit_log():
|
||||
title = _unique("aunews")
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
"title": title,
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
from tests.conftest import BASE_URL
|
||||
|
||||
|
||||
def test_admin_bots_page_loads(alice):
|
||||
page, _ = alice
|
||||
page.goto(f"{BASE_URL}/admin/bots", wait_until="domcontentloaded")
|
||||
assert page.is_visible("text=Bot Monitor")
|
||||
assert page.locator("#bots-grid").count() == 1
|
||||
|
||||
|
||||
def test_admin_bots_sidebar_link(alice):
|
||||
page, _ = alice
|
||||
page.goto(f"{BASE_URL}/admin/services", wait_until="domcontentloaded")
|
||||
link = page.locator("a.sidebar-link[href='/admin/bots']")
|
||||
link.wait_for(state="visible")
|
||||
assert link.count() == 1
|
||||
|
||||
|
||||
def test_admin_bots_redirect_unauth(page, app_server):
|
||||
page.goto(f"{BASE_URL}/admin/bots", wait_until="domcontentloaded")
|
||||
assert page.url.startswith(f"{BASE_URL}/auth/login")
|
||||
@@ -1,9 +1,25 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
import requests
|
||||
from playwright.sync_api import expect
|
||||
from tests.conftest import BASE_URL
|
||||
from devplacepy.database import get_table
|
||||
|
||||
USER_INPUT = '#cm-admin-create-form input[data-search="user"]'
|
||||
USER_OPTIONS = '#cm-admin-create-form [data-suggest="user"] li[data-value]'
|
||||
RUN_AS_HIDDEN = '#cm-admin-create-form input[name="run_as_uid"]'
|
||||
|
||||
|
||||
def _open_user_search(page):
|
||||
page.goto(f"{BASE_URL}/admin/containers", wait_until="domcontentloaded")
|
||||
page.click('[data-modal="cm-admin-create-modal"]')
|
||||
inp = page.locator(USER_INPUT)
|
||||
inp.wait_for(state="visible")
|
||||
inp.fill("test")
|
||||
options = page.locator(USER_OPTIONS)
|
||||
options.first.wait_for(state="visible")
|
||||
return inp, options
|
||||
|
||||
|
||||
def test_containers_admin_page_loads(alice, app_server):
|
||||
page, user = alice
|
||||
@@ -15,3 +31,80 @@ def test_container_instance_page_404_for_missing(alice, app_server):
|
||||
page, _ = alice
|
||||
page.goto(f"{BASE_URL}/admin/containers/nonexistent", wait_until="domcontentloaded")
|
||||
assert page.is_visible("text=Not Found") or page.is_visible("text=404")
|
||||
|
||||
|
||||
def test_user_search_arrow_keys_highlight_and_enter_selects(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, options = _open_user_search(page)
|
||||
count = options.count()
|
||||
assert count >= 1
|
||||
|
||||
inp.press("ArrowDown")
|
||||
expect(options.nth(0)).to_have_class("cm-suggest-active")
|
||||
|
||||
target = options.nth(0)
|
||||
if count >= 2:
|
||||
inp.press("ArrowDown")
|
||||
expect(options.nth(1)).to_have_class("cm-suggest-active")
|
||||
expect(options.nth(0)).not_to_have_class("cm-suggest-active")
|
||||
target = options.nth(1)
|
||||
|
||||
label = target.get_attribute("data-label")
|
||||
inp.press("Enter")
|
||||
|
||||
expect(page.locator(USER_OPTIONS)).to_have_count(0)
|
||||
assert inp.input_value() == label
|
||||
assert page.locator(RUN_AS_HIDDEN).input_value() != ""
|
||||
|
||||
|
||||
def test_user_search_arrow_up_wraps_to_last(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, options = _open_user_search(page)
|
||||
if options.count() < 2:
|
||||
return
|
||||
last = options.count() - 1
|
||||
inp.press("ArrowUp")
|
||||
expect(options.nth(last)).to_have_class("cm-suggest-active")
|
||||
|
||||
|
||||
def test_user_search_tab_navigates_options(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, options = _open_user_search(page)
|
||||
inp.press("Tab")
|
||||
expect(options.nth(0)).to_have_class("cm-suggest-active")
|
||||
if options.count() >= 2:
|
||||
inp.press("Tab")
|
||||
expect(options.nth(1)).to_have_class("cm-suggest-active")
|
||||
|
||||
|
||||
def test_user_search_tab_past_last_selects_and_releases(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, options = _open_user_search(page)
|
||||
count = options.count()
|
||||
label = options.nth(count - 1).get_attribute("data-label")
|
||||
for _ in range(count + 1):
|
||||
inp.press("Tab")
|
||||
|
||||
expect(page.locator(USER_OPTIONS)).to_have_count(0)
|
||||
assert inp.input_value() == label
|
||||
assert page.locator(RUN_AS_HIDDEN).input_value() != ""
|
||||
assert not inp.evaluate("el => el === document.activeElement")
|
||||
|
||||
|
||||
def test_user_search_escape_closes_without_selecting(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, _ = _open_user_search(page)
|
||||
inp.press("Escape")
|
||||
expect(page.locator(USER_OPTIONS)).to_have_count(0)
|
||||
assert page.locator(RUN_AS_HIDDEN).input_value() == ""
|
||||
|
||||
|
||||
def test_user_search_has_combobox_aria(alice, seeded_db):
|
||||
page, _ = alice
|
||||
inp, options = _open_user_search(page)
|
||||
assert inp.get_attribute("role") == "combobox"
|
||||
assert inp.get_attribute("aria-expanded") == "true"
|
||||
inp.press("ArrowDown")
|
||||
active = inp.get_attribute("aria-activedescendant")
|
||||
assert active
|
||||
assert options.nth(0).get_attribute("id") == active
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
|
||||
@@ -17,6 +17,8 @@ def seed_admin_news(count=3):
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -157,6 +159,8 @@ def _seed_news_audit_log():
|
||||
title = _unique("aunews")
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
"title": title,
|
||||
|
||||
Reference in New Issue
Block a user