Add daily report calendar to the header

This commit is contained in:
Wyndham ARR committed 2026-10-09 13:20:13 +08:00
1 parent 2a54838d59
commit 4356160cc9
11 files changed
+735 -28

No files matched your search

+30 -4
View File
@@ -36,17 +36,18 @@ class DailyVisualStaticContractTests(unittest.TestCase):
overview_markup = self.html[overview_start:overview_end]
self.assertIn('id="upload-title"', overview_markup)
self.assertLess(overview_markup.index('id="arr-download-title"'), overview_markup.index('id="upload-title"'))
for metric_id in ('id="metric-arrival"', 'id="metric-duration"', 'id="metric-rooms"'):
for metric_id in ('id="metric-arrival"', 'id="metric-rooms"', 'id="report-calendar"'):
self.assertIn(metric_id, overview_markup)
self.assertLess(overview_markup.index('id="upload-title"'), overview_markup.index('id="metric-arrival"'))
self.assertLess(overview_markup.index('id="metric-arrival"'), overview_markup.index('id="metric-duration"'))
self.assertLess(overview_markup.index('id="metric-duration"'), overview_markup.index('id="metric-rooms"'))
self.assertLess(overview_markup.index('id="metric-arrival"'), overview_markup.index('id="metric-rooms"'))
self.assertLess(overview_markup.index('id="metric-rooms"'), overview_markup.index('id="report-calendar"'))
self.assertNotIn('id="metric-duration"', overview_markup)
self.assertIn(
'class="daily-overview" aria-label="日报处理概览"',
overview_markup,
)
self.assertIn(
".daily-overview { display: grid; grid-template-columns: minmax(240px, 1.25fr) minmax(280px, 1.45fr) repeat(3, minmax(0, .8fr));",
".daily-overview { display: grid; grid-template-columns: minmax(220px, 1.1fr) minmax(230px, 1.15fr) minmax(150px, .75fr) minmax(110px, .55fr) minmax(360px, 1.8fr);",
self.styles,
)
self.assertIn(".daily-overview > .metric-card", self.styles)
@@ -73,6 +74,31 @@ class DailyVisualStaticContractTests(unittest.TestCase):
self.assertIn("min-width: 118px", self.styles)
self.assertNotIn("width: calc(100% - 48px)", self.styles)
def test_report_calendar_has_native_navigation_text_status_and_read_failure_feedback(self) -> None:
start = self.html.index('id="report-calendar"')
end = self.html.index("</section>", start)
calendar = self.html[start:end]
self.assertIn('aria-label="报表日历" aria-describedby="report-calendar-help"', calendar)
self.assertIn('<h2 id="report-calendar-title">报表</h2>', calendar)
for control in ("current", "previous", "next", "retry"):
self.assertRegex(calendar, rf'<button[^>]*id="report-calendar-{control}"[^>]*type="button"')
self.assertIn('id="report-calendar-days" role="group" aria-label="选择日期查看日报"', calendar)
self.assertIn('id="report-calendar-legend-generated">已生成</span>', calendar)
self.assertIn('id="report-calendar-legend-empty">未生成</span>', calendar)
self.assertIn('id="report-calendar-status" role="status" aria-live="polite"', calendar)
self.assertIn('id="report-calendar-retry" type="button" hidden', calendar)
self.assertIn("repeat(7, minmax(0, 1fr))", self.styles)
self.assertIn(".report-calendar button:focus-visible", self.styles)
self.assertIn(".report-calendar button { min-height: 44px;", self.styles)
self.assertIn("@media (min-width: 701px) and (max-width: 1399px)", self.styles)
def test_duration_is_removed_only_from_the_top_overview(self) -> None:
app = (STATIC_ROOT / "app.js").read_text(encoding="utf-8")
self.assertNotIn('id="metric-duration"', self.html)
self.assertNotIn('$("#metric-duration")', app)
self.assertIn("处理耗时", self.html[self.html.index('id="daily-history-title"'):])
self.assertIn('current ? duration(current) : "—"', app)
def test_download_card_exposes_accessible_retrieval_progress_with_reduced_motion(self) -> None:
start = self.html.index('id="arr-acquisition-progress"')
end = self.html.index('<div class="arr-download-actions">', start)