Files
live/backend/tests/test_access_and_sessions.py

72 lines
2.8 KiB
Python

import unittest
from datetime import datetime
from types import SimpleNamespace
from routes.streams import _serialize
class StreamAccessSerializationTest(unittest.TestCase):
def make_stream(self, **overrides):
values = {
"id": 1,
"title": "Hidden program",
"description": None,
"cover_url": None,
"status": SimpleNamespace(value="pending"),
"scheduled_at": datetime(2026, 8, 20, 12, 0),
"started_at": None,
"ended_at": None,
"multicast_enabled": False,
"replay_file": None,
"chapters_json": "[]",
"transcode_profile": "default",
"homepage_visible": False,
"remote_control_enabled": True,
"stream_key": "private-key",
"created_at": datetime(2026, 8, 19, 12, 0),
}
values.update(overrides)
return SimpleNamespace(**values)
def test_public_serialization_excludes_private_stream_key(self):
payload = _serialize(self.make_stream(), include_private=False)
self.assertNotIn("stream_key", payload)
self.assertFalse(payload["homepage_visible"])
self.assertTrue(payload["remote_control_enabled"])
def test_admin_serialization_includes_private_stream_key(self):
payload = _serialize(self.make_stream(), include_private=True)
self.assertEqual(payload["stream_key"], "private-key")
def test_program_statuses_are_preserved(self):
for status in ("pending", "live", "ended", "cancelled"):
with self.subTest(status=status):
payload = _serialize(self.make_stream(status=SimpleNamespace(value=status)), include_private=False)
self.assertEqual(payload["status"], status)
class AccessContractTest(unittest.TestCase):
def test_hidden_program_uses_private_direct_url_contract(self):
stream = StreamAccessSerializationTest().make_stream(homepage_visible=False)
public_payload = _serialize(stream, include_private=False)
admin_payload = _serialize(stream, include_private=True)
self.assertFalse(public_payload["homepage_visible"])
self.assertNotIn("stream_key", public_payload)
self.assertEqual(admin_payload["stream_key"], "private-key")
def test_remote_control_flag_is_enforced_by_contract(self):
enabled = _serialize(
StreamAccessSerializationTest().make_stream(remote_control_enabled=True),
include_private=False,
)
disabled = _serialize(
StreamAccessSerializationTest().make_stream(remote_control_enabled=False),
include_private=False,
)
self.assertTrue(enabled["remote_control_enabled"])
self.assertFalse(disabled["remote_control_enabled"])
if __name__ == "__main__":
unittest.main()