#!/usr/bin/env python3
"""Tests for Story 3.02 (Track B): VoyagerDefense"""
import sys
sys.path.insert(0, '/mnt/e/genesis-system')


def test_voyager_defense():
    from core.mvfl.voyager_defense import VoyagerDefense, VoyagerScore, BLOCK_THRESHOLD

    # BB1: No Qdrant client → fail open (score=0, should_block=False)
    defense = VoyagerDefense(qdrant_client=None)
    result = defense.score({"status": "error", "error": "something bad"})
    assert result.score == 0.0
    assert result.should_block == False
    assert result.matched_scars == []

    # BB2: Clean output with no matching scars (using None client = fail open)
    result = defense.score({"status": "completed", "result": "all good"})
    assert result.score == 0.0
    assert result.should_block == False

    # BB3: VoyagerScore dataclass
    score = VoyagerScore(score=0.85, matched_scars=["scar-001", "scar-002"], should_block=True)
    assert score.score == 0.85
    assert len(score.matched_scars) == 2
    assert score.should_block == True

    # WB1: BLOCK_THRESHOLD is configurable
    assert isinstance(BLOCK_THRESHOLD, float)
    assert 0.0 <= BLOCK_THRESHOLD <= 1.0

    # WB2: should_block calculation
    score_low = VoyagerScore(score=0.5, should_block=False)
    score_high = VoyagerScore(score=0.8, should_block=True)
    assert score_low.should_block == False
    assert score_high.should_block == True

    # WB3: _output_to_text works
    defense2 = VoyagerDefense(qdrant_client=None)
    text = defense2._output_to_text({"status": "error", "error": "timeout"})
    assert "error" in text.lower()

    # WB4: _simple_embed returns 768-dim vector
    embed = defense2._simple_embed("test text")
    assert len(embed) == 768
    assert all(isinstance(v, float) for v in embed)

    # WB5: _simple_embed is deterministic
    embed2 = defense2._simple_embed("test text")
    assert embed == embed2

    # WB6: Different inputs → different embeddings
    embed3 = defense2._simple_embed("different text")
    assert embed != embed3

    print("ALL TESTS PASSED — Story 3.02 (Track B)")


if __name__ == "__main__":
    test_voyager_defense()
