"""discourse — UPGRADE overlay (phase prevb): FAITHFULNESS assertion that the PR head genuinely ran.

The whole point of phase prevb: the old all-deploys overlay re-pinned the head back to
bitnamilegacy/discourse:3.3.1 and re-added the sidekiq service, so the head's official-image
migration was never tested. With the version-specific config removed from the all-deploys overlay
and the dynamic base (last-green/main = bitnamilegacy:3.5.0) deployed only as the *base*, the upgrade
chaos redeploy must land the PR head UNMODIFIED. This overlay asserts exactly that, post-upgrade:

  1. the running `app` service image IS from the official `discourse/discourse` repository —
     NOT bitnamilegacy. (Version-agnostic since 2026-08-04: the original assertion hardcoded the
     migration-era pin `:3.5.3` and went stale on the first legitimate app bump (2026.7.1, weekly
     2026-08-03). The property this test guards is the IMAGE FAMILY — official vs bitnami — not a
     frozen version; the exact head pin is already exercised by the deploy itself.)
  2. the `sidekiq` service the PR deletes is GONE from the deployed stack.

If either fails, the head did not really run (the overlay leaked onto it) → RED. Assertion-only,
additive to the generic upgrade tier (which already proves reconverge/serving/moved + HC1 commit stamp).
"""

import os
import sys

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


def test_head_runs_official_image_not_bitnamilegacy(live_app):
    image = lifecycle.deployed_identity(live_app, service="app").get("image") or ""
    assert "bitnamilegacy" not in image, (
        f"app image is {image!r} — the bitnamilegacy base leaked onto the PR head "
        "(the version-specific overlay was applied to the head, the prevb bug)"
    )
    assert image.startswith("discourse/discourse:"), (
        f"app image is {image!r}, expected the PR head's official discourse/discourse image "
        "— the head's image migration was not exercised"
    )


def test_sidekiq_service_dropped_by_head(live_app):
    services = lifecycle.stack_service_names(live_app)
    assert "sidekiq" not in services, (
        f"sidekiq service still present after the upgrade to the PR head: {services} — the head "
        "(which deletes sidekiq) did not really deploy"
    )
