Ctrl K
ComunidadGuías…

server/card-dismissal.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// Closing a question card with its X, as both respond endpoints answer it.
import { describe, expect, it, vi } from "vitest";

import { QUESTION_DISMISS_MESSAGE } from "../shared/ask-question.ts";
import { dismissQuestionCard } from "./card-dismissal.ts";
import type { Message } from "./store.ts";

const question = (card: Partial<NonNullable<Message["card"]>> = {}): Message => ({
  id: "m1", at: 1, role: "bot", kind: "options",
  card: { title: "Which file?", subtitle: "", options: ["a.ts", "b.ts"], requestId: "r1", requestType: "question", ...card },
});

describe("dismissQuestionCard", () => {
  it("closes an answered question, by the dismiss flag or by the dismiss message", () => {
    for (const body of [{ dismiss: true }, { message: QUESTION_DISMISS_MESSAGE }]) {
      const patchMessage = vi.fn();
      const pending = question({ answered: "answer", answeredText: "a.ts" });
      expect(dismissQuestionCard({ patchMessage }, "t1", pending, body)).toEqual({ status: 200, body: { ok: true, dismissed: true } });
      expect(patchMessage).toHaveBeenCalledWith("t1", "m1", { card: { ...pending.card, dismissed: true } });
    }
  });

  it("refuses to close a question nobody answered, or one already closed", () => {
    const patchMessage = vi.fn();
    const refused = { status: 409, body: { error: "answer this question before dismissing it" } };
    expect(dismissQuestionCard({ patchMessage }, "t1", question(), { dismiss: true })).toEqual(refused);
    expect(dismissQuestionCard({ patchMessage }, "t1", question({ answered: "unavailable" }), { dismiss: true })).toEqual(refused);
    expect(dismissQuestionCard({ patchMessage }, "t1", question({ answered: "answer", dismissed: true }), { dismiss: true })).toEqual(refused);
    expect(patchMessage).not.toHaveBeenCalled();
  });

  it("leaves an answer, a permission card and a missing card to the rest of the endpoint", () => {
    const patchMessage = vi.fn();
    expect(dismissQuestionCard({ patchMessage }, "t1", question({ answered: "answer" }), { message: "a.ts" })).toBeNull();
    expect(dismissQuestionCard({ patchMessage }, "t1", question({ requestType: "permission", tool: "Bash" }), { dismiss: true })).toBeNull();
    expect(dismissQuestionCard({ patchMessage }, "t1", undefined, { dismiss: true })).toBeNull();
    expect(patchMessage).not.toHaveBeenCalled();
  });
});