A feed's page follows its row after a check (#316)

The header was drawn once, on opening the feed. feed_row put the new row in S.feeds and redrew the
feed list but not the open page, so a check that cleared an error left the error showing, with the
old "checked" time, until the feed was opened again. Seen on Eli Bendersky's website: a connect
timeout at 15:13, a clean forced check at 15:28, and the timeout still on the page.

Only the stat line and the error banner are redrawn: the whole page would close the open item.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 15:37:19 +00:00
parent 0696583547
commit 84b4203daf
4 changed files with 33 additions and 5 deletions

View File

@@ -1906,6 +1906,17 @@ test('a refresh button turns from the press to the end of the scan it asked for'
expect(await spin('#scanAll .i')).toBe('none');
});
test("an open feed's page follows its row: an error a later check clears goes", async ({ page }) => {
// The header was drawn once, on opening, and kept a cleared error until reopened (#316).
await page.locator('.feed', { hasText: 'Test Show' }).click();
const head = page.locator('.fhead .meta');
await page.evaluate(() => patchFeed({ ...S.feeds.find(f => f.id === 'test-show'), last_error: 'connecting: timed out', failing: null }));
await expect(head.locator('.fail')).toHaveText('connecting: timed out');
await page.evaluate(() => patchFeed({ ...S.feeds.find(f => f.id === 'test-show'), last_error: null, entries: 99 }));
await expect(head.locator('.fail')).toHaveCount(0);
await expect(head.locator('.stat')).toContainText('99 items');
});
test.describe('with motion reduced', () => {
test.use({ reducedMotion: 'reduce' });