Ctrl K
ComunidadGuías…

frontend/e2e/follow-manage-cache.test.ts

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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() }
  });
});