
























@@ -1342,7 +1342,9 @@ describe("matrix live qa scenarios", () => {
13421342mentionUserIds: ["@sut:matrix-qa.test"],
13431343roomId: "!main:matrix-qa.test",
13441344});
1345-expect(waitForOptionalRoomEvent.mock.calls.at(0)?.[0]?.roomId).toBe("!main:matrix-qa.test");
1345+expect(mockObjectArg(waitForOptionalRoomEvent, "waitForOptionalRoomEvent").roomId).toBe(
1346+"!main:matrix-qa.test",
1347+);
13461348});
1347134913481350it("ignores stale Matrix SUT replies before a no-reply trigger", async () => {
@@ -1497,8 +1499,10 @@ describe("matrix live qa scenarios", () => {
14971499restartDelayMs: MATRIX_QA_HOT_RELOAD_RESTART_DELAY_MS,
14981500},
14991501);
1500-expect(sendTextMessage.mock.calls.at(0)?.[0]?.mentionUserIds).toEqual(["@sut:matrix-qa.test"]);
1501-expect(sendTextMessage.mock.calls.at(0)?.[0]?.roomId).toBe("!main:matrix-qa.test");
1502+expect(mockObjectArg(sendTextMessage, "sendTextMessage").mentionUserIds).toEqual([
1503+"@sut:matrix-qa.test",
1504+]);
1505+expect(mockObjectArg(sendTextMessage, "sendTextMessage").roomId).toBe("!main:matrix-qa.test");
15021506expect(sendTextMessage.mock.calls.at(1)?.[0]?.mentionUserIds).toEqual(["@sut:matrix-qa.test"]);
15031507expect(sendTextMessage.mock.calls.at(1)?.[0]?.roomId).toBe("!main:matrix-qa.test");
15041508});
@@ -1690,8 +1694,9 @@ describe("matrix live qa scenarios", () => {
16901694"send:fresh",
16911695"wait:fresh",
16921696]);
1693-expect(waitForOptionalRoomEvent.mock.calls.at(0)?.[0]?.roomId).toBe("!restart:matrix-qa.test");
1694-expect(waitForOptionalRoomEvent.mock.calls.at(0)?.[0]?.timeoutMs).toBe(8000);
1697+const firstOptionalWait = mockObjectArg(waitForOptionalRoomEvent, "waitForOptionalRoomEvent");
1698+expect(firstOptionalWait.roomId).toBe("!restart:matrix-qa.test");
1699+expect(firstOptionalWait.timeoutMs).toBe(8000);
16951700});
1696170116971702it("forces a stale persisted Matrix sync cursor and expects inbound dedupe to absorb replay", async () => {
@@ -2040,9 +2045,9 @@ describe("matrix live qa scenarios", () => {
20402045mentionUserIds: ["@sync-gateway:matrix-qa.test"],
20412046roomId: "!recovery:matrix-qa.test",
20422047});
2043-const waitParams = rawWaitForRoomEvent.mock.calls.at(0)?.[0];
2044-expect(waitParams?.roomId).toBe("!recovery:matrix-qa.test");
2045-expect(waitParams?.since).toBe("raw-driver-sync-start");
2048+const waitParams = mockObjectArg(rawWaitForRoomEvent, "rawWaitForRoomEvent");
2049+expect(waitParams.roomId).toBe("!recovery:matrix-qa.test");
2050+expect(waitParams.since).toBe("raw-driver-sync-start");
20462051const finalConfig = JSON.parse(await readFile(gatewayConfigPath, "utf8")) as {
20472052channels: {
20482053matrix: {
@@ -2290,12 +2295,15 @@ describe("matrix live qa scenarios", () => {
22902295});
22912296expect(observerJoinRoom).toHaveBeenCalledWith("!isolated-restart:matrix-qa.test");
22922297expect(sutJoinRoom).toHaveBeenCalledWith("!isolated-restart:matrix-qa.test");
2293-const clientOptions = createMatrixQaE2eeScenarioClient.mock.calls.at(0)?.[0];
2294-expect(clientOptions?.accessToken).toBe("isolated-driver-token");
2295-expect(clientOptions?.actorId).toBe("driver-restart-resume");
2296-expect(clientOptions?.deviceId).toBe("ISOLATEDDRIVER");
2297-expect(clientOptions?.password).toBe("isolated-driver-password");
2298-expect(clientOptions?.userId).toBe("@isolated-driver:matrix-qa.test");
2298+const clientOptions = mockObjectArg(
2299+createMatrixQaE2eeScenarioClient,
2300+"createMatrixQaE2eeScenarioClient",
2301+);
2302+expect(clientOptions.accessToken).toBe("isolated-driver-token");
2303+expect(clientOptions.actorId).toBe("driver-restart-resume");
2304+expect(clientOptions.deviceId).toBe("ISOLATEDDRIVER");
2305+expect(clientOptions.password).toBe("isolated-driver-password");
2306+expect(clientOptions.userId).toBe("@isolated-driver:matrix-qa.test");
22992307} finally {
23002308await rm(outputDir, { recursive: true, force: true });
23012309}
@@ -2376,7 +2384,7 @@ describe("matrix live qa scenarios", () => {
23762384bodyIncludes: "reply with only this exact marker:",
23772385roomId: "!dm:matrix-qa.test",
23782386});
2379-expect(waitForRoomEvent.mock.calls.at(0)?.[0]?.roomId).toBe("!dm:matrix-qa.test");
2387+expect(mockObjectArg(waitForRoomEvent, "waitForRoomEvent").roomId).toBe("!dm:matrix-qa.test");
23802388});
2381238923822390it("uses room thread override scenarios against the main room", async () => {
@@ -2520,11 +2528,11 @@ describe("matrix live qa scenarios", () => {
25202528mentionUserIds: ["@sut:matrix-qa.test"],
25212529roomId: "!main:matrix-qa.test",
25222530});
2523-expect(waitForRoomEvent.mock.calls.at(0)?.[0]?.since).toBe("driver-sync-start");
2524-const completionWaitOptions = waitForRoomEvent.mock.calls.at(1)?.[0];
2531+expect(mockObjectArg(waitForRoomEvent, "waitForRoomEvent").since).toBe("driver-sync-start");
2532+const completionWaitOptions = mockObjectArg(waitForRoomEvent, "waitForRoomEvent", 1);
25252533expect(typeof completionWaitOptions?.predicate).toBe("function");
2526-expect(completionWaitOptions?.since).toBe("driver-sync-intro");
2527-const introPredicate = waitForRoomEvent.mock.calls.at(0)?.[0]?.predicate as
2534+expect(completionWaitOptions.since).toBe("driver-sync-intro");
2535+const introPredicate = mockObjectArg(waitForRoomEvent, "waitForRoomEvent").predicate as
25282536| ((event: MatrixQaObservedEvent) => boolean)
25292537| undefined;
25302538expect(() =>
@@ -2683,10 +2691,10 @@ describe("matrix live qa scenarios", () => {
26832691mentionUserIds: ["@sut:matrix-qa.test"],
26842692roomId: "!main:matrix-qa.test",
26852693});
2686-expect(waitForRoomEvent.mock.calls.at(0)?.[0]?.since).toBe("driver-sync-start");
2687-const finalWaitOptions = waitForRoomEvent.mock.calls.at(1)?.[0];
2694+expect(mockObjectArg(waitForRoomEvent, "waitForRoomEvent").since).toBe("driver-sync-start");
2695+const finalWaitOptions = mockObjectArg(waitForRoomEvent, "waitForRoomEvent", 1);
26882696expect(typeof finalWaitOptions?.predicate).toBe("function");
2689-expect(finalWaitOptions?.since).toBe("driver-sync-preview");
2697+expect(finalWaitOptions.since).toBe("driver-sync-preview");
26902698});
2691269926922700it("captures partial preview text messages before the finalized Matrix reply", async () => {
@@ -3041,7 +3049,10 @@ describe("matrix live qa scenarios", () => {
30413049expect(artifacts.reply?.relatesTo?.eventId).toBe("$tool-progress-error-preview");
30423050expect(artifacts.reply?.relatesTo?.relType).toBe("m.replace");
304330513044-expect(waitForRoomEvent.mock.calls.at(0)?.[0].predicate(progressEvent)).toBe(true);
3052+const progressWait = mockObjectArg(waitForRoomEvent, "waitForRoomEvent");
3053+expect(
3054+(progressWait.predicate as (event: MatrixQaObservedEvent) => boolean)(progressEvent),
3055+).toBe(true);
30453056expectSentTextMessage(sendTextMessage, {
30463057bodyIncludes: "Tool progress error QA check",
30473058mentionUserIds: ["@sut:matrix-qa.test"],
@@ -3347,14 +3358,16 @@ describe("matrix live qa scenarios", () => {
33473358expect(artifacts.driverEventId).toBe("$image-understanding-trigger");
33483359expect(artifacts.reply?.eventId).toBe("$sut-image-reply");
334933603350-const mediaMessage = sendMediaMessage.mock.calls.at(0)?.[0];
3351-expect(String(mediaMessage?.body)).toContain("Image understanding check");
3352-expect(mediaMessage?.contentType).toBe("image/png");
3353-expect(mediaMessage?.fileName).toBe("red-top-blue-bottom.png");
3354-expect(mediaMessage?.kind).toBe("image");
3355-expect(mediaMessage?.mentionUserIds).toEqual(["@sut:matrix-qa.test"]);
3356-expect(mediaMessage?.roomId).toBe("!media:matrix-qa.test");
3357-expect(waitForRoomEvent.mock.calls.at(1)?.[0]?.since).toBe("driver-sync-attachment");
3361+const mediaMessage = mockObjectArg(sendMediaMessage, "sendMediaMessage");
3362+expect(String(mediaMessage.body)).toContain("Image understanding check");
3363+expect(mediaMessage.contentType).toBe("image/png");
3364+expect(mediaMessage.fileName).toBe("red-top-blue-bottom.png");
3365+expect(mediaMessage.kind).toBe("image");
3366+expect(mediaMessage.mentionUserIds).toEqual(["@sut:matrix-qa.test"]);
3367+expect(mediaMessage.roomId).toBe("!media:matrix-qa.test");
3368+expect(mockObjectArg(waitForRoomEvent, "waitForRoomEvent", 1).since).toBe(
3369+"driver-sync-attachment",
3370+);
33583371});
3359337233603373it("waits for a real Matrix image attachment after image generation", async () => {
@@ -3785,7 +3798,9 @@ describe("matrix live qa scenarios", () => {
37853798bodyIncludes: "reply with only this exact marker:",
37863799roomId: "!dm-shared:matrix-qa.test",
37873800});
3788-expect(waitSecondaryNotice.mock.calls.at(0)?.[0]?.roomId).toBe("!dm-shared:matrix-qa.test");
3801+expect(mockObjectArg(waitSecondaryNotice, "waitSecondaryNotice").roomId).toBe(
3802+"!dm-shared:matrix-qa.test",
3803+);
37893804});
3790380537913806it("suppresses the shared DM notice when sessionScope is per-room", async () => {
@@ -4054,7 +4069,9 @@ describe("matrix live qa scenarios", () => {
40544069mentionUserIds: ["@sut:matrix-qa.test"],
40554070roomId: "!secondary:matrix-qa.test",
40564071});
4057-expect(waitForRoomEvent.mock.calls.at(0)?.[0]?.roomId).toBe("!secondary:matrix-qa.test");
4072+expect(mockObjectArg(waitForRoomEvent, "waitForRoomEvent").roomId).toBe(
4073+"!secondary:matrix-qa.test",
4074+);
40584075});
4059407640604077it("ignores stale E2EE replies when checking a verification notice", async () => {
@@ -4162,7 +4179,9 @@ describe("matrix live qa scenarios", () => {
41624179expect(artifacts.roomId).toBe("!e2ee:matrix-qa.test");
4163418041644181expect(noticeToken).toMatch(/^MATRIX_QA_E2EE_VERIFY_NOTICE_[A-Z0-9]+$/);
4165-expect(waitForOptionalRoomEvent.mock.calls.at(0)?.[0]?.roomId).toBe("!e2ee:matrix-qa.test");
4182+expect(mockObjectArg(waitForOptionalRoomEvent, "waitForOptionalRoomEvent").roomId).toBe(
4183+"!e2ee:matrix-qa.test",
4184+);
41664185});
4167418641684187it("applies a recovery key before restoring backed up room keys", async () => {
@@ -4430,10 +4449,18 @@ describe("matrix live qa scenarios", () => {
44304449expect(artifacts.restoreTotal).toBe(1);
44314450expect(artifacts.verificationSuccess).toBe(false);
443244514433-const proxyArgs = startMatrixQaFaultProxy.mock.calls.at(0)?.[0];
4434-if (!proxyArgs) {
4435-throw new Error("expected Matrix QA fault proxy to start");
4436-}
4452+const proxyArgs = mockObjectArg(startMatrixQaFaultProxy, "startMatrixQaFaultProxy") as {
4453+rules: Array<{
4454+match: (params: {
4455+bearerToken?: string;
4456+headers: Record<string, string>;
4457+method: string;
4458+path: string;
4459+search: string;
4460+}) => boolean;
4461+}>;
4462+targetBaseUrl?: unknown;
4463+};
44374464const [faultRule] = proxyArgs.rules;
44384465if (!faultRule) {
44394466throw new Error("expected Matrix QA fault proxy rule");
@@ -4741,12 +4768,15 @@ describe("matrix live qa scenarios", () => {
47414768password: "cli-owner-password",
47424769userId: "@cli-owner:matrix-qa.test",
47434770});
4744-const e2eeClientOptions = createMatrixQaE2eeScenarioClient.mock.calls.at(0)?.[0];
4745-expect(e2eeClientOptions?.accessToken).toBe("cli-owner-token");
4746-expect(e2eeClientOptions?.deviceId).toBe("OWNERDEVICE");
4747-expect(e2eeClientOptions?.password).toBe("cli-owner-password");
4748-expect(e2eeClientOptions?.scenarioId).toBe("matrix-e2ee-cli-self-verification");
4749-expect(e2eeClientOptions?.userId).toBe("@cli-owner:matrix-qa.test");
4771+const e2eeClientOptions = mockObjectArg(
4772+createMatrixQaE2eeScenarioClient,
4773+"createMatrixQaE2eeScenarioClient",
4774+);
4775+expect(e2eeClientOptions.accessToken).toBe("cli-owner-token");
4776+expect(e2eeClientOptions.deviceId).toBe("OWNERDEVICE");
4777+expect(e2eeClientOptions.password).toBe("cli-owner-password");
4778+expect(e2eeClientOptions.scenarioId).toBe("matrix-e2ee-cli-self-verification");
4779+expect(e2eeClientOptions.userId).toBe("@cli-owner:matrix-qa.test");
47504780expect(runMatrixQaOpenClawCli).toHaveBeenCalledTimes(2);
47514781expect(runMatrixQaOpenClawCli.mock.calls.map(([params]) => params.args)).toEqual([
47524782[
@@ -4761,7 +4791,9 @@ describe("matrix live qa scenarios", () => {
47614791],
47624792["matrix", "verify", "status", "--account", "cli", "--json"],
47634793]);
4764-expect(runMatrixQaOpenClawCli.mock.calls.at(0)?.[0].stdin).toBe("encoded-recovery-key\n");
4794+expect(mockObjectArg(runMatrixQaOpenClawCli, "runMatrixQaOpenClawCli").stdin).toBe(
4795+"encoded-recovery-key\n",
4796+);
47654797const cliEnv = mockObjectArg(startMatrixQaOpenClawCli, "startMatrixQaOpenClawCli")
47664798.env as Record<string, unknown>;
47674799expect(cliEnv?.OPENCLAW_STATE_DIR).toContain("openclaw-matrix-cli-qa-");
@@ -5299,10 +5331,18 @@ describe("matrix live qa scenarios", () => {
52995331expect(artifacts.faultHitCount).toBe(1);
53005332expect(artifacts.faultRuleId).toBe("room-key-backup-version-unavailable");
530153335302-const proxyArgs = startMatrixQaFaultProxy.mock.calls.at(0)?.[0];
5303-if (!proxyArgs) {
5304-throw new Error("expected Matrix QA fault proxy to start");
5305-}
5334+const proxyArgs = mockObjectArg(startMatrixQaFaultProxy, "startMatrixQaFaultProxy") as {
5335+rules: Array<{
5336+match: (params: {
5337+bearerToken?: string;
5338+headers: Record<string, string>;
5339+method: string;
5340+path: string;
5341+search: string;
5342+}) => boolean;
5343+}>;
5344+targetBaseUrl?: unknown;
5345+};
53065346const [faultRule] = proxyArgs.rules;
53075347if (!faultRule) {
53085348throw new Error("expected Matrix QA fault proxy rule");
@@ -6033,18 +6073,21 @@ describe("matrix live qa scenarios", () => {
60336073expect(joinRoom).toHaveBeenCalledWith("!isolated-e2ee:matrix-qa.test");
60346074expect(patchGatewayConfig).not.toHaveBeenCalled();
60356075expect(restartGatewayAfterStateMutation).toHaveBeenCalledTimes(2);
6036-const driverMessage = driverClient.sendTextMessage.mock.calls.at(0)?.[0];
6037-expect(driverMessage?.mentionUserIds).toEqual(["@cli-gateway:matrix-qa.test"]);
6038-expect(driverMessage?.roomId).toBe("!isolated-e2ee:matrix-qa.test");
6076+const driverMessage = mockObjectArg(driverClient.sendTextMessage, "sendTextMessage");
6077+expect(driverMessage.mentionUserIds).toEqual(["@cli-gateway:matrix-qa.test"]);
6078+expect(driverMessage.roomId).toBe("!isolated-e2ee:matrix-qa.test");
60396079expect(driverClient.waitForJoinedMember).toHaveBeenCalledWith({
60406080roomId: "!isolated-e2ee:matrix-qa.test",
60416081timeoutMs: 8_000,
60426082userId: "@cli-gateway:matrix-qa.test",
60436083});
6044-const e2eeClientOptions = createMatrixQaE2eeScenarioClient.mock.calls.at(0)?.[0];
6045-expect(e2eeClientOptions?.accessToken).toBe("cli-driver-token");
6046-expect(e2eeClientOptions?.deviceId).toBe("CLIDRIVERDEVICE");
6047-expect(e2eeClientOptions?.userId).toBe("@cli-driver:matrix-qa.test");
6084+const e2eeClientOptions = mockObjectArg(
6085+createMatrixQaE2eeScenarioClient,
6086+"createMatrixQaE2eeScenarioClient",
6087+);
6088+expect(e2eeClientOptions.accessToken).toBe("cli-driver-token");
6089+expect(e2eeClientOptions.deviceId).toBe("CLIDRIVERDEVICE");
6090+expect(e2eeClientOptions.userId).toBe("@cli-driver:matrix-qa.test");
60486091expect(waitGatewayAccountReady).toHaveBeenCalledWith("cli-setup-gateway", {
60496092timeoutMs: 8_000,
60506093});
@@ -6150,10 +6193,18 @@ describe("matrix live qa scenarios", () => {
61506193expect(artifacts.faultHitCount).toBe(1);
61516194expect(artifacts.faultRuleId).toBe("room-key-backup-version-unavailable");
615261956153-const proxyArgs = startMatrixQaFaultProxy.mock.calls.at(0)?.[0];
6154-if (!proxyArgs) {
6155-throw new Error("expected Matrix QA fault proxy to start");
6156-}
6196+const proxyArgs = mockObjectArg(startMatrixQaFaultProxy, "startMatrixQaFaultProxy") as {
6197+rules: Array<{
6198+match: (params: {
6199+bearerToken?: string;
6200+headers: Record<string, string>;
6201+method: string;
6202+path: string;
6203+search: string;
6204+}) => boolean;
6205+}>;
6206+targetBaseUrl?: unknown;
6207+};
61576208const [faultRule] = proxyArgs.rules;
61586209if (!faultRule) {
61596210throw new Error("expected Matrix QA fault proxy rule");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。