import uuid import requests from tests.conftest import BASE_URL def _session(): s = requests.Session() name = f"push_{uuid.uuid4().hex[:10]}" s.post(f"{BASE_URL}/auth/signup", data={ "username": name, "email": f"{name}@test.dev", "password": "secret123", "confirm_password": "secret123", }, allow_redirects=True) return s def test_public_key_endpoint(app_server): r = requests.get(f"{BASE_URL}/push.json") assert r.status_code == 200 assert r.json().get("publicKey") def test_register_requires_auth(app_server): r = requests.post(f"{BASE_URL}/push.json", json={ "endpoint": "https://push.example.com/anon", "keys": {"p256dh": "key", "auth": "auth"}, }, allow_redirects=False) assert r.status_code == 401 def test_register_success(app_server): s = _session() r = s.post(f"{BASE_URL}/push.json", json={ "endpoint": "https://push.example.com/sub-1", "keys": {"p256dh": "p256dh_fake", "auth": "auth_fake"}, }) assert r.status_code == 200, r.text assert r.json().get("registered") is True def test_register_missing_keys_rejected(app_server): s = _session() r = s.post(f"{BASE_URL}/push.json", json={"endpoint": "https://push.example.com/x"}) assert r.status_code == 400 def test_register_invalid_json_rejected(app_server): s = _session() r = s.post(f"{BASE_URL}/push.json", data="not-json", headers={"Content-Type": "application/json"}) assert r.status_code == 400 def test_service_worker_served(app_server): r = requests.get(f"{BASE_URL}/service-worker.js") assert r.status_code == 200 assert r.headers.get("Service-Worker-Allowed") == "/" def test_manifest_served(app_server): r = requests.get(f"{BASE_URL}/manifest.json") assert r.status_code == 200