From b06e0e8d13ffcd271cabe3ace9b4b019bcdd7128 Mon Sep 17 00:00:00 2001 From: martino <32328813+f3rs3n@users.noreply.github.com> Date: Tue, 22 Sep 2026 19:18:23 +0200 Subject: [PATCH] fix: honor idle and excluded temperature availability --- AppImage/components/storage-overview.tsx | 3 ++- AppImage/tests/storage-temperature-summary.cjs | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/AppImage/components/storage-overview.tsx b/AppImage/components/storage-overview.tsx index b24fe712..2a4fa823 100644 --- a/AppImage/components/storage-overview.tsx +++ b/AppImage/components/storage-overview.tsx @@ -975,7 +975,8 @@ export function StorageOverview() { let unavailable = 0 storageData.disks.forEach((disk) => { - if (disk.standby || typeof disk.temperature !== "number" || + // Match disk rows: policy-suppressed cached readings are not live temperatures. + if (disk.standby || disk.idle || disk.excluded || typeof disk.temperature !== "number" || !Number.isFinite(disk.temperature) || disk.temperature <= 0) { unavailable++ return diff --git a/AppImage/tests/storage-temperature-summary.cjs b/AppImage/tests/storage-temperature-summary.cjs index 28a9df01..b5043329 100644 --- a/AppImage/tests/storage-temperature-summary.cjs +++ b/AppImage/tests/storage-temperature-summary.cjs @@ -74,6 +74,15 @@ const fixtures = [ [[disk(30)], ['Temperatures normal'], 'green'], [[disk(30),disk(35)], ['Temperatures normal'], 'green'], [[disk(0)], ['Temperatures unavailable','Unavailable: 1'], 'neutral'], + // /api/storage can pair cached positive SMART values with current policy flags. + [[{...disk(30),excluded:true}], ['Temperatures unavailable','Unavailable: 1'], 'neutral'], + [[{...disk(90),excluded:true}], ['Temperatures unavailable','Unavailable: 1'], 'neutral'], + [[disk(30),{...disk(90),excluded:true}], ['Temperature data incomplete','Unavailable: 1'], 'neutral'], + [[disk(60),{...disk(90),excluded:true},{...disk(90),idle:true}], ['High temperatures: 1','Unavailable: 2'], 'yellow'], + [[disk(65),{...disk(90),excluded:true,idle:true,standby:true}], ['Critical temperatures: 1','Unavailable: 1'], 'red'], + [[{...disk(30),idle:true}], ['Temperatures unavailable','Unavailable: 1'], 'neutral'], + [[{...disk(90),idle:true}], ['Temperatures unavailable','Unavailable: 1'], 'neutral'], + [[disk(30),{...disk(90),idle:true}], ['Temperature data incomplete','Unavailable: 1'], 'neutral'], [[disk(0),{...disk(90),standby:true}], ['Temperatures unavailable','Unavailable: 2'], 'neutral'], [[disk(30),disk(0)], ['Temperature data incomplete','Unavailable: 1'], 'neutral'], [[disk(60),disk(0)], ['High temperatures: 1','Unavailable: 1'], 'yellow'], @@ -83,6 +92,8 @@ for (const [disks,messages,tone] of fixtures) { const html = render(disks); for(const message of messages) assert.ok(html.includes(message), `actual JSX: ${message}`); assert.equal(html.includes('text-green-500'),tone==='green'); + assert.equal(html.includes('High temperatures:'), messages.some(message => message.startsWith('High temperatures:')), 'suppressed readings cannot add warning alerts'); + assert.equal(html.includes('Critical temperatures:'), messages.some(message => message.startsWith('Critical temperatures:')), 'suppressed readings cannot add critical alerts'); if(tone !== 'neutral') assert.ok(html.includes(`text-${tone}-500`)); assert.ok(!html.includes('all healthy')); }