@@ -7,16 +7,16 @@ describe("onboarding flow", () => {
77 } ) ;
88
99 it ( "returns false when browser login fails" , async ( ) => {
10+ vi . doMock ( "../../src/lib/terminal-ui.js" , ( ) => ( {
11+ promptText : vi . fn ( ) . mockResolvedValue ( "" ) ,
12+ } ) ) ;
1013 vi . doMock ( "../../src/lib/auth.js" , ( ) => ( {
1114 performBrowserLogin : vi . fn ( ) . mockRejectedValue ( new Error ( "login failed" ) ) ,
1215 AUTH_PORT : 16424 ,
1316 getLoginUrl : vi . fn ( ) . mockReturnValue ( "https://auth.alchemy.com/login" ) ,
1417 } ) ) ;
1518 vi . doMock ( "../../src/lib/update-check.js" , ( ) => ( {
16- getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [
17- " Update available 0.2.0 -> 9.9.9" ,
18- " Run npm i -g @alchemy/cli@latest to update" ,
19- ] ) ,
19+ getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [ ] ) ,
2020 } ) ) ;
2121 vi . doMock ( "../../src/lib/config.js" , ( ) => ( {
2222 load : vi . fn ( ) . mockReturnValue ( { } ) ,
@@ -40,48 +40,26 @@ describe("onboarding flow", () => {
4040
4141 it ( "returns true when browser login succeeds" , async ( ) => {
4242 const save = vi . fn ( ) ;
43+ vi . doMock ( "../../src/lib/terminal-ui.js" , ( ) => ( {
44+ promptText : vi . fn ( ) . mockResolvedValue ( "" ) ,
45+ } ) ) ;
4346 vi . doMock ( "../../src/lib/auth.js" , ( ) => ( {
4447 performBrowserLogin : vi . fn ( ) . mockResolvedValue ( {
4548 token : "test_token" ,
4649 expiresAt : "2099-01-01T00:00:00Z" ,
4750 } ) ,
4851 AUTH_PORT : 16424 ,
4952 getLoginUrl : vi . fn ( ) . mockReturnValue ( "https://auth.alchemy.com/login" ) ,
50- vi . doMock ( "../../src/lib/terminal-ui.js" , ( ) => ( {
51- promptSelect : vi . fn ( ) . mockResolvedValue ( "api-key" ) ,
52- promptText : vi . fn ( ) . mockResolvedValue ( "api_test" ) ,
53- } ) ) ;
54- vi . doMock ( "../../src/lib/update-check.js" , ( ) => ( {
55- getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [
56- " Update available 0.2.0 -> 9.9.9" ,
57- " Run npm i -g @alchemy/cli@latest to update" ,
58- ] ) ,
59- } ) ) ;
60- vi . doMock ( "../../src/lib/config.js" , ( ) => ( {
61- load,
62- save,
63- } ) ) ;
64- vi . doMock ( "../../src/lib/ui.js" , ( ) => ( {
65- brand : ( s : string ) => s ,
66- bold : ( s : string ) => s ,
67- brandedHelp : ( ) => "" ,
68- dim : ( s : string ) => s ,
69- green : ( s : string ) => s ,
70- maskIf : ( s : string ) => s ,
71- printKeyValueBox : vi . fn ( ) ,
7253 } ) ) ;
7354 vi . doMock ( "../../src/commands/auth.js" , ( ) => ( {
7455 selectAppAfterAuth : vi . fn ( ) ,
7556 } ) ) ;
7657 vi . doMock ( "../../src/lib/update-check.js" , ( ) => ( {
77- getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [
78- " Update available 0.2.0 -> 9.9.9" ,
79- " Run npm i -g @alchemy/cli@latest to update" ,
80- ] ) ,
58+ getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [ ] ) ,
8159 } ) ) ;
8260 vi . doMock ( "../../src/lib/config.js" , ( ) => ( {
8361 load : vi . fn ( ) . mockReturnValue ( { } ) ,
84- save : vi . fn ( ) ,
62+ save,
8563 } ) ) ;
8664 vi . doMock ( "../../src/lib/ui.js" , ( ) => ( {
8765 brand : ( s : string ) => s ,
@@ -92,33 +70,23 @@ describe("onboarding flow", () => {
9270 maskIf : ( s : string ) => s ,
9371 printKeyValueBox : vi . fn ( ) ,
9472 } ) ) ;
95- vi . doMock ( "../../src/lib/admin-client.js" , ( ) => ( {
96- AdminClient : vi . fn ( ) ,
97- } ) ) ;
98- vi . doMock ( "../../src/commands/config.js" , ( ) => ( {
99- selectOrCreateApp : vi . fn ( ) ,
100- } ) ) ;
101- vi . doMock ( "../../src/commands/wallet.js" , ( ) => ( {
102- generateAndPersistWallet : vi . fn ( ) ,
103- importAndPersistWallet : vi . fn ( ) ,
104- } ) ) ;
10573
74+ vi . spyOn ( console , "log" ) . mockImplementation ( ( ) => { } ) ;
10675 const { runOnboarding } = await import ( "../../src/commands/onboarding.js" ) ;
10776 const completed = await runOnboarding ( { } as never ) ;
108- expect ( completed ) . toBe ( false ) ;
77+ expect ( completed ) . toBe ( true ) ;
78+ expect ( save ) . toHaveBeenCalledWith ( {
79+ auth_token : "test_token" ,
80+ auth_token_expires_at : "2099-01-01T00:00:00Z" ,
81+ } ) ;
10982 } ) ;
11083
111- it ( "prints next steps when selected path remains incomplete" , async ( ) => {
112- const logSpy = vi . spyOn ( console , "log" ) . mockImplementation ( ( ) => { } ) ;
84+ it ( "returns false when user cancels the prompt" , async ( ) => {
11385 vi . doMock ( "../../src/lib/terminal-ui.js" , ( ) => ( {
114- promptSelect : vi . fn ( ) . mockResolvedValue ( "api-key" ) ,
115- promptText : vi . fn ( ) . mockResolvedValue ( "" ) ,
86+ promptText : vi . fn ( ) . mockResolvedValue ( null ) ,
11687 } ) ) ;
11788 vi . doMock ( "../../src/lib/update-check.js" , ( ) => ( {
118- getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [
119- " Update available 0.2.0 -> 9.9.9" ,
120- " Run npm i -g @alchemy/cli@latest to update" ,
121- ] ) ,
89+ getUpdateNoticeLines : vi . fn ( ) . mockReturnValue ( [ ] ) ,
12290 } ) ) ;
12391 vi . doMock ( "../../src/lib/config.js" , ( ) => ( {
12492 load : vi . fn ( ) . mockReturnValue ( { } ) ,
@@ -137,15 +105,14 @@ describe("onboarding flow", () => {
137105 vi . spyOn ( console , "log" ) . mockImplementation ( ( ) => { } ) ;
138106 const { runOnboarding } = await import ( "../../src/commands/onboarding.js" ) ;
139107 const completed = await runOnboarding ( { } as never ) ;
140- expect ( completed ) . toBe ( true ) ;
141- expect ( save ) . toHaveBeenCalledWith ( {
142- auth_token : "test_token" ,
143- auth_token_expires_at : "2099-01-01T00:00:00Z" ,
144- } ) ;
108+ expect ( completed ) . toBe ( false ) ;
145109 } ) ;
146110
147111 it ( "prints the update notice on the onboarding screen when provided" , async ( ) => {
148112 const logSpy = vi . spyOn ( console , "log" ) . mockImplementation ( ( ) => { } ) ;
113+ vi . doMock ( "../../src/lib/terminal-ui.js" , ( ) => ( {
114+ promptText : vi . fn ( ) . mockResolvedValue ( "" ) ,
115+ } ) ) ;
149116 vi . doMock ( "../../src/lib/auth.js" , ( ) => ( {
150117 performBrowserLogin : vi . fn ( ) . mockRejectedValue ( new Error ( "login failed" ) ) ,
151118 AUTH_PORT : 16424 ,
0 commit comments