






























@@ -24,6 +24,28 @@ function createConfig(params?: { dangerouslyAllowNameMatching?: boolean }): Core
2424} as CoreConfig;
2525}
262627+function resolveTargetCall(
28+resolveTargets: { mock: { calls: unknown[][] } },
29+index: number,
30+): { accountId?: string; kind?: string; inputs?: string[] } {
31+const [arg] = resolveTargets.mock.calls[index] ?? [];
32+if (!arg || typeof arg !== "object") {
33+throw new Error(`expected resolveTargets call ${index + 1}`);
34+}
35+return arg as { accountId?: string; kind?: string; inputs?: string[] };
36+}
37+38+function expectResolveTargetCall(
39+resolveTargets: { mock: { calls: unknown[][] } },
40+index: number,
41+expected: { accountId: string; kind: string; inputs: string[] },
42+): void {
43+const call = resolveTargetCall(resolveTargets, index);
44+expect(call.accountId).toBe(expected.accountId);
45+expect(call.kind).toBe(expected.kind);
46+expect(call.inputs).toEqual(expected.inputs);
47+}
48+2749describe("resolveMatrixMonitorConfig", () => {
2850it("canonicalizes resolved user aliases and room keys without keeping stale aliases", async () => {
2951const runtime = createRuntime();
@@ -82,30 +104,21 @@ describe("resolveMatrixMonitorConfig", () => {
82104},
83105});
84106expect(resolveTargets).toHaveBeenCalledTimes(3);
85-expect(resolveTargets).toHaveBeenNthCalledWith(
86-1,
87-expect.objectContaining({
88-accountId: "ops",
89-kind: "user",
90-inputs: ["Bob"],
91-}),
92-);
93-expect(resolveTargets).toHaveBeenNthCalledWith(
94-2,
95-expect.objectContaining({
96-accountId: "ops",
97-kind: "group",
98-inputs: ["General"],
99-}),
100-);
101-expect(resolveTargets).toHaveBeenNthCalledWith(
102-3,
103-expect.objectContaining({
104-accountId: "ops",
105-kind: "user",
106-inputs: ["Dana"],
107-}),
108-);
107+expectResolveTargetCall(resolveTargets, 0, {
108+accountId: "ops",
109+kind: "user",
110+inputs: ["Bob"],
111+});
112+expectResolveTargetCall(resolveTargets, 1, {
113+accountId: "ops",
114+kind: "group",
115+inputs: ["General"],
116+});
117+expectResolveTargetCall(resolveTargets, 2, {
118+accountId: "ops",
119+kind: "user",
120+inputs: ["Dana"],
121+});
109122});
110123111124it("strips config prefixes before lookups and logs unresolved guidance once per section", async () => {
@@ -137,22 +150,16 @@ describe("resolveMatrixMonitorConfig", () => {
137150expect(result.allowFrom).toStrictEqual([]);
138151expect(result.groupAllowFrom).toEqual(["@known:example.org"]);
139152expect(result.roomsConfig).toStrictEqual({});
140-expect(resolveTargets).toHaveBeenNthCalledWith(
141-1,
142-expect.objectContaining({
143-accountId: "ops",
144-kind: "user",
145-inputs: ["Ghost"],
146-}),
147-);
148-expect(resolveTargets).toHaveBeenNthCalledWith(
149-2,
150-expect.objectContaining({
151-accountId: "ops",
152-kind: "group",
153-inputs: ["Project X"],
154-}),
155-);
153+expectResolveTargetCall(resolveTargets, 0, {
154+accountId: "ops",
155+kind: "user",
156+inputs: ["Ghost"],
157+});
158+expectResolveTargetCall(resolveTargets, 1, {
159+accountId: "ops",
160+kind: "group",
161+inputs: ["Project X"],
162+});
156163expect(resolveTargets).toHaveBeenCalledTimes(2);
157164expect(runtime.log).toHaveBeenCalledWith("matrix dm allowlist unresolved: user:Ghost");
158165expect(runtime.log).toHaveBeenCalledWith(
@@ -196,13 +203,11 @@ describe("resolveMatrixMonitorConfig", () => {
196203enabled: true,
197204},
198205});
199-expect(resolveTargets).toHaveBeenCalledWith(
200-expect.objectContaining({
201-accountId: "ops",
202-kind: "group",
203-inputs: ["#allowed:example.org"],
204-}),
205-);
206+expectResolveTargetCall(resolveTargets, 0, {
207+accountId: "ops",
208+kind: "group",
209+inputs: ["#allowed:example.org"],
210+});
206211});
207212208213it("does not resolve mutable allowlist entries or room names by default", async () => {
@@ -251,13 +256,11 @@ describe("resolveMatrixMonitorConfig", () => {
251256},
252257});
253258expect(resolveTargets).toHaveBeenCalledTimes(1);
254-expect(resolveTargets).toHaveBeenCalledWith(
255-expect.objectContaining({
256-accountId: "ops",
257-kind: "group",
258-inputs: ["#ops:example.org"],
259-}),
260-);
259+expectResolveTargetCall(resolveTargets, 0, {
260+accountId: "ops",
261+kind: "group",
262+inputs: ["#ops:example.org"],
263+});
261264expect(runtime.log).toHaveBeenCalledWith("matrix dm allowlist unresolved: Alice");
262265expect(runtime.log).toHaveBeenCalledWith(
263266"matrix dm allowlist entries must be full Matrix IDs (example: @user:server). Unresolved entries will not match any sender. To match Matrix display names, set channels.matrix.dangerouslyAllowNameMatching=true.",
@@ -326,12 +329,10 @@ describe("resolveMatrixMonitorConfig", () => {
326329});
327330328331expect(result).toEqual(["@bob:example.org", "*", "@alice:example.org"]);
329-expect(resolveTargets).toHaveBeenCalledWith(
330-expect.objectContaining({
331-accountId: "ops",
332-kind: "user",
333-inputs: ["Alice"],
334-}),
335-);
332+expectResolveTargetCall(resolveTargets, 0, {
333+accountId: "ops",
334+kind: "user",
335+inputs: ["Alice"],
336+});
336337});
337338});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。