import React from "react";
import { describe, it, expect, vi, beforeEach } from "vitest";
import { render, screen, fireEvent } from "@testing-library/react";
import { AssistantMessage } from "@ag-ui/core";
import { CopilotChatAssistantMessage } from "../CopilotChatAssistantMessage";
import { CopilotChatConfigurationProvider } from "../../../providers/CopilotChatConfigurationProvider";
import { CopilotKitProvider } from "../../../providers/CopilotKitProvider";
const TEST_THREAD_ID = "test-thread";
const renderWithProvider = (component: React.ReactElement) => {
return render(
{component}
,
);
};
describe("CopilotChatAssistantMessage thumbs callbacks (#3457)", () => {
const message: AssistantMessage = {
id: "msg-1",
role: "assistant",
content: "Hello from the assistant",
};
it("onThumbsUp receives AssistantMessage, not SyntheticEvent", () => {
const onThumbsUp = vi.fn();
renderWithProvider(
,
);
const thumbsUpButton = screen.getByRole("button", {
name: /good response/i,
});
fireEvent.click(thumbsUpButton);
expect(onThumbsUp).toHaveBeenCalledTimes(1);
const arg = onThumbsUp.mock.calls[0][0];
// Should receive AssistantMessage
expect(arg).toHaveProperty("id", "msg-1");
expect(arg).toHaveProperty("role", "assistant");
expect(arg).toHaveProperty("content", "Hello from the assistant");
// Should NOT receive a SyntheticEvent (which has nativeEvent, target, etc.)
expect(arg).not.toHaveProperty("nativeEvent");
});
it("onThumbsDown receives AssistantMessage, not SyntheticEvent", () => {
const onThumbsDown = vi.fn();
renderWithProvider(
,
);
const thumbsDownButton = screen.getByRole("button", {
name: /bad response/i,
});
fireEvent.click(thumbsDownButton);
expect(onThumbsDown).toHaveBeenCalledTimes(1);
const arg = onThumbsDown.mock.calls[0][0];
expect(arg).toHaveProperty("id", "msg-1");
expect(arg).toHaveProperty("role", "assistant");
expect(arg).toHaveProperty("content", "Hello from the assistant");
expect(arg).not.toHaveProperty("nativeEvent");
});
});