




















@@ -14,6 +14,16 @@ import {
1414verifyLivePreviewFinalizerCapabilityProofs,
1515} from "./contracts.js";
161617+function verifiedEntries<T extends { status: string }>(results: readonly T[]): T[] {
18+return results.filter((result) => result.status === "verified");
19+}
20+21+function expectOnlyVerifiedOrNotDeclared(results: readonly { status: string }[]): void {
22+expect(
23+results.every((result) => result.status === "verified" || result.status === "not_declared"),
24+).toBe(true);
25+}
26+1727describe("durable final capability contracts", () => {
1828it("lists declared durable-final capabilities in stable order", () => {
1929expect(
@@ -32,24 +42,23 @@ describe("durable final capability contracts", () => {
3242const text = vi.fn();
3343const silent = vi.fn(async () => {});
344435-await expect(
36-verifyDurableFinalCapabilityProofs({
37-adapterName: "demo",
38-capabilities: {
39-text: true,
40-silent: true,
41-},
42-proofs: {
43- text,
44- silent,
45-},
46-}),
47-).resolves.toEqual(
48-expect.arrayContaining([
49-{ capability: "text", status: "verified" },
50-{ capability: "silent", status: "verified" },
51-]),
52-);
45+const results = await verifyDurableFinalCapabilityProofs({
46+adapterName: "demo",
47+capabilities: {
48+text: true,
49+silent: true,
50+},
51+proofs: {
52+ text,
53+ silent,
54+},
55+});
56+expect(verifiedEntries(results)).toEqual([
57+{ capability: "text", status: "verified" },
58+{ capability: "silent", status: "verified" },
59+]);
60+expect(results).toHaveLength(12);
61+expectOnlyVerifiedOrNotDeclared(results);
5362expect(text).toHaveBeenCalledTimes(1);
5463expect(silent).toHaveBeenCalledTimes(1);
5564});
@@ -75,28 +84,27 @@ describe("durable final capability contracts", () => {
7584const text = vi.fn();
7685const media = vi.fn();
778678-await expect(
79-verifyChannelMessageAdapterCapabilityProofs({
80-adapterName: "demo",
81-adapter: {
82-durableFinal: {
83-capabilities: {
84-text: true,
85-media: true,
86-},
87+const results = await verifyChannelMessageAdapterCapabilityProofs({
88+adapterName: "demo",
89+adapter: {
90+durableFinal: {
91+capabilities: {
92+text: true,
93+media: true,
8794},
8895},
89-proofs: {
90- text,
91- media,
92-},
93-}),
94-).resolves.toEqual(
95-expect.arrayContaining([
96-{ capability: "text", status: "verified" },
97-{ capability: "media", status: "verified" },
98-]),
99-);
96+},
97+proofs: {
98+ text,
99+ media,
100+},
101+});
102+expect(verifiedEntries(results)).toEqual([
103+{ capability: "text", status: "verified" },
104+{ capability: "media", status: "verified" },
105+]);
106+expect(results).toHaveLength(12);
107+expectOnlyVerifiedOrNotDeclared(results);
100108expect(text).toHaveBeenCalledTimes(1);
101109expect(media).toHaveBeenCalledTimes(1);
102110});
@@ -113,30 +121,29 @@ describe("durable final capability contracts", () => {
113121}),
114122).toEqual(["finalEdit", "normalFallback"]);
115123116-await expect(
117-verifyChannelMessageLiveFinalizerProofs({
118-adapterName: "demo",
119-adapter: {
120-live: {
121-finalizer: {
122-capabilities: {
123-finalEdit: true,
124-normalFallback: true,
125-},
124+const results = await verifyChannelMessageLiveFinalizerProofs({
125+adapterName: "demo",
126+adapter: {
127+live: {
128+finalizer: {
129+capabilities: {
130+finalEdit: true,
131+normalFallback: true,
126132},
127133},
128134},
129-proofs: {
130- finalEdit,
131- normalFallback,
132-},
133-}),
134-).resolves.toEqual(
135-expect.arrayContaining([
136-{ capability: "finalEdit", status: "verified" },
137-{ capability: "normalFallback", status: "verified" },
138-]),
139-);
135+},
136+proofs: {
137+ finalEdit,
138+ normalFallback,
139+},
140+});
141+expect(verifiedEntries(results)).toEqual([
142+{ capability: "finalEdit", status: "verified" },
143+{ capability: "normalFallback", status: "verified" },
144+]);
145+expect(results).toHaveLength(5);
146+expectOnlyVerifiedOrNotDeclared(results);
140147expect(finalEdit).toHaveBeenCalledTimes(1);
141148expect(normalFallback).toHaveBeenCalledTimes(1);
142149});
@@ -153,28 +160,27 @@ describe("durable final capability contracts", () => {
153160}),
154161).toEqual(["draftPreview", "previewFinalization"]);
155162156-await expect(
157-verifyChannelMessageLiveCapabilityAdapterProofs({
158-adapterName: "demo",
159-adapter: {
160-live: {
161-capabilities: {
162-draftPreview: true,
163-previewFinalization: true,
164-},
163+const results = await verifyChannelMessageLiveCapabilityAdapterProofs({
164+adapterName: "demo",
165+adapter: {
166+live: {
167+capabilities: {
168+draftPreview: true,
169+previewFinalization: true,
165170},
166171},
167-proofs: {
168- draftPreview,
169- previewFinalization,
170-},
171-}),
172-).resolves.toEqual(
173-expect.arrayContaining([
174-{ capability: "draftPreview", status: "verified" },
175-{ capability: "previewFinalization", status: "verified" },
176-]),
177-);
172+},
173+proofs: {
174+ draftPreview,
175+ previewFinalization,
176+},
177+});
178+expect(verifiedEntries(results)).toEqual([
179+{ capability: "draftPreview", status: "verified" },
180+{ capability: "previewFinalization", status: "verified" },
181+]);
182+expect(results).toHaveLength(5);
183+expectOnlyVerifiedOrNotDeclared(results);
178184expect(draftPreview).toHaveBeenCalledTimes(1);
179185expect(previewFinalization).toHaveBeenCalledTimes(1);
180186});
@@ -222,26 +228,25 @@ describe("durable final capability contracts", () => {
222228}),
223229).toEqual(["after_receive_record", "after_agent_dispatch"]);
224230225-await expect(
226-verifyChannelMessageReceiveAckPolicyAdapterProofs({
227-adapterName: "demo",
228-adapter: {
229-receive: {
230-defaultAckPolicy: "after_agent_dispatch",
231-supportedAckPolicies: ["after_receive_record", "after_agent_dispatch"],
232-},
233-},
234-proofs: {
235-after_receive_record: afterReceiveRecord,
236-after_agent_dispatch: afterAgentDispatch,
231+const results = await verifyChannelMessageReceiveAckPolicyAdapterProofs({
232+adapterName: "demo",
233+adapter: {
234+receive: {
235+defaultAckPolicy: "after_agent_dispatch",
236+supportedAckPolicies: ["after_receive_record", "after_agent_dispatch"],
237237},
238-}),
239-).resolves.toEqual(
240-expect.arrayContaining([
241-{ policy: "after_receive_record", status: "verified" },
242-{ policy: "after_agent_dispatch", status: "verified" },
243-]),
244-);
238+},
239+proofs: {
240+after_receive_record: afterReceiveRecord,
241+after_agent_dispatch: afterAgentDispatch,
242+},
243+});
244+expect(verifiedEntries(results)).toEqual([
245+{ policy: "after_receive_record", status: "verified" },
246+{ policy: "after_agent_dispatch", status: "verified" },
247+]);
248+expect(results).toHaveLength(4);
249+expectOnlyVerifiedOrNotDeclared(results);
245250expect(afterReceiveRecord).toHaveBeenCalledTimes(1);
246251expect(afterAgentDispatch).toHaveBeenCalledTimes(1);
247252});
@@ -264,16 +269,17 @@ describe("durable final capability contracts", () => {
264269}),
265270).toEqual(["manual"]);
266271267-await expect(
268-verifyChannelMessageReceiveAckPolicyProofs({
269-adapterName: "demo",
270-receive: {
271-defaultAckPolicy: "manual",
272-supportedAckPolicies: ["manual"],
273-},
274-proofs: { manual },
275-}),
276-).resolves.toEqual(expect.arrayContaining([{ policy: "manual", status: "verified" }]));
272+const results = await verifyChannelMessageReceiveAckPolicyProofs({
273+adapterName: "demo",
274+receive: {
275+defaultAckPolicy: "manual",
276+supportedAckPolicies: ["manual"],
277+},
278+proofs: { manual },
279+});
280+expect(verifiedEntries(results)).toEqual([{ policy: "manual", status: "verified" }]);
281+expect(results).toHaveLength(4);
282+expectOnlyVerifiedOrNotDeclared(results);
277283expect(manual).toHaveBeenCalledTimes(1);
278284});
279285此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。