frontend/e2e/follow-manage-cache.test.ts
Rama master · réplica de lectura del repositorio original.
import assert from 'node:assert/strict';
import { after, before, describe, it } from 'node:test';
import type { Browser } from 'playwright-core';
import { followSource, openFollowManage } from './design-fixture.ts';
import { launch, VIEWPORTS } from './harness.ts';
describe('关注失败来源重试', () => {
let browser: Browser;
before(async () => { browser = await launch() });
after(async () => { await browser.close() });
for (const viewport of VIEWPORTS) it(`${viewport.name}:只重试启用的失败来源,成功后隐藏入口`, async () => {
const paused = { ...followSource(5, 'paused', 'Kemono', 'paused', 'error'), enabled: false };
const opened = await openFollowManage(browser, viewport, { extra: [
followSource(4, 'login', 'FANBOX', 'login', 'unauthorized'), paused,
] });
try {
const page = opened.page;
const requests: unknown[] = [];
let started = false;
const json = (body: unknown) => ({ status: 200, contentType: 'application/json', body: JSON.stringify(body) });
await page.route('**/api/follow/check', route => {
if (route.request().method() === 'POST') {
requests.push(route.request().postDataJSON());
started = true;
return route.fulfill(json({ status: 'running', job_id: 'retry', total: 2, checked: 0 }));
}
return route.fulfill(json(started ? { status: 'complete', job_id: 'retry', total: 2, checked: 2,
results: [{ source: 3, ok: true }, { source: 4, ok: true }] } : { status: 'idle' }));
});
await page.route('**/api/follow?summary=1', route => started ? route.fulfill(json({
sources: [followSource(1, 'kou', 'Kemono', 'kou'), paused], counts: {}, author_aliases: [], suggestions: [],
})) : route.fallback());
const retry = page.getByRole('button', { name: '检查失败项', exact: true });
await retry.waitFor();
await retry.focus();
await retry.press('Enter');
await retry.waitFor({ state: 'hidden', timeout: 15_000 });
assert.deepEqual(requests, [{ background: true, sources: [3, 4] }]);
assert.equal(await page.evaluate(() => document.documentElement.scrollWidth > innerWidth), false);
await page.getByRole('button', { name: '检查全部', exact: true }).waitFor();
} finally { await opened.close() }
});
});