import pytest

from fastapi import HTTPException

from app.api.routes import chunks as chunks_route
from app.models.chunk import IngestionChunkContract


@pytest.mark.asyncio
async def test_get_chunk_by_id_returns_chunk(monkeypatch):
    chunk = IngestionChunkContract(
        chunk_id="chk_1",
        repo_id="ad/repo",
        doc_path="docs/api.md",
        section_title="API",
        chunk_text="hello",
        chunk_hash="hash_1",
        source_type="repo_doc",
    )

    async def _get_chunk_by_chunk_id(_chunk_id):
        return chunk

    monkeypatch.setattr(chunks_route.chunk_repo, "get_chunk_by_chunk_id", _get_chunk_by_chunk_id)

    result = await chunks_route.get_chunk_by_id("chk_1")

    assert result.chunk_id == "chk_1"


@pytest.mark.asyncio
async def test_get_chunk_by_id_raises_404_when_missing(monkeypatch):
    async def _get_chunk_by_chunk_id(_chunk_id):
        return None

    monkeypatch.setattr(chunks_route.chunk_repo, "get_chunk_by_chunk_id", _get_chunk_by_chunk_id)

    with pytest.raises(HTTPException) as exc:
        await chunks_route.get_chunk_by_id("missing")

    assert exc.value.status_code == 404
    assert exc.value.detail == "Chunk not found"
