Newer
Older
vmk-360_data_mcp / tests / test_models.py
"""Базовые тесты моделей и структуры проекта."""

import pytest

from vmk_data_mcp.models import (
    GetListingInput,
    ListingResult,
    MetadataFilters,
    PaginationParams,
    SearchMetadataInput,
    SearchResult,
    SearchSimilarInput,
)


def test_pagination_defaults():
    p = PaginationParams()
    assert p.limit == 20
    assert p.offset == 0


def test_pagination_bounds():
    with pytest.raises(ValueError):
        PaginationParams(limit=0)
    with pytest.raises(ValueError):
        PaginationParams(limit=101)
    with pytest.raises(ValueError):
        PaginationParams(offset=-1)


def test_metadata_filters_empty():
    f = MetadataFilters()
    assert f.deal_type is None
    assert f.city is None


def test_search_similar_input():
    inp = SearchSimilarInput(query="двокімнатна квартира київ")
    assert inp.query == "двокімнатна квартира київ"
    assert inp.min_similarity == 0.7
    assert inp.pagination.limit == 20


def test_search_metadata_input():
    inp = SearchMetadataInput(query="центр міста")
    assert inp.query == "центр міста"


def test_get_listing_input():
    inp = GetListingInput(listing_id=42)
    assert inp.listing_id == 42


def test_listing_result_serializes():
    listing = ListingResult(id=1, title="Test")
    data = listing.model_dump()
    assert data["id"] == 1
    assert data["title"] == "Test"


def test_search_result_serializes():
    result = SearchResult(total=5, limit=10, offset=0, listings=[])
    data = result.model_dump()
    assert data["total"] == 5