"""Tests for the canonical ApplicationStatus enum."""
from __future__ import annotations

from apps.smehub._shared.calls import ApplicationStatus
from apps.smehub._shared.calls.status import (
    ACTIVE_REVIEW_STATES,
    DEAD_STATES,
    DECIDED_STATES,
)


def test_all_expected_states_present():
    expected = {
        "draft",
        "submitted",
        "under_review",
        "returned_for_info",
        "accepted",
        "rejected",
        "withdrawn",
        "not_submitted",
    }
    assert {s.value for s in ApplicationStatus} == expected


def test_active_review_set():
    assert ACTIVE_REVIEW_STATES == frozenset({"submitted", "under_review"})


def test_decided_set():
    assert DECIDED_STATES == frozenset({"accepted", "rejected"})


def test_dead_set():
    assert DEAD_STATES == frozenset({"withdrawn", "not_submitted"})


def test_state_sets_disjoint():
    """A status should belong to at most one logical bucket; DRAFT and
    RETURNED_FOR_INFO are intentionally outside all three buckets."""
    assert ACTIVE_REVIEW_STATES.isdisjoint(DECIDED_STATES)
    assert ACTIVE_REVIEW_STATES.isdisjoint(DEAD_STATES)
    assert DECIDED_STATES.isdisjoint(DEAD_STATES)
