@@ -3,8 +3,9 @@ import userEvent from "@testing-library/user-event";
33import { beforeEach , describe , expect , it , vi } from "vitest" ;
44import { NewTaskDialog } from "./NewTaskDialog" ;
55
6- const { postMock } = vi . hoisted ( ( ) => ( {
6+ const { postMock, captureMock } = vi . hoisted ( ( ) => ( {
77 postMock : vi . fn ( ) ,
8+ captureMock : vi . fn ( ) . mockResolvedValue ( undefined ) ,
89} ) ) ;
910
1011vi . mock ( "../lib/api-client" , ( ) => ( {
@@ -19,8 +20,13 @@ vi.mock("../lib/api-client", () => ({
1920 } ,
2021} ) ) ;
2122
23+ vi . mock ( "../lib/telemetry" , ( ) => ( {
24+ captureRendererEvent : captureMock ,
25+ } ) ) ;
26+
2227beforeEach ( ( ) => {
2328 postMock . mockReset ( ) ;
29+ captureMock . mockClear ( ) ;
2430 postMock . mockResolvedValue ( { data : { session : { id : "task-1" } } , error : undefined } ) ;
2531} ) ;
2632
@@ -56,5 +62,33 @@ describe("NewTaskDialog", () => {
5662
5763 expect ( await screen . findByText ( "Title and brief are required." ) ) . toBeInTheDocument ( ) ;
5864 expect ( postMock ) . not . toHaveBeenCalled ( ) ;
65+ expect ( captureMock ) . not . toHaveBeenCalled ( ) ;
66+ } ) ;
67+
68+ it ( "emits the task_create triad on success" , async ( ) => {
69+ render ( < NewTaskDialog open projectId = "proj-1" onCreated = { vi . fn ( ) } onOpenChange = { vi . fn ( ) } /> ) ;
70+
71+ await userEvent . type ( screen . getByLabelText ( "Title" ) , "Fix fallback renderer" ) ;
72+ await userEvent . type ( screen . getByLabelText ( "Brief" ) , "Restore the fallback renderer." ) ;
73+ await userEvent . click ( screen . getByRole ( "button" , { name : "Start task" } ) ) ;
74+
75+ await waitFor ( ( ) =>
76+ expect ( captureMock ) . toHaveBeenCalledWith ( "ao.renderer.task_create_succeeded" , { project_id : "proj-1" } ) ,
77+ ) ;
78+ expect ( captureMock ) . toHaveBeenCalledWith ( "ao.renderer.task_create_requested" , { project_id : "proj-1" } ) ;
79+ expect ( captureMock ) . not . toHaveBeenCalledWith ( "ao.renderer.task_create_failed" , expect . anything ( ) ) ;
80+ } ) ;
81+
82+ it ( "emits task_create_failed when the daemon rejects the task" , async ( ) => {
83+ postMock . mockResolvedValue ( { data : undefined , error : { message : "no such project" } } ) ;
84+ render ( < NewTaskDialog open projectId = "proj-1" onCreated = { vi . fn ( ) } onOpenChange = { vi . fn ( ) } /> ) ;
85+
86+ await userEvent . type ( screen . getByLabelText ( "Title" ) , "Fix fallback renderer" ) ;
87+ await userEvent . type ( screen . getByLabelText ( "Brief" ) , "Restore the fallback renderer." ) ;
88+ await userEvent . click ( screen . getByRole ( "button" , { name : "Start task" } ) ) ;
89+
90+ expect ( await screen . findByText ( "no such project" ) ) . toBeInTheDocument ( ) ;
91+ expect ( captureMock ) . toHaveBeenCalledWith ( "ao.renderer.task_create_failed" , { project_id : "proj-1" } ) ;
92+ expect ( captureMock ) . not . toHaveBeenCalledWith ( "ao.renderer.task_create_succeeded" , expect . anything ( ) ) ;
5993 } ) ;
6094} ) ;
0 commit comments