45 lines
2.7 KiB
JavaScript
45 lines
2.7 KiB
JavaScript
import { test, expect } from "@playwright/test";
|
|
|
|
const core = "http://localhost:17324";
|
|
const errors = new WeakMap();
|
|
async function control(request, data) { expect((await request.post(core + "/__test/control", { data })).ok()).toBe(true); }
|
|
|
|
test.beforeEach(async ({ page, request }) => {
|
|
expect((await request.post(core + "/__test/reset")).ok()).toBe(true);
|
|
errors.set(page, []);
|
|
page.on("pageerror", error => errors.get(page).push(error.message));
|
|
});
|
|
test.afterEach(async ({ page }) => {
|
|
expect(errors.get(page)).toEqual([]);
|
|
expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
|
|
});
|
|
|
|
test("search failures retain controls and recover after a revised query", async ({ page, request }) => {
|
|
for (const [status, heading] of [[504, "这次检索耗时较长"], [429, "论文索引正在处理较多请求"], [503, "论文暂时无法读取"], [400, "请调整搜索条件"]]) {
|
|
await control(request, { paperStatus: status });
|
|
await page.goto("/?q=original&topic=cs.LG&searchIn=author");
|
|
await expect(page.getByRole("heading", { name: heading, exact: true })).toBeVisible();
|
|
await expect(page.getByRole("textbox", { name: "搜索论文", exact: true })).toHaveValue("original");
|
|
await expect(page.getByLabel("搜索范围")).toHaveValue("author");
|
|
await expect(page.locator('.search-form input[name="topic"]')).toHaveValue("cs.LG");
|
|
await expect(page.locator(".index-heading h2 span, .pagination, .sample-note")).toHaveCount(0);
|
|
await expect(page.getByRole("heading", { name: "没有找到符合条件的论文" })).toHaveCount(0);
|
|
await expect(page.getByRole("link", { name: "重新尝试", exact: true })).toHaveAttribute("href", /q=original/);
|
|
}
|
|
await control(request, { paperStatus: 0 });
|
|
await page.setViewportSize({ width: 390, height: 844 });
|
|
await page.getByRole("textbox", { name: "搜索论文", exact: true }).fill("revised query");
|
|
await page.getByRole("button", { name: "搜索论文", exact: true }).click();
|
|
await expect(page).toHaveURL(/q=revised\+query/);
|
|
await expect(page.locator(".paper-row")).toHaveCount(8);
|
|
await expect(page.locator(".paper-index [role=alert]")).toHaveCount(0);
|
|
});
|
|
|
|
test("malformed research responses do not become empty results or sample mode", async ({ page, request }) => {
|
|
await control(request, { paperMalformed: true });
|
|
await page.goto("/?q=keep-this-query");
|
|
await expect(page.getByRole("heading", { name: "论文暂时无法读取", exact: true })).toBeVisible();
|
|
await expect(page.getByRole("textbox", { name: "搜索论文", exact: true })).toHaveValue("keep-this-query");
|
|
await expect(page.locator(".paper-row, .sample-note, .index-heading h2 span, .pagination")).toHaveCount(0);
|
|
});
|