Vanilla JS uden build-trin: én WebSocket pr. skærm med automatisk genforbindelse, tegner altid fra seneste snapshot. Storskærmen viser kode, QR, nedtælling og en animeret afsløring; telefonen er bygget til store knapper og genoptager sin plads efter genindlæsning. dev.html viser alle faser uden server. deploy/ har systemd-unit, deploy-script og en bot-test, der spiller et helt spil mod en kørende server. Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
from django.test import TestCase, override_settings
|
|
|
|
from fupogfakta.models import Category, Question
|
|
from party import rooms
|
|
|
|
|
|
@override_settings(TRUSTED_PROXIES=["127.0.0.1"], DEV_HOST_USER=None)
|
|
class ViewTests(TestCase):
|
|
def setUp(self):
|
|
rooms.all_rooms().clear()
|
|
cat = Category.objects.create(name="Kat")
|
|
Question.objects.create(category=cat, prompt="Svaret er _____.", answer="ja", decoys=["a", "b", "c"])
|
|
|
|
def test_play_page_prefills_code(self):
|
|
r = self.client.get("/?code=klmt")
|
|
self.assertContains(r, "KLMT")
|
|
|
|
def test_host_needs_header(self):
|
|
self.assertEqual(self.client.get("/host/").status_code, 403)
|
|
r = self.client.get("/host/", headers={"x-authentik-username": "agw"})
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
def test_header_on_open_path_does_not_log_in_admin(self):
|
|
self.client.get("/", headers={"x-authentik-username": "evil", "x-authentik-groups": "authentik Admins"})
|
|
r = self.client.get("/admin/")
|
|
self.assertEqual(r.status_code, 302) # til login
|
|
|
|
def test_admin_sso_for_admins_group(self):
|
|
r = self.client.get("/admin/", headers={"x-authentik-username": "agw", "x-authentik-groups": "authentik Admins|Familie"})
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
def test_qr_svg(self):
|
|
r = self.client.get("/qr/KLMT.svg")
|
|
self.assertEqual(r["Content-Type"], "image/svg+xml")
|
|
self.assertIn(b"<svg", r.content)
|
|
self.assertIn(b'xmlns="http://www.w3.org/2000/svg"', r.content) # ellers vises den ikke som <img>
|