




















@@ -2,6 +2,7 @@ import { afterEach, describe, expect, it } from "vitest";
22import { VoiceCallConfigSchema, type VoiceCallConfig } from "./config.js";
33import { CallManager } from "./manager.js";
44import { createTestStorePath, FakeProvider } from "./manager.test-harness.js";
5+import { flushPendingCallRecordWritesForTest } from "./manager/store.js";
56import type { WebhookContext, WebhookParseOptions } from "./types.js";
67import { VoiceCallWebhookServer } from "./webhook.js";
78@@ -132,4 +133,47 @@ describe("Voice-call webhook hangup-once lifecycle", () => {
132133const { first, second, manager } = await runDuplicateInboundReplayLifecycleTest(provider);
133134expectSingleRejectedReplayHangup({ first, second, provider, manager });
134135});
136+137+it("keeps rejected inbound replay keys after manager restart", async () => {
138+const storePath = createTestStorePath();
139+const config = createConfig();
140+const firstProvider = new RejectInboundReplayProvider("plivo");
141+const firstManager = new CallManager(config, storePath);
142+await firstManager.initialize(firstProvider, "https://example.com/voice/webhook");
143+const firstServer = new VoiceCallWebhookServer(config, firstManager, firstProvider);
144+145+try {
146+const baseUrl = await firstServer.start();
147+const first = await postWebhookForm(
148+firstServer,
149+baseUrl,
150+"CallSid=CA123&From=%2B15552222222",
151+);
152+expect(first.status).toBe(200);
153+} finally {
154+await firstServer.stop();
155+}
156+await flushPendingCallRecordWritesForTest();
157+expect(firstProvider.hangupCalls).toHaveLength(1);
158+159+const secondProvider = new RejectInboundReplayProvider("plivo");
160+const secondManager = new CallManager(config, storePath);
161+await secondManager.initialize(secondProvider, "https://example.com/voice/webhook");
162+const secondServer = new VoiceCallWebhookServer(config, secondManager, secondProvider);
163+164+try {
165+const baseUrl = await secondServer.start();
166+const replay = await postWebhookForm(
167+secondServer,
168+baseUrl,
169+"CallSid=CA123&From=%2B15552222222",
170+);
171+expect(replay.status).toBe(200);
172+} finally {
173+await secondServer.stop();
174+}
175+176+expect(secondProvider.hangupCalls).toHaveLength(0);
177+expect(secondManager.getCallByProviderCallId("provider-inbound-1")).toBeUndefined();
178+});
135179});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。