import json

import pytest

from py.routes.embedding_routes import EmbeddingRoutes


class DummyRequest:
    def __init__(self, *, match_info=None):
        self.match_info = match_info or {}


class StubEmbeddingService:
    def __init__(self):
        self.info = {}

    async def get_model_info_by_name(self, name):
        value = self.info.get(name)
        if isinstance(value, Exception):
            raise value
        return value


@pytest.fixture
def routes():
    handler = EmbeddingRoutes()
    handler.service = StubEmbeddingService()  # pyright: ignore[reportAttributeAccessIssue]
    return handler


async def test_get_embedding_info_success(routes):
    routes.service.info["demo"] = {"name": "demo"}
    response = await routes.get_embedding_info(DummyRequest(match_info={"name": "demo"}))
    payload = json.loads(response.text)
    assert payload == {"name": "demo"}


async def test_get_embedding_info_missing(routes):
    response = await routes.get_embedding_info(DummyRequest(match_info={"name": "missing"}))
    payload = json.loads(response.text)
    assert response.status == 404
    assert payload == {"error": "Embedding not found"}


async def test_get_embedding_info_error(routes):
    routes.service.info["demo"] = RuntimeError("boom")
    response = await routes.get_embedding_info(DummyRequest(match_info={"name": "demo"}))
    payload = json.loads(response.text)
    assert response.status == 500
    assert payload == {"error": "boom"}
