161 lines
6.1 KiB
JavaScript
161 lines
6.1 KiB
JavaScript
/**
|
|
* 认证摘要必须保留接口状态,不能把所有非零状态都视为认证通过。
|
|
* 原有回归缺口:首页与实名认证页面此前未使用相同的失败、已提交、审核中响应进行对照验收。
|
|
* 仅替换外部 HTTP 后端;登录、首页卡片、实名认证路由与认证表单均使用实际实现。
|
|
*/
|
|
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import {
|
|
appOrigin,
|
|
backendOrigin,
|
|
eventually,
|
|
login,
|
|
scenario,
|
|
} from "./helpers/console-browser.mjs";
|
|
|
|
const states = [
|
|
{ name: "failed", status: "2", summary: /未通过|失败/, application: true },
|
|
{ name: "submitted", status: "4", summary: /待核验/, continuation: true },
|
|
{ name: "under review", status: "3", summary: /待审核|审核中/ },
|
|
{ name: "approved", status: "1", approved: true },
|
|
{ name: "not applied", status: "0", application: true },
|
|
{ name: "without records", application: true },
|
|
];
|
|
|
|
for (const state of states)
|
|
test(
|
|
`home and real-name actions agree when certification is ${state.name}`,
|
|
{ timeout: 30000 },
|
|
(t) =>
|
|
scenario(t, {}, async (page) => {
|
|
const requests = [];
|
|
await page
|
|
.context()
|
|
.route(`${backendOrigin}/console/v1/certification/**`, (route) => {
|
|
const request = route.request();
|
|
requests.push({
|
|
method: request.method(),
|
|
path: new URL(request.url()).pathname,
|
|
authenticated: Boolean(request.headers().authorization),
|
|
});
|
|
if (!request.url().endsWith("/info")) return route.fallback();
|
|
return route.fulfill({
|
|
json: {
|
|
status: 200,
|
|
msg: "",
|
|
data: {
|
|
certification_open: 1,
|
|
certification_company_open: 1,
|
|
certification_company_need_person: 0,
|
|
certification_upload: 0,
|
|
is_certification: state.approved ? 1 : 0,
|
|
...(state.status === undefined
|
|
? {}
|
|
: {
|
|
person: {
|
|
status: state.status,
|
|
card_name: "本地认证用户",
|
|
auth_fail: state.status === "2" ? "本地驳回原因" : "",
|
|
},
|
|
company: {
|
|
status: state.status,
|
|
company: "本地认证企业",
|
|
auth_fail: state.status === "2" ? "本地驳回原因" : "",
|
|
},
|
|
}),
|
|
},
|
|
},
|
|
headers: { "Access-Control-Allow-Origin": "*" },
|
|
});
|
|
});
|
|
await login(page, "/");
|
|
const tile = (label) =>
|
|
page.locator(".tile").filter({
|
|
has: page.locator("dt").getByText(label, { exact: true }),
|
|
});
|
|
const person = tile("实名认证");
|
|
const company = tile("组织机构认证");
|
|
await eventually(
|
|
() => person.locator("dd").innerText(),
|
|
(text) => text.trim().length > 0,
|
|
"The certification summary must finish loading",
|
|
);
|
|
const home = {
|
|
person: await person.locator("dd").innerText(),
|
|
company: await company.locator("dd").innerText(),
|
|
};
|
|
if (state.summary) {
|
|
assert.match(home.person, state.summary);
|
|
assert.match(home.company, state.summary);
|
|
} else if (state.approved) {
|
|
assert.equal(await person.getByRole("button").count(), 1);
|
|
assert.equal(await company.getByRole("button").count(), 1);
|
|
assert.doesNotMatch(home.company, /去认证|未通过|待审核|待核验/);
|
|
} else {
|
|
assert.equal(
|
|
await person.getByRole("link", { name: "去认证" }).count(),
|
|
1,
|
|
);
|
|
assert.equal(
|
|
await company.getByRole("link", { name: "去认证" }).count(),
|
|
1,
|
|
);
|
|
}
|
|
|
|
if (state.application && state.status !== "2")
|
|
await person.getByRole("link", { name: "去认证" }).click();
|
|
else await page.goto(`${appOrigin}/account/realname`);
|
|
const personApplication = page.getByPlaceholder("请输入真实姓名", {
|
|
exact: true,
|
|
});
|
|
const continuePerson = page.getByRole("button", {
|
|
name: "继续扫码核验",
|
|
exact: true,
|
|
});
|
|
const continueCompany = page.getByRole("button", {
|
|
name: "继续企业核验",
|
|
exact: true,
|
|
});
|
|
if (state.application) {
|
|
await personApplication.waitFor();
|
|
await page
|
|
.getByRole("tab", { name: "企业认证", exact: true })
|
|
.click();
|
|
await page.getByPlaceholder("营业执照上的企业全称").waitFor();
|
|
} else if (state.continuation) {
|
|
await continuePerson.waitFor();
|
|
assert.equal(await continuePerson.isEnabled(), true);
|
|
assert.equal(await continueCompany.isEnabled(), true);
|
|
assert.equal(await personApplication.count(), 0);
|
|
} else {
|
|
await page
|
|
.getByText(
|
|
state.approved
|
|
? "已完成实名认证"
|
|
: "资料正在审核,请等待审核结果。",
|
|
{
|
|
exact: true,
|
|
},
|
|
)
|
|
.waitFor();
|
|
assert.equal(await personApplication.count(), 0);
|
|
assert.equal(await continuePerson.count(), 0);
|
|
assert.equal(await continueCompany.count(), 0);
|
|
}
|
|
assert.equal(requests.length, 2);
|
|
assert.ok(requests.every((request) => request.authenticated));
|
|
assert.ok(
|
|
requests.every(
|
|
(request) =>
|
|
request.method === "GET" && request.path.endsWith("/info"),
|
|
),
|
|
);
|
|
return {
|
|
home,
|
|
applicationAvailable: Boolean(state.application),
|
|
verificationContinuationAvailable: Boolean(state.continuation),
|
|
authenticatedReadOnlyCertificationRequests: requests,
|
|
};
|
|
}),
|
|
);
|