71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { resolveMentionGating, resolveMentionGatingWithBypass } from "./mention-gating.js";
|
|
|
|
describe("resolveMentionGating", () => {
|
|
it("combines explicit, implicit, and bypass mentions", () => {
|
|
const res = resolveMentionGating({
|
|
requireMention: true,
|
|
canDetectMention: true,
|
|
wasMentioned: false,
|
|
implicitMention: true,
|
|
shouldBypassMention: false,
|
|
});
|
|
expect(res.effectiveWasMentioned).toBe(true);
|
|
expect(res.shouldSkip).toBe(false);
|
|
});
|
|
|
|
it("skips when mention required and none detected", () => {
|
|
const res = resolveMentionGating({
|
|
requireMention: true,
|
|
canDetectMention: true,
|
|
wasMentioned: false,
|
|
implicitMention: false,
|
|
shouldBypassMention: false,
|
|
});
|
|
expect(res.effectiveWasMentioned).toBe(false);
|
|
expect(res.shouldSkip).toBe(true);
|
|
});
|
|
|
|
it("does not skip when mention detection is unavailable", () => {
|
|
const res = resolveMentionGating({
|
|
requireMention: true,
|
|
canDetectMention: false,
|
|
wasMentioned: false,
|
|
});
|
|
expect(res.shouldSkip).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("resolveMentionGatingWithBypass", () => {
|
|
it("enables bypass when control commands are authorized", () => {
|
|
const res = resolveMentionGatingWithBypass({
|
|
isGroup: true,
|
|
requireMention: true,
|
|
canDetectMention: true,
|
|
wasMentioned: false,
|
|
hasAnyMention: false,
|
|
allowTextCommands: true,
|
|
hasControlCommand: true,
|
|
commandAuthorized: true,
|
|
});
|
|
expect(res.shouldBypassMention).toBe(true);
|
|
expect(res.shouldSkip).toBe(false);
|
|
});
|
|
|
|
it("does not bypass when control commands are not authorized", () => {
|
|
const res = resolveMentionGatingWithBypass({
|
|
isGroup: true,
|
|
requireMention: true,
|
|
canDetectMention: true,
|
|
wasMentioned: false,
|
|
hasAnyMention: false,
|
|
allowTextCommands: true,
|
|
hasControlCommand: true,
|
|
commandAuthorized: false,
|
|
});
|
|
expect(res.shouldBypassMention).toBe(false);
|
|
expect(res.shouldSkip).toBe(true);
|
|
});
|
|
});
|