2026-06-13 14:32:33 +00:00
|
|
|
# retoor <retoor@molodetz.nl>
|
|
|
|
|
|
2026-09-08 03:44:30 +02:00
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
from tests.conftest import BASE_URL, CACHE_VERSION_PROPAGATION_SECONDS, login_user
|
|
|
|
|
from devplacepy.database import get_table, set_setting
|
2026-06-13 14:32:33 +00:00
|
|
|
def _promote_to_admin(username: str) -> None:
|
|
|
|
|
users = get_table("users")
|
|
|
|
|
user = users.find_one(username=username)
|
|
|
|
|
if user:
|
|
|
|
|
users.update({"uid": user["uid"], "role": "Admin"}, ["uid"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_services_data_json(page, seeded_db):
|
|
|
|
|
user = seeded_db["alice"]
|
|
|
|
|
_promote_to_admin(user["username"])
|
|
|
|
|
login_user(page, user)
|
|
|
|
|
page.goto(f"{BASE_URL}/admin/services/data", wait_until="domcontentloaded")
|
|
|
|
|
text = page.inner_text("body > pre") if page.locator("body > pre").count() > 0 else page.content()
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
data = json.loads(text)
|
|
|
|
|
assert "services" in data
|
|
|
|
|
assert isinstance(data["services"], list)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_service_detail_unknown_404(page, seeded_db):
|
|
|
|
|
user = seeded_db["alice"]
|
|
|
|
|
_promote_to_admin(user["username"])
|
|
|
|
|
login_user(page, user)
|
2026-09-08 03:44:30 +02:00
|
|
|
set_setting("happy_404_enabled", "0")
|
|
|
|
|
time.sleep(CACHE_VERSION_PROPAGATION_SECONDS)
|
|
|
|
|
try:
|
|
|
|
|
resp = page.request.get(f"{BASE_URL}/admin/services/nope")
|
|
|
|
|
assert resp.status == 404
|
|
|
|
|
assert page.request.get(f"{BASE_URL}/admin/services/nope/data").status == 404
|
|
|
|
|
finally:
|
|
|
|
|
set_setting("happy_404_enabled", "1")
|
|
|
|
|
time.sleep(CACHE_VERSION_PROPAGATION_SECONDS)
|
2026-06-13 14:32:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_bots_service_registered_and_opt_in(page, seeded_db):
|
|
|
|
|
user = seeded_db["alice"]
|
|
|
|
|
_promote_to_admin(user["username"])
|
|
|
|
|
login_user(page, user)
|
|
|
|
|
page.goto(f"{BASE_URL}/admin/services", wait_until="domcontentloaded")
|
|
|
|
|
data = page.request.get(f"{BASE_URL}/admin/services/data").json()
|
|
|
|
|
bots = next(s for s in data["services"] if s["name"] == "bots")
|
|
|
|
|
assert bots["enabled"] is False
|
|
|
|
|
assert bots["status"] == "stopped"
|
|
|
|
|
assert "metrics" in bots
|
|
|
|
|
page.goto(f"{BASE_URL}/admin/services/bots", wait_until="domcontentloaded")
|
|
|
|
|
detail = page.locator("[data-service-detail][data-service='bots']")
|
|
|
|
|
assert detail.locator("input[name='bot_fleet_size']").count() == 1
|
|
|
|
|
assert detail.locator("input[name='bot_input_cost_per_1m']").count() == 1
|