Files
tg-chat-bot/test/pipeline-fallback-notifier.test.mjs

34 lines
1.7 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
const {PipelineFallbackNotificationRegistry} = await import("../dist/ai/user-request-pipeline/fallback-notifier-registry.js");
const {resolvePipelineFallbackText} = await import("../dist/ai/user-request-pipeline/fallback-notifier-text.js");
test("pipeline fallback text maps notify_user to a user-facing message", () => {
assert.match(resolvePipelineFallbackText("document_rag", "notify_user"), /RAG/i);
assert.match(resolvePipelineFallbackText("speech_to_text", "notify_user"), /transcription/i);
assert.match(resolvePipelineFallbackText("tool_loop", "notify_user"), /tool/i);
});
test("pipeline fallback text is localized when locale is provided", () => {
assert.match(resolvePipelineFallbackText("document_rag", "notify_user", "ru"), /RAG|документ/i);
assert.match(resolvePipelineFallbackText("text_to_speech", "notify_user", "ua"), /аудіо|мовлення/i);
});
test("pipeline fallback text stays silent for continue_without_stage", () => {
assert.equal(resolvePipelineFallbackText("document_rag", "continue_without_stage"), undefined);
assert.equal(resolvePipelineFallbackText("tool_loop", "continue_without_stage"), undefined);
});
test("pipeline fallback notification registry deduplicates one request-stage-action", () => {
const registry = new PipelineFallbackNotificationRegistry();
const decision = {
stage: "tool_loop",
action: "notify_user",
};
assert.equal(registry.claim("request-1", decision), true);
assert.equal(registry.claim("request-1", decision), false);
assert.equal(registry.claim("request-2", decision), true);
});