Improve scan decision card hydration
This commit is contained in:
+14
@@ -123,6 +123,20 @@ export function runTests() {
|
||||
assert.equal(errorState.payload?.status, "timeout_fallback");
|
||||
assert.match(errorState.payload?.reason_zh || "", /DeepSeek|DEB|METAR/);
|
||||
|
||||
const modelFallbackState = buildAiCityErrorForecastState({
|
||||
cacheKey: `${cacheKey}:models`,
|
||||
detail: cityDetail({
|
||||
deb: { prediction: 29 },
|
||||
multi_model: { ECMWF: 30, GFS: 32, ICON: 31 },
|
||||
} as unknown as Partial<CityDetail>),
|
||||
error: new Error("timeout"),
|
||||
isEn: false,
|
||||
report: "",
|
||||
});
|
||||
assert.equal(modelFallbackState.payload?.city_forecast?.predicted_max, 31);
|
||||
assert.equal(modelFallbackState.payload?.city_forecast?.range_low, 30);
|
||||
assert.equal(modelFallbackState.payload?.city_forecast?.range_high, 32);
|
||||
|
||||
const hkoState = buildAiCityErrorForecastState({
|
||||
cacheKey: `${cacheKey}:hko`,
|
||||
detail: cityDetail({
|
||||
|
||||
+23
@@ -14,7 +14,17 @@ export function runTests() {
|
||||
"scan-terminal",
|
||||
"use-ai-pinned-city-workspace.ts",
|
||||
);
|
||||
const storePath = path.join(projectRoot, "hooks", "useDashboardStore.tsx");
|
||||
const cardPath = path.join(
|
||||
projectRoot,
|
||||
"components",
|
||||
"dashboard",
|
||||
"scan-terminal",
|
||||
"AiPinnedCityCard.tsx",
|
||||
);
|
||||
const source = fs.readFileSync(workspacePath, "utf8");
|
||||
const storeSource = fs.readFileSync(storePath, "utf8");
|
||||
const cardSource = fs.readFileSync(cardPath, "utf8");
|
||||
|
||||
assert(
|
||||
!source.includes("waitForDeepAnalysisQueue"),
|
||||
@@ -24,4 +34,17 @@ export function runTests() {
|
||||
/store\.ensureCityDetail\(\s*nextCity,\s*false,\s*"full",?\s*\)/.test(source),
|
||||
"automatic deep analysis hydration should use cache-friendly full detail requests",
|
||||
);
|
||||
assert(
|
||||
storeSource.includes("row.model_cluster_sources") &&
|
||||
storeSource.includes("deb_prediction") &&
|
||||
storeSource.includes("multi_model: multiModel"),
|
||||
"decision-card preload must hydrate model cluster and DEB data from the scan row",
|
||||
);
|
||||
assert(
|
||||
cardSource.includes("getRowModelEntries") &&
|
||||
cardSource.includes("row?.ai_predicted_max") &&
|
||||
cardSource.includes("row?.cluster_median") &&
|
||||
cardSource.includes("detailModelEntries.length ? detailModelEntries : getRowModelEntries(row)"),
|
||||
"decision card should render model support and AI predicted max from the row before full detail/AI stream arrives",
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user