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"