1- import type { Dispatch , SetStateAction } from "react"
1+ import type { SetStateAction } from "react"
22import { describe , expect , it , vi } from "vitest"
33
44import { createInitialFlowView , type CreateFlowView , resolveCreateFlowSteps } from "../../src/docker-git/menu-create-shared.js"
55import type { BrowserActionContext } from "../../src/web/actions.js"
66import { submitCreateView } from "../../src/web/app-ready-create.js"
77
8+ const createSetter = < A > ( ) => vi . fn ( ( _value : SetStateAction < A > ) => undefined )
9+
810const createBrowserActionContext = ( ) : BrowserActionContext => ( {
11+ addTerminalSession : vi . fn ( ) ,
12+ databaseConnectionInput : "" ,
13+ databaseLabelInput : "" ,
914 githubStatus : {
10- tokens : [ { status : "valid" } ]
11- } as never ,
15+ summary : "ok" ,
16+ tokens : [ { key : "GITHUB_TOKEN" , label : "default" , login : "octocat" , status : "valid" } ]
17+ } ,
18+ portForwardInput : "" ,
19+ reloadDashboard : vi . fn ( ) ,
20+ selectedProjectId : null ,
21+ selectedProjectKey : null ,
22+ selectedProjectName : null ,
1223 setActionPrompt : vi . fn ( ) ,
13- setActiveScreen : vi . fn ( ) ,
24+ setActiveScreen : createSetter ( ) ,
25+ setAuthSnapshot : createSetter ( ) ,
26+ setBusyLabel : createSetter ( ) ,
27+ setDatabaseConnectionInput : createSetter ( ) ,
28+ setDatabaseForwards : createSetter ( ) ,
29+ setDatabaseLabelInput : createSetter ( ) ,
30+ setDatabaseProfiles : createSetter ( ) ,
31+ setDatabaseSession : createSetter ( ) ,
32+ setGithubStatus : createSetter ( ) ,
1433 setMessage : vi . fn ( ) ,
15- setSelectedMenuIndex : vi . fn ( )
16- } as unknown as BrowserActionContext )
34+ setOutput : createSetter ( ) ,
35+ setPortForwardInput : createSetter ( ) ,
36+ setPortForwards : createSetter ( ) ,
37+ setProjectAuthSnapshot : createSetter ( ) ,
38+ setProjectBrowser : createSetter ( ) ,
39+ setProjectTaskLogs : createSetter ( ) ,
40+ setProjectTasks : createSetter ( ) ,
41+ setSelectedMenuIndex : createSetter ( ) ,
42+ setSelectedProject : createSetter ( ) ,
43+ setSelectedProjectId : createSetter ( )
44+ } )
1745
1846describe ( "app-ready-create" , ( ) => {
1947 it ( "advances to the next create field on Enter for a repo URL" , ( ) => {
2048 const context = createBrowserActionContext ( )
21- const setCreateViewSpy = vi . fn ( )
22- const setCreateView = setCreateViewSpy as unknown as Dispatch < SetStateAction < CreateFlowView > >
49+ const setCreateView = createSetter < CreateFlowView > ( )
2350
2451 submitCreateView ( {
2552 context,
@@ -29,8 +56,12 @@ describe("app-ready-create", () => {
2956 setCreateView
3057 } )
3158
32- expect ( setCreateViewSpy ) . toHaveBeenCalledTimes ( 1 )
33- const nextView = setCreateViewSpy . mock . calls [ 0 ] ?. [ 0 ]
59+ expect ( setCreateView ) . toHaveBeenCalledTimes ( 1 )
60+ const nextViewAction = setCreateView . mock . calls [ 0 ] ?. [ 0 ]
61+ if ( nextViewAction === undefined || typeof nextViewAction === "function" ) {
62+ throw new Error ( "Expected create view object update" )
63+ }
64+ const nextView = nextViewAction
3465 expect ( nextView ) . toMatchObject ( {
3566 step : 1 ,
3667 values : {
@@ -52,8 +83,7 @@ describe("app-ready-create", () => {
5283
5384 it ( "shows a parse error instead of submitting on invalid inline flags" , ( ) => {
5485 const context = createBrowserActionContext ( )
55- const setCreateViewSpy = vi . fn ( )
56- const setCreateView = setCreateViewSpy as unknown as Dispatch < SetStateAction < CreateFlowView > >
86+ const setCreateView = createSetter < CreateFlowView > ( )
5787
5888 submitCreateView ( {
5989 context,
@@ -63,7 +93,7 @@ describe("app-ready-create", () => {
6393 setCreateView
6494 } )
6595
66- expect ( setCreateViewSpy ) . not . toHaveBeenCalled ( )
96+ expect ( setCreateView ) . not . toHaveBeenCalled ( )
6797 expect ( context . setMessage ) . toHaveBeenCalledWith ( "Missing value for option: --bogus" )
6898 } )
6999} )
0 commit comments