Bot & Automation
jorgasisten
/root/hermes-projects/jorgasisten
tests/test_formatters_read_answers.py
text
from jorgasisten.schemas import SheetRow
from jorgasisten.services.formatters import build_exact_read_answer
def test_build_exact_read_answer_returns_yes_for_existence_question() -> None:
rows = [SheetRow(sheet_name="Booking", row_number=2, values={"Nama": "Budi", "Status": "Booking"})]
answer = build_exact_read_answer("ada booking atas nama Budi?", "Booking", rows)
assert answer == "ada, pren."
def test_build_exact_read_answer_returns_location_only() -> None:
rows = [SheetRow(sheet_name="Stok Gudang", row_number=4, values={"Produk": "Produk A", "Lokasi": "Rak B2"})]
answer = build_exact_read_answer("Produk A berada di mana?", "Stok Gudang", rows)
assert answer == "lokasinya di Rak B2, pren."
def test_build_exact_read_answer_returns_area_as_location_only() -> None:
rows = [
SheetRow(
sheet_name="Lokasi Barang",
row_number=8,
values={"Nama Barang": "RX7", "Area": "Gudang Belakang"},
)
]
answer = build_exact_read_answer("RX7 ada di area mana?", "Lokasi Barang", rows)
assert answer == "lokasinya di Gudang Belakang, pren."
def test_build_exact_read_answer_returns_unique_areas_for_multi_location_rows() -> None:
rows = [
SheetRow(
sheet_name="Lokasi Barang",
row_number=8,
values={"Kode Barang": "001", "Nama Barang": "RX7", "Area": "Gudang Belakang", "Lemari": "A"},
),
SheetRow(
sheet_name="Lokasi Barang",
row_number=9,
values={"Kode Barang": "001", "Nama Barang": "RX7", "Area": "Gudang Depan", "Lemari": "B"},
),
]
answer = build_exact_read_answer("RX7 ada di area mana?", "Lokasi Barang", rows)
assert answer == (
"Berdasarkan data pada tabel Lokasi Barang, berikut detail lokasi untuk barang RX7 (Kode Barang: 001):\n"
"Area: Gudang Belakang\n"
"Lemari A\n"
"Area: Gudang Depan\n"
"Lemari B"
)
def test_build_exact_read_answer_prefers_stok_akhir_for_sisa_question() -> None:
rows = [
SheetRow(
sheet_name="Stok Barang Total",
row_number=12,
values={
"Kode Barang": "RX7-001",
"Nama Barang": "RX7",
"Stok Awal": "700",
"Stok Akhir": "536",
},
)
]
answer = build_exact_read_answer("sisa stok berapa?", "Stok Barang Total", rows)
assert answer == "stoknya 536, pren."
def test_build_exact_read_answer_returns_grouped_location_detail_with_total() -> None:
rows = [
SheetRow(
sheet_name="Lokasi Barang",
row_number=8,
values={
"Kode Barang": "005-RX701382-12",
"Nama Barang": "RX7 RACING PISTON KIT 64MM PIN 13 CASTING",
"Area": "Gudang Belakang - Ruang Casting",
"Lemari": "A",
"Kondisi": "Mentah",
"Kuantiti": "100",
},
),
SheetRow(
sheet_name="Lokasi Barang",
row_number=9,
values={
"Kode Barang": "005-RX701382-12",
"Nama Barang": "RX7 RACING PISTON KIT 64MM PIN 13 CASTING",
"Area": "Gudang Belakang - Ruang Casting",
"Lemari": "G",
"Kondisi": "Mentah",
"Kuantiti": "100",
},
),
SheetRow(
sheet_name="Lokasi Barang",
row_number=10,
values={
"Kode Barang": "005-RX701382-12",
"Nama Barang": "RX7 RACING PISTON KIT 64MM PIN 13 CASTING",
"Area": "Gudang Belakang - Ruang Forged",
"Lemari": "B7",
"Kondisi": "Mentah",
"Kuantiti": "51",
},
),
]
answer = build_exact_read_answer(
"lokasi barang RX7 RACING PISTON KIT 64MM PIN 13 CASTING",
"Lokasi Barang",
rows,
)
assert answer == (
"Berdasarkan data pada tabel Lokasi Barang, berikut detail lokasi untuk barang "
"RX7 RACING PISTON KIT 64MM PIN 13 CASTING (Kode Barang: 005-RX701382-12):\n"
"Area: Gudang Belakang - Ruang Casting\n"
"Lemari A: Kuantiti 100 (Kondisi: Mentah)\n"
"Lemari G: Kuantiti 100 (Kondisi: Mentah)\n"
"Area: Gudang Belakang - Ruang Forged\n"
"Lemari B7: Kuantiti 51 (Kondisi: Mentah)\n"
"Total keseluruhan stok yang tercatat adalah 251."
)
def test_build_exact_read_answer_asks_for_clarification_when_multiple_rows_found() -> None:
rows = [
SheetRow(sheet_name="Stok", row_number=2, values={"Produk": "Oli MPX 0.8L"}),
SheetRow(sheet_name="Stok", row_number=3, values={"Produk": "Oli MPX 1L"}),
]
answer = build_exact_read_answer("oli mpx yang mana?", "Stok", rows)
assert "- Oli MPX 0.8L" in answer
assert "- Oli MPX 1L" in answer
def test_build_exact_read_answer_returns_not_found_message() -> None:
answer = build_exact_read_answer("status invoice INV-009 apa?", "Invoice", [])
assert answer == "data belum ketemu, pren."
def test_build_exact_read_answer_returns_yes_for_multiple_existence_matches() -> None:
rows = [
SheetRow(sheet_name="Booking", row_number=2, values={"Nama": "Budi", "Status": "Booking"}),
SheetRow(sheet_name="Booking", row_number=3, values={"Nama": "Budi Santoso", "Status": "Booking"}),
]
answer = build_exact_read_answer("ada booking atas nama Budi?", "Booking", rows)
assert answer == "ada, pren."