"""matrix-synapse — INSTALL overlay (Phase 1d, DG4): override + extend-by-composition.

Reuses the generic "really serving" assertion, then ADDS the recipe-specific checks: the synapse
client API answers 200 over real HTTPS through the gateway, and the client-API version document is
real synapse JSON (proves the app, not just a proxy 200). The base recipe has no browser UI
(element-web is an addon), so the functional assertion is the JSON client API, not Playwright.
Assertion-only on the shared deployment."""

import json
import os
import sys

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner"))
from harness import generic, lifecycle  # noqa: E402


def test_serving_and_client_api(live_app, meta):
    # extend-by-composition: reuse the generic "really serving" assertion first ...
    generic.assert_serving(live_app, meta)

    # ... then the recipe-specific assertions.
    # The synapse client API answers 200 over real HTTPS through the gateway (nginx -> synapse).
    status = lifecycle.http_get(live_app, "/_matrix/client/versions")
    assert status == 200, f"expected 200 from {live_app}/_matrix/client/versions, got {status}"

    # The client-API version document is real synapse JSON (proves the app, not just a proxy 200).
    body = lifecycle.http_body(live_app, "/_matrix/client/versions")
    doc = json.loads(body)
    assert isinstance(doc.get("versions"), list) and doc["versions"], (
        "no matrix client versions advertised"
    )
