forked from retoor/devplacepy
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,
|
||||
|
||||
@@ -20,6 +20,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -63,6 +65,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -87,6 +91,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -110,6 +116,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -128,6 +136,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -146,6 +156,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -43,6 +43,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -86,6 +88,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -110,6 +114,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -133,6 +139,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -151,6 +159,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -169,6 +179,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -98,6 +98,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,
|
||||
|
||||
@@ -85,6 +85,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
marker = f"seedpost-{post_uid[:8]}"
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": post_uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(marker, post_uid),
|
||||
@@ -102,6 +104,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
for i, text in enumerate(comment_texts):
|
||||
comments.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": str(uuid4()),
|
||||
"target_type": "post",
|
||||
"target_uid": post_uid,
|
||||
@@ -242,6 +246,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -285,6 +291,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -309,6 +317,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -332,6 +342,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -350,6 +362,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -368,6 +382,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
@@ -480,6 +496,7 @@ def test_feed_tab_switching(alice):
|
||||
def test_feed_topic_filter_sidebar(alice):
|
||||
page, user = alice
|
||||
page.goto(f"{BASE_URL}/feed", wait_until="domcontentloaded")
|
||||
page.locator(".sidebar-more .sidebar-more-toggle").click()
|
||||
topics = ["Devlog", "Showcase", "Question", "Rant", "Fun"]
|
||||
for topic in topics:
|
||||
link = page.locator(f"a:has-text('{topic}')").first
|
||||
@@ -621,6 +638,7 @@ def test_feed_guest_reply_disabled(page, app_server):
|
||||
def test_feed_signals_topic(alice):
|
||||
page, _ = alice
|
||||
page.goto(f"{BASE_URL}/feed", wait_until="domcontentloaded")
|
||||
page.locator(".sidebar-more .sidebar-more-toggle").click()
|
||||
signals_link = page.locator("a:has-text('Signals')")
|
||||
assert signals_link.is_visible()
|
||||
|
||||
|
||||
@@ -48,6 +48,8 @@ def _seed_gists(count):
|
||||
title = f"Pag Gist {i}"
|
||||
gists.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
|
||||
@@ -14,6 +14,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -57,6 +59,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -81,6 +85,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -104,6 +110,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -122,6 +130,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -140,6 +150,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -17,6 +17,8 @@ def _seed_news_paginated(count):
|
||||
titles.append(title)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
"title": title,
|
||||
@@ -42,6 +44,8 @@ def seed_news():
|
||||
slug = make_combined_slug(title, uid)
|
||||
news_table.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -71,6 +75,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -114,6 +120,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -138,6 +146,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -161,6 +171,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -179,6 +191,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -197,6 +211,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -15,6 +15,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -58,6 +60,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -82,6 +86,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -105,6 +111,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -123,6 +131,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -141,6 +151,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
+8
-2
@@ -58,7 +58,10 @@ def test_post_vote_increment(alice):
|
||||
def test_post_upvote_voted_state_persists(alice):
|
||||
page, _ = alice
|
||||
create_post(page, "showcase", "Upvote persistence test")
|
||||
page.locator(".post-action-btn.vote-up").first.click()
|
||||
with page.expect_response(
|
||||
lambda r: "/votes/" in r.url and r.request.method == "POST"
|
||||
):
|
||||
page.locator(".post-action-btn.vote-up").first.click()
|
||||
expect(page.locator(".post-vote-count").first).to_have_text("1")
|
||||
page.reload(wait_until="domcontentloaded")
|
||||
expect(page.locator(".post-action-btn.vote-up").first).to_have_class(
|
||||
@@ -72,7 +75,10 @@ def test_post_upvote_voted_state_persists(alice):
|
||||
def test_post_downvote_voted_state_persists(alice):
|
||||
page, _ = alice
|
||||
create_post(page, "showcase", "Downvote persistence test")
|
||||
page.locator(".post-action-btn.vote-down").first.click()
|
||||
with page.expect_response(
|
||||
lambda r: "/votes/" in r.url and r.request.method == "POST"
|
||||
):
|
||||
page.locator(".post-action-btn.vote-down").first.click()
|
||||
expect(page.locator(".post-vote-count").first).to_have_text("-1")
|
||||
page.reload(wait_until="domcontentloaded")
|
||||
expect(page.locator(".post-action-btn.vote-down").first).to_have_class(
|
||||
|
||||
@@ -43,6 +43,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -86,6 +88,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -110,6 +114,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -133,6 +139,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -151,6 +159,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -169,6 +179,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -72,6 +72,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
marker = f"seedpost-{post_uid[:8]}"
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": post_uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(marker, post_uid),
|
||||
@@ -89,6 +91,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
for i, text in enumerate(comment_texts):
|
||||
comments.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": str(uuid4()),
|
||||
"target_type": "post",
|
||||
"target_uid": post_uid,
|
||||
@@ -173,6 +177,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -216,6 +222,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -240,6 +248,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -263,6 +273,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -281,6 +293,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -299,6 +313,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -91,6 +91,8 @@ def _seed_gists(count):
|
||||
title = f"Pag Gist {i}"
|
||||
gists.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
@@ -292,6 +294,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -335,6 +339,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -359,6 +365,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -382,6 +390,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -400,6 +410,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -418,6 +430,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
|
||||
@@ -62,6 +62,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
marker = f"seedpost-{post_uid[:8]}"
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": post_uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(marker, post_uid),
|
||||
@@ -79,6 +81,8 @@ def _seed_post_with_comments(comment_texts, topic="devlog"):
|
||||
for i, text in enumerate(comment_texts):
|
||||
comments.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": str(uuid4()),
|
||||
"target_type": "post",
|
||||
"target_uid": post_uid,
|
||||
@@ -266,6 +270,8 @@ def _seed_projects(count):
|
||||
title = f"Pag Project {i}"
|
||||
projects.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(title, uid),
|
||||
|
||||
@@ -15,6 +15,8 @@ def _seed_news_seo():
|
||||
slug = make_combined_slug(title, uid)
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": slug,
|
||||
"title": title,
|
||||
@@ -58,6 +60,8 @@ def _seed_post_seo(image=None):
|
||||
slug = make_combined_slug("SEO Detail Post", uid)
|
||||
get_table("posts").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -82,6 +86,8 @@ def _seed_gist():
|
||||
slug = make_combined_slug("SEO Detail Gist", uid)
|
||||
get_table("gists").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -105,6 +111,8 @@ def _seed_project():
|
||||
slug = make_combined_slug("SEO Detail Project", uid)
|
||||
get_table("projects").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": slug,
|
||||
@@ -123,6 +131,8 @@ def _seed_news_image(news_uid):
|
||||
|
||||
get_table("news_images").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"news_uid": news_uid,
|
||||
"url": "https://example.com/seo-news-image.jpg",
|
||||
}
|
||||
@@ -141,6 +151,8 @@ def _seed_feed_posts(count):
|
||||
uid = str(uuid4())
|
||||
posts.insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"user_uid": owner,
|
||||
"slug": make_combined_slug(f"seo pag {i}", uid),
|
||||
@@ -213,6 +225,8 @@ def test_landing_news_section(page, app_server):
|
||||
uid = str(uuid4())
|
||||
get_table("news").insert(
|
||||
{
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
"uid": uid,
|
||||
"slug": f"landing-news-{uid[:8]}",
|
||||
"title": f"Landing News {uid[:8]}",
|
||||
|
||||
Reference in New Issue
Block a user