feat: sync latest ARR implementation

This commit is contained in:
Wyndham ARR
2026-07-31 15:11:42 +08:00
parent d6f8a747fa
commit bf7939dd1a
185 changed files with 17527 additions and 2260 deletions

View File

@@ -134,9 +134,11 @@ class FakeBuilder:
def __init__(self, failing_company: Optional[str] = None):
self.failing_company = failing_company
self.companies = []
self.reports = []
def build(self, report, work_dir: Path) -> BuiltWorkbook:
self.companies.append(report.company)
self.reports.append(report)
if report.company == self.failing_company:
raise BuildError(
ErrorCode.OUTPUT_VALIDATION_FAILED,
@@ -180,8 +182,16 @@ class FakePublisher:
class CompanyReportServiceTests(unittest.TestCase):
def test_invalid_company_is_isolated_while_valid_company_succeeds(self):
repository = FakeRepository(synthetic_snapshot(include_invalid_hana=True))
def test_missing_and_unmatched_group_codes_succeed_with_blank_booking_room(self):
source_snapshot = synthetic_snapshot(include_invalid_hana=True)
repository = FakeRepository(
BatchSnapshot(
facts=source_snapshot.facts,
room_items=(),
daily_versions=source_snapshot.daily_versions,
group_parse_versions={},
)
)
builder = FakeBuilder()
publisher = FakePublisher()
with tempfile.TemporaryDirectory(prefix="company-report-service-test-") as temp_dir:
@@ -200,12 +210,20 @@ class CompanyReportServiceTests(unittest.TestCase):
)
)
self.assertEqual(result.status, "partial_failure")
self.assertEqual(result.exit_code, 2)
self.assertEqual([item.status for item in result.companies], ["success", "failed"])
self.assertEqual(builder.companies, ["QBD"])
self.assertEqual(publisher.companies, ["QBD"])
self.assertEqual(result.companies[1].errors[0]["code"], ErrorCode.GROUP_CODE_MISSING)
self.assertEqual(result.status, "success")
self.assertEqual(result.exit_code, 0)
self.assertEqual([item.status for item in result.companies], ["success", "success"])
self.assertEqual(builder.companies, ["QBD", "HanaTour"])
self.assertEqual(publisher.companies, ["QBD", "HanaTour"])
qbd_report, hana_report = builder.reports
self.assertEqual(qbd_report.row_count, 1)
self.assertEqual(qbd_report.periods[0].rows[0].res_comment, "SYN-GROUP-A")
self.assertEqual(qbd_report.periods[0].rows[0].booking_room, "")
self.assertEqual(hana_report.row_count, 1)
self.assertEqual(hana_report.periods[0].rows[0].res_comment, "")
self.assertEqual(hana_report.periods[0].rows[0].booking_room, "")
self.assertEqual(result.companies[0].errors, ())
self.assertEqual(result.companies[1].errors, ())
serialized = json.dumps(result.to_dict(), ensure_ascii=False)
self.assertNotIn("SYN-GROUP-A", serialized)
self.assertNotIn("SYN-BLOCK", serialized)