from __future__ import annotations

import pytest

from app.models.internal_retrieve import RetrieveRequest
from app.retrieval.fixtures.retrieve_fixtures import build_mock_retrieve_response


@pytest.mark.integration
def test_default_fixture_validates_against_model():
    response = build_mock_retrieve_response(
        RetrieveRequest(
            repo_id="ad/example.com",
            snapshot_id="snap_abc",
            query_text="default query",
        )
    )
    assert response.embedding_model == "text-embedding-3-small"
    assert response.embedding_dimension == 1536
    assert response.code_snippets
    snippet = response.code_snippets[0]
    assert snippet.symbol_name == "ProcessDelta"
    assert snippet.file_path == "internal/service/commitintel/service.go"
    assert response.metadata.request_id


@pytest.mark.integration
def test_code_lookup_fixture_has_graph_expanded_doc():
    response = build_mock_retrieve_response(
        RetrieveRequest(
            repo_id="ad/example.com",
            snapshot_id="snap_abc",
            query_text="How does commit analysis get triggered?",
        )
    )
    assert response.code_snippets
    assert response.doc_excerpts
    assert any(item.graph_expanded for item in response.doc_excerpts)


@pytest.mark.integration
def test_empty_fixture_returns_zero_hits():
    response = build_mock_retrieve_response(
        RetrieveRequest(
            repo_id="ad/example.com",
            snapshot_id="snap_abc",
            query_text="",
        )
    )
    assert response.code_snippets == []
    assert response.doc_excerpts == []
    assert response.related_commits == []
