Files
wyndham-ARR/tests/test_monthly_reports_xlsx.py
2026-08-04 12:37:26 +08:00

94 lines
3.0 KiB
Python

from __future__ import annotations
import tempfile
import unittest
from datetime import date
from decimal import Decimal
from pathlib import Path
from openpyxl import load_workbook
from monthly_reports.contracts import (
ChannelObservation,
DailyVersionPin,
MonthlyFact,
MonthlySnapshot,
)
from monthly_reports.core import build_monthly_report
from monthly_reports.publishing import OpenpyxlWorkbookBuilder
def report_fixture():
source = MonthlyFact(
daily_record_id=1,
daily_version_id=100,
business_date=date(2026, 7, 8),
channel_key="QBD",
arrival=date(2026, 7, 8),
departure=date(2026, 7, 10),
nights=2,
adults=2,
children=0,
block_code="=SYN-FORMULA-LIKE",
no_of_rooms=1,
company_name="SYN-COMPANY",
confirmation_no="SYN-CONFIRMATION",
disp_room_no="SYN-ROOM",
effective_rate_amount=Decimal("450.50"),
full_name="SYN-GUEST",
res_comment="SYN-COMMENT",
trace_text="",
products="",
rate_code="SYN-RATE",
room_category_label="SYN-TYPE",
real_price=Decimal("450.50"),
total_price=Decimal("901.00"),
kb_amount=None,
)
return build_monthly_report(
2026,
7,
date(2026, 7, 8),
MonthlySnapshot(
(source,),
(DailyVersionPin(date(2026, 7, 8), 100),),
(ChannelObservation(date(2026, 7, 8), 100, "QBD", 1, 1),),
),
)
class MonthlyReportsXlsxTests(unittest.TestCase):
def test_openpyxl_builder_reopens_checks_formulas_and_semantic_identity(self):
report = report_fixture()
with tempfile.TemporaryDirectory(prefix="monthly-report-xlsx-") as temp_dir:
built = OpenpyxlWorkbookBuilder().build(report, Path(temp_dir))
self.assertTrue(built.path.is_file())
self.assertEqual(built.path.stat().st_mode & 0o777, 0o600)
self.assertEqual(built.summary["sheet_names"][:5], [
"LIANTAI-GROUP", "LIANTAI-FIT", "QBD", "DY-AI-Easy-KB", "FENGRUN"
])
self.assertEqual(built.summary["row_counts"], [0, 0, 1, 0, 0])
self.assertEqual(built.summary["formula_count"], 1)
self.assertEqual(built.summary["preview_count"], 5)
self.assertEqual(len(built.summary["semantic_sha256"]), 64)
workbook = load_workbook(built.path, data_only=False, read_only=True)
try:
self.assertEqual(workbook["QBD"]["S2"].value, "=R2*C2*G2")
self.assertEqual(workbook["QBD"]["F2"].value, "'=SYN-FORMULA-LIKE")
formulas = [
cell.value
for sheet in workbook.worksheets
for row in sheet.iter_rows()
for cell in row
if cell.data_type == "f"
]
self.assertEqual(formulas, ["=R2*C2*G2"])
finally:
workbook.close()
if __name__ == "__main__":
unittest.main()