Bot & Automation
jorgasisten
/root/hermes-projects/jorgasisten
tests/test_sheets_query_matching.py
text
from jorgasisten.schemas import SheetRow
from jorgasisten.services.sheet_router import read_filters_from_message
from jorgasisten.services.sheets import normalize_validation_range_ref, score_row_against_filters
def test_read_filters_from_message_keeps_main_identity_tokens() -> None:
filters = read_filters_from_message("ada booking atas nama Budi?")
assert filters == {"query": "budi"}
def test_score_row_against_filters_matches_identity_value_not_generic_labels() -> None:
row = SheetRow(
sheet_name="Booking",
row_number=4,
values={"Nama": "Budi", "Motor": "Beat", "Status": "Booking"},
)
score = score_row_against_filters(row, {"query": "budi"})
assert score > 0
def test_score_row_against_filters_prefers_complete_token_match() -> None:
exact_row = SheetRow(
sheet_name="Stok",
row_number=2,
values={"Produk": "Oli MPX", "Qty": "8"},
)
partial_row = SheetRow(
sheet_name="Stok",
row_number=3,
values={"Produk": "Oli Federal", "Qty": "5"},
)
exact_score = score_row_against_filters(exact_row, {"query": "oli mpx"})
partial_score = score_row_against_filters(partial_row, {"query": "oli mpx"})
assert exact_score > partial_score
assert partial_score == 0
def test_normalize_validation_range_ref_strips_formula_prefix() -> None:
value = normalize_validation_range_ref("='Stok Barang Total'!$B$4:$B$10000")
assert value == "'Stok Barang Total'!$B$4:$B$10000"