@@ -214,6 +214,33 @@ def test_overview_up_to_date_reason_shows_green(self):
214214 self .assertEqual (overview [0 ]["days_behind" ], 0 )
215215 self .assertEqual (overview [0 ]["status_color" ], "green" )
216216
217+ def test_overview_stale_cache_degrades_to_today (self ):
218+ """缓存的 API 日期超过宽限期后,降级回 today 比较。
219+
220+ 回归测试:防止长期未同步的产品永远显示绿色。
221+ """
222+ self ._write_timestamp ("stock-trading-data" , "2026-03-10" )
223+ self ._write_report ("run_report_20260310_update.json" , [
224+ {"product" : "stock-trading-data" , "status" : "ok" , "reason_code" : "ok" ,
225+ "error" : "" , "date_time" : "2026-03-10" },
226+ ])
227+
228+ import unittest .mock
229+ with unittest .mock .patch (
230+ "quantclass_sync_internal.data_query.report_dir_path" ,
231+ return_value = self .log_dir ,
232+ ):
233+ # 4 天后查看(超出 3 天宽限期),应降级回 today
234+ overview = get_products_overview (
235+ self .data_root ,
236+ ["stock-trading-data" ],
237+ today = date (2026 , 3 , 14 ),
238+ )
239+
240+ # today - local = 4 天,应显示红色
241+ self .assertEqual (overview [0 ]["days_behind" ], 4 )
242+ self .assertEqual (overview [0 ]["status_color" ], "red" )
243+
217244 def test_overview_with_error_product (self ):
218245 """产品上次失败时应为红色。"""
219246 self ._write_timestamp ("stock-fin-data-xbx" , "2026-03-13" )
0 commit comments