mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-27 04:53:31 +00:00
refactor(test): dedupe telegram draft-stream fixtures
This commit is contained in:
74
src/telegram/draft-stream.test-helpers.ts
Normal file
74
src/telegram/draft-stream.test-helpers.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { vi } from "vitest";
|
||||
|
||||
type DraftPreviewMode = "message" | "draft";
|
||||
|
||||
export type TestDraftStream = {
|
||||
update: ReturnType<typeof vi.fn<(text: string) => void>>;
|
||||
flush: ReturnType<typeof vi.fn<() => Promise<void>>>;
|
||||
messageId: ReturnType<typeof vi.fn<() => number | undefined>>;
|
||||
previewMode: ReturnType<typeof vi.fn<() => DraftPreviewMode>>;
|
||||
previewRevision: ReturnType<typeof vi.fn<() => number>>;
|
||||
clear: ReturnType<typeof vi.fn<() => Promise<void>>>;
|
||||
stop: ReturnType<typeof vi.fn<() => Promise<void>>>;
|
||||
forceNewMessage: ReturnType<typeof vi.fn<() => void>>;
|
||||
setMessageId: (value: number | undefined) => void;
|
||||
};
|
||||
|
||||
export function createTestDraftStream(params?: {
|
||||
messageId?: number;
|
||||
previewMode?: DraftPreviewMode;
|
||||
onUpdate?: (text: string) => void;
|
||||
onStop?: () => void | Promise<void>;
|
||||
clearMessageIdOnForceNew?: boolean;
|
||||
}): TestDraftStream {
|
||||
let messageId = params?.messageId;
|
||||
let previewRevision = 0;
|
||||
return {
|
||||
update: vi.fn().mockImplementation((text: string) => {
|
||||
previewRevision += 1;
|
||||
params?.onUpdate?.(text);
|
||||
}),
|
||||
flush: vi.fn().mockResolvedValue(undefined),
|
||||
messageId: vi.fn().mockImplementation(() => messageId),
|
||||
previewMode: vi.fn().mockReturnValue(params?.previewMode ?? "message"),
|
||||
previewRevision: vi.fn().mockImplementation(() => previewRevision),
|
||||
clear: vi.fn().mockResolvedValue(undefined),
|
||||
stop: vi.fn().mockImplementation(async () => {
|
||||
await params?.onStop?.();
|
||||
}),
|
||||
forceNewMessage: vi.fn().mockImplementation(() => {
|
||||
if (params?.clearMessageIdOnForceNew) {
|
||||
messageId = undefined;
|
||||
}
|
||||
}),
|
||||
setMessageId: (value: number | undefined) => {
|
||||
messageId = value;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function createSequencedTestDraftStream(startMessageId = 1001): TestDraftStream {
|
||||
let activeMessageId: number | undefined;
|
||||
let nextMessageId = startMessageId;
|
||||
let previewRevision = 0;
|
||||
return {
|
||||
update: vi.fn().mockImplementation(() => {
|
||||
if (activeMessageId == null) {
|
||||
activeMessageId = nextMessageId++;
|
||||
}
|
||||
previewRevision += 1;
|
||||
}),
|
||||
flush: vi.fn().mockResolvedValue(undefined),
|
||||
messageId: vi.fn().mockImplementation(() => activeMessageId),
|
||||
previewMode: vi.fn().mockReturnValue("message"),
|
||||
previewRevision: vi.fn().mockImplementation(() => previewRevision),
|
||||
clear: vi.fn().mockResolvedValue(undefined),
|
||||
stop: vi.fn().mockResolvedValue(undefined),
|
||||
forceNewMessage: vi.fn().mockImplementation(() => {
|
||||
activeMessageId = undefined;
|
||||
}),
|
||||
setMessageId: (value: number | undefined) => {
|
||||
activeMessageId = value;
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user