修正非美国机场观测标签回退

This commit is contained in:
2569718930@qq.com
2026-06-16 20:40:49 +08:00
parent 135198e161
commit 1aa4fab6d8
2 changed files with 33 additions and 2 deletions
@@ -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",
@@ -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";