"""Tests for shared/capture.py — capture parsing and validation."""

from __future__ import annotations

import pytest
from shared.capture import CaptureQAExemplar, CaptureQuote, load_capture


def test_load_template_capture_round_trip():
    capture = load_capture("_template")
    assert capture.manifest.slug == "your-slug"
    assert capture.manifest.voice_policy == "generated"
    assert capture.voice.policy == "generated"
    assert capture.qa_exemplars[0].synthetic is True
    assert capture.quotes[0].provenance == "model-memory"


def test_capture_quote_rejects_verified_without_url():
    with pytest.raises(Exception):
        CaptureQuote.model_validate(
            {
                "id": "q001",
                "text": "Verbatim text.",
                "source": "Source",
                "provenance": "verified",
            }
        )


def test_capture_quote_accepts_model_memory_with_url():
    quote = CaptureQuote.model_validate(
        {
            "id": "q001",
            "text": "Verbatim text.",
            "source": "Source",
            "provenance": "model-memory",
            "verify_url": "https://example.com",
        }
    )
    assert quote.verify_url == "https://example.com"


def test_capture_exemplar_rejects_non_synthetic():
    with pytest.raises(Exception):
        CaptureQAExemplar.model_validate(
            {
                "id": "x001",
                "question": "Q?",
                "answer": "A.",
                "topics": ["tag"],
                "synthetic": False,
                "register": "coaching-conversational",
            }
        )

