























@@ -19,6 +19,15 @@ const globalToolOnlyReplyConfig = {
1919},
2020} as const satisfies OpenClawConfig;
212122+function expectPolicyFields(
23+policy: ReturnType<typeof resolveSourceReplyVisibilityPolicy>,
24+fields: Partial<ReturnType<typeof resolveSourceReplyVisibilityPolicy>>,
25+): void {
26+for (const [key, value] of Object.entries(fields)) {
27+expect(policy[key as keyof typeof policy]).toBe(value);
28+}
29+}
30+2231describe("resolveSourceReplyDeliveryMode", () => {
2332it("defaults groups and channels to message-tool-only delivery", () => {
2433expect(resolveSourceReplyDeliveryMode({ cfg: emptyConfig, ctx: { ChatType: "channel" } })).toBe(
@@ -162,41 +171,43 @@ describe("resolveSourceReplyDeliveryMode", () => {
162171163172describe("resolveSourceReplyVisibilityPolicy", () => {
164173it("allows direct automatic delivery without suppressing typing", () => {
165-expect(
174+expectPolicyFields(
166175resolveSourceReplyVisibilityPolicy({
167176cfg: emptyConfig,
168177ctx: { ChatType: "direct" },
169178sendPolicy: "allow",
170179}),
171-).toMatchObject({
172-sourceReplyDeliveryMode: "automatic",
173-sendPolicyDenied: false,
174-suppressAutomaticSourceDelivery: false,
175-suppressDelivery: false,
176-suppressHookUserDelivery: false,
177-suppressHookReplyLifecycle: false,
178-suppressTyping: false,
179-deliverySuppressionReason: "",
180-});
180+{
181+sourceReplyDeliveryMode: "automatic",
182+sendPolicyDenied: false,
183+suppressAutomaticSourceDelivery: false,
184+suppressDelivery: false,
185+suppressHookUserDelivery: false,
186+suppressHookReplyLifecycle: false,
187+suppressTyping: false,
188+deliverySuppressionReason: "",
189+},
190+);
181191});
182192183193it("suppresses automatic source delivery for default group turns without suppressing typing", () => {
184-expect(
194+expectPolicyFields(
185195resolveSourceReplyVisibilityPolicy({
186196cfg: emptyConfig,
187197ctx: { ChatType: "group" },
188198sendPolicy: "allow",
189199}),
190-).toMatchObject({
191-sourceReplyDeliveryMode: "message_tool_only",
192-sendPolicyDenied: false,
193-suppressAutomaticSourceDelivery: true,
194-suppressDelivery: true,
195-suppressHookUserDelivery: true,
196-suppressHookReplyLifecycle: false,
197-suppressTyping: false,
198-deliverySuppressionReason: "sourceReplyDeliveryMode: message_tool_only",
199-});
200+{
201+sourceReplyDeliveryMode: "message_tool_only",
202+sendPolicyDenied: false,
203+suppressAutomaticSourceDelivery: true,
204+suppressDelivery: true,
205+suppressHookUserDelivery: true,
206+suppressHookReplyLifecycle: false,
207+suppressTyping: false,
208+deliverySuppressionReason: "sourceReplyDeliveryMode: message_tool_only",
209+},
210+);
200211});
201212202213it("keeps native and authorized text command replies visible in groups", () => {
@@ -209,135 +220,143 @@ describe("resolveSourceReplyVisibilityPolicy", () => {
209220CommandBody: "/status",
210221},
211222] as const) {
212-expect(
223+expectPolicyFields(
213224resolveSourceReplyVisibilityPolicy({
214225cfg: emptyConfig,
215226 ctx,
216227sendPolicy: "allow",
217228}),
218-).toMatchObject({
219-sourceReplyDeliveryMode: "automatic",
220-suppressAutomaticSourceDelivery: false,
221-suppressDelivery: false,
222-suppressHookReplyLifecycle: false,
223-suppressTyping: false,
224-});
229+{
230+sourceReplyDeliveryMode: "automatic",
231+suppressAutomaticSourceDelivery: false,
232+suppressDelivery: false,
233+suppressHookReplyLifecycle: false,
234+suppressTyping: false,
235+},
236+);
225237}
226238});
227239228240it("keeps configured automatic group delivery visible", () => {
229-expect(
241+expectPolicyFields(
230242resolveSourceReplyVisibilityPolicy({
231243cfg: automaticGroupReplyConfig,
232244ctx: { ChatType: "channel" },
233245sendPolicy: "allow",
234246}),
235-).toMatchObject({
236-sourceReplyDeliveryMode: "automatic",
237-suppressAutomaticSourceDelivery: false,
238-suppressDelivery: false,
239-suppressHookReplyLifecycle: false,
240-suppressTyping: false,
241-});
247+{
248+sourceReplyDeliveryMode: "automatic",
249+suppressAutomaticSourceDelivery: false,
250+suppressDelivery: false,
251+suppressHookReplyLifecycle: false,
252+suppressTyping: false,
253+},
254+);
242255});
243256244257it("supports explicit message-tool-only delivery for direct chats without suppressing typing", () => {
245-expect(
258+expectPolicyFields(
246259resolveSourceReplyVisibilityPolicy({
247260cfg: emptyConfig,
248261ctx: { ChatType: "direct" },
249262requested: "message_tool_only",
250263sendPolicy: "allow",
251264}),
252-).toMatchObject({
253-sourceReplyDeliveryMode: "message_tool_only",
254-suppressAutomaticSourceDelivery: true,
255-suppressDelivery: true,
256-suppressHookReplyLifecycle: false,
257-suppressTyping: false,
258-deliverySuppressionReason: "sourceReplyDeliveryMode: message_tool_only",
259-});
265+{
266+sourceReplyDeliveryMode: "message_tool_only",
267+suppressAutomaticSourceDelivery: true,
268+suppressDelivery: true,
269+suppressHookReplyLifecycle: false,
270+suppressTyping: false,
271+deliverySuppressionReason: "sourceReplyDeliveryMode: message_tool_only",
272+},
273+);
260274});
261275262276it("lets sendPolicy deny suppress delivery and typing", () => {
263-expect(
277+expectPolicyFields(
264278resolveSourceReplyVisibilityPolicy({
265279cfg: emptyConfig,
266280ctx: { ChatType: "group" },
267281sendPolicy: "deny",
268282}),
269-).toMatchObject({
270-sourceReplyDeliveryMode: "message_tool_only",
271-sendPolicyDenied: true,
272-suppressDelivery: true,
273-suppressHookUserDelivery: true,
274-suppressHookReplyLifecycle: true,
275-suppressTyping: true,
276-deliverySuppressionReason: "sendPolicy: deny",
277-});
283+{
284+sourceReplyDeliveryMode: "message_tool_only",
285+sendPolicyDenied: true,
286+suppressDelivery: true,
287+suppressHookUserDelivery: true,
288+suppressHookReplyLifecycle: true,
289+suppressTyping: true,
290+deliverySuppressionReason: "sendPolicy: deny",
291+},
292+);
278293});
279294280295it("keeps explicit typing suppression separate from delivery suppression", () => {
281-expect(
296+expectPolicyFields(
282297resolveSourceReplyVisibilityPolicy({
283298cfg: emptyConfig,
284299ctx: { ChatType: "direct" },
285300sendPolicy: "allow",
286301explicitSuppressTyping: true,
287302}),
288-).toMatchObject({
289-sourceReplyDeliveryMode: "automatic",
290-suppressDelivery: false,
291-suppressHookUserDelivery: false,
292-suppressHookReplyLifecycle: true,
293-suppressTyping: true,
294-});
303+{
304+sourceReplyDeliveryMode: "automatic",
305+suppressDelivery: false,
306+suppressHookUserDelivery: false,
307+suppressHookReplyLifecycle: true,
308+suppressTyping: true,
309+},
310+);
295311});
296312297313it("keeps ACP child user delivery suppression separate from source delivery", () => {
298-expect(
314+expectPolicyFields(
299315resolveSourceReplyVisibilityPolicy({
300316cfg: emptyConfig,
301317ctx: { ChatType: "direct" },
302318sendPolicy: "allow",
303319suppressAcpChildUserDelivery: true,
304320}),
305-).toMatchObject({
306-sourceReplyDeliveryMode: "automatic",
307-suppressDelivery: false,
308-suppressHookUserDelivery: true,
309-suppressHookReplyLifecycle: true,
310-suppressTyping: false,
311-});
321+{
322+sourceReplyDeliveryMode: "automatic",
323+suppressDelivery: false,
324+suppressHookUserDelivery: true,
325+suppressHookReplyLifecycle: true,
326+suppressTyping: false,
327+},
328+);
312329});
313330it("keeps delivery automatic when message-tool-only mode cannot send visibly", () => {
314-expect(
331+expectPolicyFields(
315332resolveSourceReplyVisibilityPolicy({
316333cfg: emptyConfig,
317334ctx: { ChatType: "group" },
318335sendPolicy: "allow",
319336messageToolAvailable: false,
320337}),
321-).toMatchObject({
322-sourceReplyDeliveryMode: "automatic",
323-suppressAutomaticSourceDelivery: false,
324-suppressDelivery: false,
325-suppressHookUserDelivery: false,
326-deliverySuppressionReason: "",
327-});
328-expect(
338+{
339+sourceReplyDeliveryMode: "automatic",
340+suppressAutomaticSourceDelivery: false,
341+suppressDelivery: false,
342+suppressHookUserDelivery: false,
343+deliverySuppressionReason: "",
344+},
345+);
346+expectPolicyFields(
329347resolveSourceReplyVisibilityPolicy({
330348cfg: emptyConfig,
331349ctx: { ChatType: "channel" },
332350requested: "message_tool_only",
333351sendPolicy: "allow",
334352messageToolAvailable: false,
335353}),
336-).toMatchObject({
337-sourceReplyDeliveryMode: "automatic",
338-suppressAutomaticSourceDelivery: false,
339-suppressDelivery: false,
340-deliverySuppressionReason: "",
341-});
354+{
355+sourceReplyDeliveryMode: "automatic",
356+suppressAutomaticSourceDelivery: false,
357+suppressDelivery: false,
358+deliverySuppressionReason: "",
359+},
360+);
342361});
343362});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。