Files
ewoooc/tests/test_daily_sales_excel_detection.py
OoO 55e14c0332
All checks were successful
CD Pipeline / deploy (push) Successful in 9m17s
V10.605 修復當日業績匯入與資料庫備份
2026-06-15 14:52:33 +08:00

78 lines
2.9 KiB
Python

import pandas as pd
import pytest
from services.import_service import (
_read_daily_sales_excel,
_should_quarantine_failed_import,
)
def test_daily_sales_reader_prefers_detail_sheet_over_summary_sheets(tmp_path):
workbook = tmp_path / "即時業績_當日.xlsx"
with pd.ExcelWriter(workbook, engine="openpyxl") as writer:
pd.DataFrame([
[None, None, None, None],
[None, None, None, None],
["列標籤", "加總 - 總業績", "加總 - 總成本", "加總 - 折扣金額"],
["保健", "100", "60", "5"],
]).to_excel(writer, sheet_name="工作表1", header=False, index=False)
pd.DataFrame({
"列標籤": ["A"],
"商品名稱": ["彙總商品"],
"銷售網頁ID": ["P001"],
"加總 - 總業績": ["300"],
}).to_excel(writer, sheet_name="工作表2", index=False)
pd.DataFrame({
"狀態": ["完成"],
"日期": ["2026-06-14"],
"商品ID": ["SKU001"],
"商品名稱": ["專業測試商品"],
"數量": ["1"],
"總業績": ["1200"],
}).to_excel(writer, sheet_name="即時業績明細", index=False)
df, metadata = _read_daily_sales_excel(str(workbook))
assert metadata["sheet_name"] == "即時業績明細"
assert metadata["header_row"] == 1
assert metadata["date_col"] == "日期"
assert list(df["商品名稱"]) == ["專業測試商品"]
def test_daily_sales_reader_scans_header_rows(tmp_path):
workbook = tmp_path / "header-offset.xlsx"
with pd.ExcelWriter(workbook, engine="openpyxl") as writer:
pd.DataFrame([
["報表產製時間", "2026-06-14", None],
[None, None, None],
["日期", "商品名稱", "總業績"],
["2026-06-14", "測試商品", "999"],
]).to_excel(writer, sheet_name="即時業績明細", header=False, index=False)
df, metadata = _read_daily_sales_excel(str(workbook))
assert metadata["header_row"] == 3
assert df.iloc[0]["商品名稱"] == "測試商品"
def test_daily_sales_reader_reports_checked_sheets_when_no_candidate(tmp_path):
workbook = tmp_path / "invalid.xlsx"
with pd.ExcelWriter(workbook, engine="openpyxl") as writer:
pd.DataFrame({"Unnamed: 0": ["A"], "Unnamed: 1": ["B"]}).to_excel(
writer,
sheet_name="工作表1",
index=False,
)
with pytest.raises(ValueError) as exc:
_read_daily_sales_excel(str(workbook))
assert "Excel 欄位防禦失敗" in str(exc.value)
assert "工作表1" in str(exc.value)
def test_only_permanent_import_failures_are_quarantined():
assert _should_quarantine_failed_import("Excel 欄位防禦失敗:缺少必要欄位分類")
assert _should_quarantine_failed_import("Excel 日期防禦失敗:明細最大日期 2026-06-10")
assert not _should_quarantine_failed_import("無法從 Google Drive 下載檔案")