"""Tests for script execution progress summary (success/total, failures excluded)."""

from server.infrastructure.redis.script_execution_store import execution_progress_summary


def test_all_success():
    ids = [1, 2, 3]
    results = {
        "1": {"status": "success", "exit_code": 0},
        "2": {"status": "success", "exit_code": 0},
        "3": {"phase": "done", "status": "completed", "exit_code": 0},
    }
    assert execution_progress_summary(results, ids) == "3/3"


def test_partial_failure():
    ids = list(range(1, 367))
    results = {str(i): {"status": "success", "exit_code": 0} for i in ids[:-1]}
    results[str(ids[-1])] = {"status": "failed", "exit_code": 1, "stderr": "error"}
    assert execution_progress_summary(results, ids) == "365/366"


def test_all_failed():
    ids = [10, 20]
    results = {
        "10": {"status": "failed", "exit_code": 1},
        "20": {"status": "error", "exit_code": -1},
    }
    assert execution_progress_summary(results, ids) == "0/2"


def test_pending_not_counted():
    ids = [1, 2, 3]
    results = {
        "1": {"status": "success", "exit_code": 0},
        "2": {"phase": "pending", "status": "started"},
        "3": {"status": "failed", "exit_code": 1},
    }
    assert execution_progress_summary(results, ids) == "1/3"


def test_skipped_not_counted():
    ids = [1, 2]
    results = {
        "1": {"status": "success", "exit_code": 0},
        "2": {"status": "skipped", "exit_code": -1, "stderr": "no ssh"},
    }
    assert execution_progress_summary(results, ids) == "1/2"


def test_missing_result_not_success():
    ids = [1, 2, 3]
    results = {"1": {"status": "success", "exit_code": 0}}
    assert execution_progress_summary(results, ids) == "1/3"


def test_empty_total():
    assert execution_progress_summary({}, []) == "—"
