GuestOps/tests/test_desktop_acceptance.py
2026-09-29 21:03:17 +01:00

66 lines
2.8 KiB
Python

import importlib.util
from pathlib import Path
import unittest
spec = importlib.util.spec_from_file_location("desktop_acceptance", Path(__file__).resolve().parents[1] / "deploy" / "desktop_acceptance.py")
acceptance = importlib.util.module_from_spec(spec)
spec.loader.exec_module(acceptance)
def valid_record():
return {
"schemaVersion": 1,
"system": "guestops-desktop-parity",
"dataClassification": "synthetic-only",
"desktopBaselineCommit": acceptance.DESKTOP_BASELINE,
"releaseCommit": "a" * 40,
"releaseRecordSha256": "b" * 64,
"environment": "https://sandbox-guestops.futuresens.co.uk",
"browser": {"name": "Microsoft Edge", "version": "140.0.0.0", "operatingSystem": "Windows 11"},
"viewport": {"width": 1440, "height": 900, "deviceScaleFactor": 1},
"hotelTimeZone": "Europe/London",
"operator": "Acceptance operator",
"reviewedBy": "Independent reviewer",
"startedAt": "2026-09-29T09:00:00Z",
"endedAt": "2026-09-29T10:00:00Z",
"reviewedAt": "2026-09-29T11:00:00Z",
"scenarios": [
{"id": scenario, "status": "pass", "evidence": [f"restricted-ticket-{index}"]}
for index, scenario in enumerate(sorted(acceptance.SCENARIOS), 1)
],
}
class DesktopAcceptanceTests(unittest.TestCase):
def test_complete_record_passes(self):
acceptance.validate(valid_record())
def test_exact_scenarios_and_desktop_baseline_are_required(self):
record = valid_record();record["scenarios"].pop()
with self.assertRaisesRegex(ValueError, "exact desktop scenario"):
acceptance.validate(record)
record = valid_record();record["desktopBaselineCommit"] = "c" * 40
with self.assertRaisesRegex(ValueError, "reviewed desktop baseline"):
acceptance.validate(record)
def test_desktop_viewport_and_timezone_are_required(self):
record = valid_record();record["viewport"]["width"] = 1024
with self.assertRaisesRegex(ValueError, "Desktop viewport width"):
acceptance.validate(record)
record = valid_record();record["hotelTimeZone"] = "local browser time"
with self.assertRaisesRegex(ValueError, "IANA timezone"):
acceptance.validate(record)
def test_independent_review_and_safe_evidence_are_required(self):
record = valid_record();record["reviewedBy"] = record["operator"]
with self.assertRaisesRegex(ValueError, "different people"):
acceptance.validate(record)
record = valid_record();record["scenarios"][0]["evidence"] = ["guest@example.invalid"]
with self.assertRaisesRegex(ValueError, "safe opaque"):
acceptance.validate(record)
if __name__ == "__main__":
unittest.main()