33import { assert } from 'chai' ;
44import { anything , instance , mock , verify , when } from 'ts-mockito' ;
55
6+ import * as sinon from 'sinon' ;
67import { QuickPickItem } from 'vscode' ;
78import { ApplicationShell } from '../../../client/common/application/applicationShell' ;
9+ import { ClipboardService } from '../../../client/common/application/clipboard' ;
810import { CommandManager } from '../../../client/common/application/commandManager' ;
9- import { ICommandManager } from '../../../client/common/application/types' ;
11+ import { IClipboard , ICommandManager } from '../../../client/common/application/types' ;
1012import { ConfigurationService } from '../../../client/common/configuration/service' ;
1113import { IDataScienceSettings } from '../../../client/common/types' ;
1214import { DataScience } from '../../../client/common/utils/localize' ;
1315import { noop } from '../../../client/common/utils/misc' ;
14- import { MultiStepInputFactory } from '../../../client/common/utils/multiStepInput' ;
16+ import { MultiStepInput , MultiStepInputFactory } from '../../../client/common/utils/multiStepInput' ;
1517import { addToUriList } from '../../../client/datascience/common' ;
1618import { Settings } from '../../../client/datascience/constants' ;
1719import { JupyterServerSelector } from '../../../client/datascience/jupyter/serverSelector' ;
@@ -24,6 +26,8 @@ suite('Data Science - Jupyter Server URI Selector', () => {
2426 let quickPick : MockQuickPick | undefined ;
2527 let cmdManager : ICommandManager ;
2628 let dsSettings : IDataScienceSettings ;
29+ let clipboard : IClipboard ;
30+
2731 function createDataScienceObject (
2832 quickPickSelection : string ,
2933 inputSelection : string ,
@@ -34,6 +38,7 @@ suite('Data Science - Jupyter Server URI Selector', () => {
3438 jupyterServerURI : Settings . JupyterServerLocalLaunch
3539 // tslint:disable-next-line: no-any
3640 } as any ;
41+ clipboard = mock ( ClipboardService ) ;
3742 const configService = mock ( ConfigurationService ) ;
3843 const applicationShell = mock ( ApplicationShell ) ;
3944 cmdManager = mock ( CommandManager ) ;
@@ -53,9 +58,17 @@ suite('Data Science - Jupyter Server URI Selector', () => {
5358 }
5459 ) ;
5560
56- return new JupyterServerSelector ( storage , multiStepFactory , instance ( configService ) , instance ( cmdManager ) ) ;
61+ return new JupyterServerSelector (
62+ storage ,
63+ instance ( clipboard ) ,
64+ multiStepFactory ,
65+ instance ( configService ) ,
66+ instance ( cmdManager )
67+ ) ;
5768 }
5869
70+ teardown ( ( ) => sinon . restore ( ) ) ;
71+
5972 test ( 'Local pick server uri' , async ( ) => {
6073 let value = '' ;
6174 const ds = createDataScienceObject ( '$(zap) Default' , '' , v => ( value = v ) ) ;
@@ -166,4 +179,36 @@ suite('Data Science - Jupyter Server URI Selector', () => {
166179 assert . notEqual ( value , 'httx://localhost:1111' , 'Already running should validate' ) ;
167180 assert . equal ( value , '' , 'Validation failed' ) ;
168181 } ) ;
182+
183+ suite ( 'Default Uri when selecting remote uri' , ( ) => {
184+ const defaultUri = 'https://hostname:8080/?token=849d61a414abafab97bc4aab1f3547755ddc232c2b8cb7fe' ;
185+
186+ async function testDefaultUri ( expectedDefaultUri : string , clipboardValue ?: string ) {
187+ const showInputBox = sinon . spy ( MultiStepInput . prototype , 'showInputBox' ) ;
188+ const ds = createDataScienceObject ( '$(server) Existing' , 'http://localhost:1111' , noop ) ;
189+ when ( clipboard . readText ( ) ) . thenResolve ( clipboardValue || '' ) ;
190+
191+ await ds . selectJupyterURI ( ) ;
192+
193+ assert . equal ( showInputBox . firstCall . args [ 0 ] . value , expectedDefaultUri ) ;
194+ }
195+
196+ test ( 'Display default uri' , async ( ) => {
197+ await testDefaultUri ( defaultUri ) ;
198+ } ) ;
199+ test ( 'Display default uri if clipboard is empty' , async ( ) => {
200+ await testDefaultUri ( defaultUri , '' ) ;
201+ } ) ;
202+ test ( 'Display default uri if clipboard contains invalid uri, display default uri' , async ( ) => {
203+ await testDefaultUri ( defaultUri , 'Hello World!' ) ;
204+ } ) ;
205+ test ( 'Display default uri if clipboard contains invalid file uri, display default uri' , async ( ) => {
206+ await testDefaultUri ( defaultUri , 'file://test.pdf' ) ;
207+ } ) ;
208+ test ( 'Display default uri if clipboard contains a valid uri, display uri from clipboard' , async ( ) => {
209+ const validUri = 'https://wow:0909/?password=1234' ;
210+
211+ await testDefaultUri ( validUri , validUri ) ;
212+ } ) ;
213+ } ) ;
169214} ) ;
0 commit comments