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.
86 lines
2.1 KiB
86 lines
2.1 KiB
import { describe, expect, it } from "vitest";
|
|
import {
|
|
diffHumanRpaNetwork,
|
|
summarizeNetwork,
|
|
type NetworkEvent,
|
|
} from "@/scripts/human-commit-baseline/network-diff";
|
|
|
|
const humanSample: NetworkEvent[] = [
|
|
{
|
|
ts: 100,
|
|
iso: "",
|
|
phase: "page_loaded",
|
|
kind: "request",
|
|
method: "POST",
|
|
url: "https://services.mothership.com/axel/location/search",
|
|
isLocationSearch: true,
|
|
},
|
|
{
|
|
ts: 200,
|
|
iso: "",
|
|
phase: "page_loaded",
|
|
kind: "response",
|
|
method: "POST",
|
|
url: "https://services.mothership.com/axel/location/search",
|
|
status: 200,
|
|
isLocationSearch: true,
|
|
},
|
|
{
|
|
ts: 900,
|
|
iso: "",
|
|
phase: "page_loaded",
|
|
kind: "request",
|
|
method: "GET",
|
|
url: "https://services.mothership.com/axel/location/place/ChIJabc",
|
|
isPlaceCommit: true,
|
|
},
|
|
{
|
|
ts: 1100,
|
|
iso: "",
|
|
phase: "page_loaded",
|
|
kind: "response",
|
|
method: "GET",
|
|
url: "https://services.mothership.com/axel/location/place/ChIJabc",
|
|
status: 200,
|
|
isPlaceCommit: true,
|
|
},
|
|
];
|
|
|
|
const rpaMissingPlace: NetworkEvent[] = [
|
|
{
|
|
ts: 100,
|
|
iso: "",
|
|
phase: "rpa_pickup",
|
|
kind: "request",
|
|
method: "POST",
|
|
url: "https://services.mothership.com/axel/location/search",
|
|
isLocationSearch: true,
|
|
},
|
|
{
|
|
ts: 200,
|
|
iso: "",
|
|
phase: "rpa_pickup",
|
|
kind: "response",
|
|
method: "POST",
|
|
url: "https://services.mothership.com/axel/location/search",
|
|
status: 200,
|
|
isLocationSearch: true,
|
|
},
|
|
];
|
|
|
|
describe("network-diff", () => {
|
|
it("真人 sample 识别 search→place 完整链", () => {
|
|
const s = summarizeNetwork(humanSample, "human");
|
|
expect(s.placeGet200).toBe(1);
|
|
expect(s.chains[0]?.complete).toBe(true);
|
|
expect(s.chains[0]?.gapSearchResponseToPlaceRequestMs).toBe(700);
|
|
});
|
|
|
|
it("RPA 缺 place 时 verdict=RPA_MISSING_PLACE", () => {
|
|
const humanFull = [...humanSample, ...humanSample.map((e, i) => ({ ...e, ts: e.ts + 2000 + i }))];
|
|
const d = diffHumanRpaNetwork(humanFull, rpaMissingPlace, "human1", "rpa1");
|
|
expect(d.verdict).toBe("RPA_MISSING_PLACE");
|
|
expect(d.gaps.some((g) => g.includes("place"))).toBe(true);
|
|
});
|
|
});
|