From 1aa4fab6d80baffbb35620cc086b918c4b7096ce Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Tue, 16 Jun 2026 20:40:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=9D=9E=E7=BE=8E=E5=9B=BD?= =?UTF-8?q?=E6=9C=BA=E5=9C=BA=E8=A7=82=E6=B5=8B=E6=A0=87=E7=AD=BE=E5=9B=9E?= =?UTF-8?q?=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/temperatureChartData.test.ts | 29 +++++++++++++++++++ .../scan-terminal/temperature-chart-logic.ts | 6 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/frontend/components/dashboard/scan-terminal/__tests__/temperatureChartData.test.ts b/frontend/components/dashboard/scan-terminal/__tests__/temperatureChartData.test.ts index 05a4847d..b122c1b2 100644 --- a/frontend/components/dashboard/scan-terminal/__tests__/temperatureChartData.test.ts +++ b/frontend/components/dashboard/scan-terminal/__tests__/temperatureChartData.test.ts @@ -542,6 +542,35 @@ export function runTests() { "NOAA MADIS label should be reserved for US airports; non-US airport-primary fallback should use METAR wording", ); + const parisImplicitAirportPrimaryChart = buildFullDayChartData( + { + city: "paris", + local_date: "2026-06-16", + local_time: "14:24", + tz_offset_seconds: 2 * 60 * 60, + airport: "LFPB", + temp_symbol: "°C", + } as any, + { + localDate: "2026-06-16", + localTime: "14:24", + times: ["00:00", "12:00", "18:00"], + temps: [14, 20, 18], + airportPrimary: { + temp: 20.0, + obs_time: "2026-06-16T12:24:00Z", + }, + airportPrimaryTodayObs: [["2026-06-16T12:00:00Z", 20.0]], + metarTodayObs: [["2026-06-16T12:00:00Z", 20.0]], + } as any, + false, + ); + const parisImplicitAirportPrimarySeries = parisImplicitAirportPrimaryChart.series.find((item) => item.key === "madis"); + assert( + parisImplicitAirportPrimarySeries?.label === "LFPB METAR", + "non-US airport-primary fallback without explicit source metadata must not default to NOAA MADIS", + ); + const ankaraScanSeedChart = buildFullDayChartData( { city: "ankara", diff --git a/frontend/components/dashboard/scan-terminal/temperature-chart-logic.ts b/frontend/components/dashboard/scan-terminal/temperature-chart-logic.ts index dcdc459b..83c7a033 100644 --- a/frontend/components/dashboard/scan-terminal/temperature-chart-logic.ts +++ b/frontend/components/dashboard/scan-terminal/temperature-chart-logic.ts @@ -892,8 +892,10 @@ function airportPrimarySeriesLabel( } const payloadLabel = String(hourly?.airportPrimary?.source_label || "").trim(); if (payloadLabel && !isGenericAirportPrimaryLabel(payloadLabel)) return payloadLabel; - if (canonicalLabel === "NOAA MADIS" && !isUsAirportCode(airportCodeForSeriesLabel(hourly, row))) { - const stationCode = airportCodeForSeriesLabel(hourly, row); + const stationCode = airportCodeForSeriesLabel(hourly, row); + const isUsAirport = isUsAirportCode(stationCode); + if (!isUsAirport) { + if (canonicalLabel && canonicalLabel !== "NOAA MADIS") return canonicalLabel; return stationCode ? `${stationCode} METAR` : "METAR"; } return canonicalLabel || payloadLabel || "NOAA MADIS";