from __future__ import annotations

from pathlib import Path

import pytest

from gateway.platforms.nutrition_weekly_operations import Topic59PublicationDisposition
from tests.gateway.nutrition_weekly_maintenance_support import (
    arm_maintenance,
    publish_with_tripwires,
)


@pytest.fixture
def anyio_backend() -> str:
    return "asyncio"


def test_maintenance_disposition_is_distinct_from_delivery() -> None:
    assert Topic59PublicationDisposition.NOOP_MAINTENANCE.value == "noop_maintenance"


@pytest.mark.anyio
async def test_valid_maintenance_precedes_claim_and_transport(
    tmp_path: Path, monkeypatch: pytest.MonkeyPatch,
) -> None:
    # Given
    fixture = arm_maintenance(tmp_path, monkeypatch)

    # When
    observation = await publish_with_tripwires(fixture)

    # Then
    assert observation.result.disposition is Topic59PublicationDisposition.NOOP_MAINTENANCE
    assert observation.result.message_id is None
    assert observation.result.maintenance_audit_digest is not None
    assert (
        observation.claim_calls,
        observation.record_calls,
        observation.send_calls,
        observation.edit_calls,
        observation.network_calls,
    ) == (0, 0, 0, 0, 0)
    assert not fixture.ledger.exists()
