You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.0 KiB
74 lines
2.0 KiB
import { describe, expect, it } from "vitest";
|
|
import {
|
|
analyzeFlockHarEntries,
|
|
scoreFlockQuoteCandidate,
|
|
verdictFromCandidates,
|
|
type FlockHarEntry,
|
|
} from "@/lib/flock/har-analyze";
|
|
|
|
describe("flock har-analyze", () => {
|
|
it("高分匹配类似 axel 的 quote JSON", () => {
|
|
const score = scoreFlockQuoteCandidate({
|
|
url: "https://api.flockfreight.com/v1/quote",
|
|
method: "POST",
|
|
status: 200,
|
|
mimeType: "application/json",
|
|
responseText: JSON.stringify({
|
|
rates: [
|
|
{ label: "FlockDirect", price: 2300 },
|
|
{ label: "Standard", price: 800 },
|
|
],
|
|
}),
|
|
});
|
|
expect(score).toBeGreaterThanOrEqual(10);
|
|
});
|
|
|
|
it("过滤静态与埋点", () => {
|
|
expect(
|
|
scoreFlockQuoteCandidate({
|
|
url: "https://www.googletagmanager.com/gtm.js",
|
|
method: "GET",
|
|
status: 200,
|
|
mimeType: "application/javascript",
|
|
responseText: "gtm",
|
|
}),
|
|
).toBe(0);
|
|
});
|
|
|
|
it("从 HAR entries 选出候选并裁决", () => {
|
|
const entries: FlockHarEntry[] = [
|
|
{
|
|
request: {
|
|
method: "POST",
|
|
url: "https://app.flockfreight.com/api/quotes",
|
|
},
|
|
response: {
|
|
status: 200,
|
|
content: {
|
|
mimeType: "application/json",
|
|
text: JSON.stringify({
|
|
flockDirect: { total: 1999 },
|
|
standard: { total: 777 },
|
|
reference: "FRG-1",
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
request: {
|
|
method: "GET",
|
|
url: "https://cdn.example.com/app.js",
|
|
},
|
|
response: { status: 200, content: { mimeType: "application/javascript" } },
|
|
},
|
|
];
|
|
const cands = analyzeFlockHarEntries(entries);
|
|
expect(cands.length).toBeGreaterThanOrEqual(1);
|
|
expect(verdictFromCandidates(cands)).toBe("stable_json_quote_api_found");
|
|
});
|
|
|
|
it("无候选时裁决为 dom_only", () => {
|
|
expect(verdictFromCandidates([])).toBe("no_quote_json_api_dom_only");
|
|
});
|
|
});
|