Bot & Automation
jorgasisten
/root/hermes-projects/jorgasisten
tests/test_bot_sheet_templates.py
text
from jorgasisten.bot.main import (
ACTION_ADD,
ACTION_DELETE,
ACTION_QUERY,
ACTION_SUMMARY,
ACTION_UPDATE,
PendingTemplateContext,
build_pending_template_decision,
build_sheet_action_template,
)
def test_add_template_uses_real_headers() -> None:
message = build_sheet_action_template(
"Produk",
["Nama Produk", "Harga", "Stok"],
[{"Nama Produk": "Oli MPX", "Harga": "50000", "Stok": "12"}],
["Nama Website / Proyek : Johan Garage | Periode : 2026"],
{"Status": ["Belum", "Selesai"]},
ACTION_ADD,
)
assert "tambah data ke sheet Produk" in message
assert "- Nama Produk:" in message
assert "- Harga:" in message
assert "- Stok:" in message
assert "Oli MPX" in message
assert "contoh isi data yang sudah ada" in message
assert "Johan Garage" not in message
assert "Status: Belum, Selesai" in message
assert "isi nilai setelah titik dua aja" in message
def test_update_template_has_target_and_new_data_sections() -> None:
message = build_sheet_action_template(
"Booking",
["Nama", "WA", "Motor", "Status"],
[],
[],
{},
ACTION_UPDATE,
)
assert "update data di sheet Booking" in message
assert "target:" in message
assert "data baru:" in message
assert "- Nama:" in message
assert "- Status:" in message
def test_query_delete_and_summary_templates_cover_expected_sections() -> None:
query_message = build_sheet_action_template("Produk", ["SKU", "Nama Produk"], [], [], {}, ACTION_QUERY)
delete_message = build_sheet_action_template("Produk", ["SKU", "Nama Produk"], [], [], {}, ACTION_DELETE)
summary_message = build_sheet_action_template("Produk", ["SKU", "Nama Produk"], [], [], {}, ACTION_SUMMARY)
assert "cari data di sheet Produk" in query_message
assert "hapus data di sheet Produk" in delete_message
assert "ringkas sheet Produk" in summary_message
def test_template_warns_when_sheet_has_no_headers() -> None:
message = build_sheet_action_template("Kosong", [], [], [], {}, ACTION_ADD)
assert "belum punya header kolom" in message
def test_pending_add_template_decision_reads_structured_fields() -> None:
decision = build_pending_template_decision(
"tambah data ke sheet Produk\n- Nama Produk: Oli MPX\n- Harga: 50000\n- Stok: 12",
PendingTemplateContext(
action=ACTION_ADD,
spreadsheet_id="sheet-123",
sheet_name="Produk",
headers=["Nama Produk", "Harga", "Stok"],
),
)
assert decision is not None
assert decision.operation == "create"
assert decision.sheet_name == "Produk"
assert decision.data == {"Nama Produk": "Oli MPX", "Harga": "50000", "Stok": "12"}