arc/hesabixAPI/tests/test_ai_knowledge_service.py

72 lines
2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""تست جستجوی دانشنامه AI."""
from __future__ import annotations
from unittest.mock import MagicMock
from app.services.ai.ai_knowledge_service import (
_tokenize,
document_to_dict,
inspect_index_status,
search_documents,
)
def test_tokenize_persian_and_latin():
tokens = _tokenize("فروش ماه گذشته sales report")
assert "فروش" in tokens
assert "sales" in tokens
def test_search_documents_scores_overlap():
db = MagicMock()
doc1 = MagicMock()
doc1.id = 1
doc1.title = "سیاست تخفیف"
doc1.content = "حداکثر تخفیف فاکتور ۱۰ درصد است"
doc1.updated_at = None
doc2 = MagicMock()
doc2.id = 2
doc2.title = "راهنما"
doc2.content = "موجودی انبار"
doc2.updated_at = None
q = MagicMock()
q.filter.return_value.order_by.return_value.limit.return_value.all.return_value = [doc1, doc2]
db.query.return_value = q
hits = search_documents(db, business_id=1, query="تخفیف فاکتور", limit=3)
assert len(hits) >= 1
assert hits[0]["id"] == 1
assert hits[0]["score"] >= 1
def test_document_to_dict_includes_index_status():
doc = MagicMock()
doc.id = 7
doc.business_id = 1
doc.title = "سیاست"
doc.source_filename = None
doc.content = "متن"
doc.created_at = None
doc.updated_at = None
payload = document_to_dict(
doc,
index_status={
"index_status": "semantic",
"chunk_count": 4,
"embedded_count": 4,
},
)
assert payload["index_status"] == "semantic"
assert payload["chunk_count"] == 4
def test_inspect_index_status_keyword_when_no_embeddings():
db = MagicMock()
q = MagicMock()
q.filter.return_value.all.return_value = [(None,), (None,)]
db.query.return_value = q
status = inspect_index_status(db, 3)
assert status["index_status"] == "keyword"
assert status["chunk_count"] == 2
assert status["embedded_count"] == 0