mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-12 12:18:55 +02:00
90 lines
2.8 KiB
TypeScript
90 lines
2.8 KiB
TypeScript
// @vitest-environment jsdom
|
|
|
|
import { cleanup, screen } from "@testing-library/react";
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import type { AgentTask } from "@multica/core/types";
|
|
import { renderWithI18n } from "../../test/i18n";
|
|
|
|
const mockState = vi.hoisted(() => ({
|
|
taskMessagesOptions: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@multica/core/chat/queries", () => ({
|
|
taskMessagesOptions: mockState.taskMessagesOptions,
|
|
}));
|
|
|
|
vi.mock("../../common/actor-avatar", () => ({
|
|
ActorAvatar: () => <span data-testid="actor-avatar" />,
|
|
}));
|
|
|
|
vi.mock("../../common/task-transcript", () => ({
|
|
TranscriptButton: ({ title }: { title?: string }) => (
|
|
<button type="button">{title ?? "Transcript"}</button>
|
|
),
|
|
}));
|
|
|
|
vi.mock("./terminate-task-confirm-dialog", () => ({
|
|
TerminateTaskConfirmDialog: () => null,
|
|
}));
|
|
|
|
import { ActiveTaskRow } from "./execution-log-section";
|
|
|
|
function makeTask(overrides: Partial<AgentTask> = {}): AgentTask {
|
|
return {
|
|
id: "task-1",
|
|
agent_id: "agent-1",
|
|
runtime_id: "runtime-1",
|
|
issue_id: "issue-1",
|
|
status: "running",
|
|
priority: 0,
|
|
dispatched_at: null,
|
|
started_at: "2026-06-08T08:00:00Z",
|
|
completed_at: null,
|
|
result: null,
|
|
error: null,
|
|
created_at: "2026-06-08T08:00:00Z",
|
|
trigger_summary: "Started from comment",
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
beforeEach(() => {
|
|
cleanup();
|
|
vi.clearAllMocks();
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date("2026-06-08T08:05:04Z"));
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
describe("ActiveTaskRow", () => {
|
|
it("renders running status as elapsed time only", () => {
|
|
renderWithI18n(<ActiveTaskRow task={makeTask()} issueId="issue-1" />);
|
|
|
|
expect(screen.getByText("5m 04s")).toBeInTheDocument();
|
|
expect(screen.queryByText(/events?/i)).not.toBeInTheDocument();
|
|
expect(screen.getByText("Started from comment")).toBeInTheDocument();
|
|
expect(screen.getByText("View transcript")).toBeInTheDocument();
|
|
expect(mockState.taskMessagesOptions).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("does not make transcript actions depend on hover-only rendering", () => {
|
|
renderWithI18n(<ActiveTaskRow task={makeTask()} issueId="issue-1" />);
|
|
|
|
const transcriptButton = screen.getByRole("button", { name: "View transcript" });
|
|
const status = screen.getByText("5m 04s");
|
|
|
|
expect(status.parentElement?.className).toContain("flex h-7");
|
|
expect(status.parentElement?.className).toContain(
|
|
"[@media(hover:hover)]:group-hover/execution-log-row:hidden",
|
|
);
|
|
expect(transcriptButton.parentElement?.className).toContain("flex h-7");
|
|
expect(transcriptButton.parentElement?.className).toContain("[@media(hover:hover)]:hidden");
|
|
expect(transcriptButton.parentElement?.className).toContain(
|
|
"[@media(hover:hover)]:group-hover/execution-log-row:flex",
|
|
);
|
|
});
|
|
});
|