@@ -24,53 +24,57 @@ suite('JupyterPasswordConnect', () => {
2424 jupyterPasswordConnect = new JupyterPasswordConnect ( appShell . object ) ;
2525 } ) ;
2626
27- test ( 'getPasswordConnectionInfo' , async ( ) => {
27+ function createMockSetup ( secure : boolean , ok : boolean ) {
2828 // Set up our fake node fetch
2929 const fetchMock : typemoq . IMock < typeof nodeFetch . default > = typemoq . Mock . ofInstance ( nodeFetch . default ) ;
3030
31+ //tslint:disable-next-line:no-http-string
32+ const rootUrl = secure ? 'https://TESTNAME:8888/' : 'http://TESTNAME:8888/' ;
33+
3134 // Mock our first call to get xsrf cookie
3235 const mockXsrfResponse = typemoq . Mock . ofType ( nodeFetch . Response ) ;
3336 const mockXsrfHeaders = typemoq . Mock . ofType ( nodeFetch . Headers ) ;
34- mockXsrfHeaders
35- . setup ( ( mh ) => mh . get ( 'set-cookie' ) )
36- . returns ( ( ) => `_xsrf=${ xsrfValue } ` )
37- . verifiable ( typemoq . Times . once ( ) ) ;
38- mockXsrfResponse
39- . setup ( ( mr ) => mr . ok )
40- . returns ( ( ) => true )
41- . verifiable ( typemoq . Times . once ( ) ) ;
42- mockXsrfResponse
43- . setup ( ( mr ) => mr . headers )
44- . returns ( ( ) => mockXsrfHeaders . object )
45- . verifiable ( typemoq . Times . once ( ) ) ;
37+ mockXsrfHeaders . setup ( ( mh ) => mh . get ( 'set-cookie' ) ) . returns ( ( ) => `_xsrf=${ xsrfValue } ` ) ;
38+ mockXsrfResponse . setup ( ( mr ) => mr . ok ) . returns ( ( ) => ok ) ;
39+ mockXsrfResponse . setup ( ( mr ) => mr . status ) . returns ( ( ) => 302 ) ;
40+ mockXsrfResponse . setup ( ( mr ) => mr . headers ) . returns ( ( ) => mockXsrfHeaders . object ) ;
4641
42+ fetchMock
43+ . setup ( ( fm ) =>
44+ fm (
45+ `${ rootUrl } login?` ,
46+ typemoq . It . isObjectWith ( {
47+ method : 'get' ,
48+ headers : { Connection : 'keep-alive' }
49+ } )
50+ )
51+ )
52+ . returns ( ( ) => Promise . resolve ( mockXsrfResponse . object ) ) ;
4753 fetchMock
4854 . setup ( ( fm ) =>
4955 //tslint:disable-next-line:no-http-string
50- fm ( 'http://TESTNAME:8888/login?' , {
51- method : 'get' ,
52- redirect : 'manual' ,
53- headers : { Connection : 'keep-alive' }
54- } )
56+ fm (
57+ `${ rootUrl } tree?` ,
58+ typemoq . It . isObjectWith ( {
59+ method : 'get' ,
60+ headers : { Connection : 'keep-alive' }
61+ } )
62+ )
5563 )
56- . returns ( ( ) => Promise . resolve ( mockXsrfResponse . object ) )
57- . verifiable ( typemoq . Times . once ( ) ) ;
64+ . returns ( ( ) => Promise . resolve ( mockXsrfResponse . object ) ) ;
65+
66+ return { fetchMock, mockXsrfHeaders, mockXsrfResponse } ;
67+ }
68+
69+ test ( 'getPasswordConnectionInfo' , async ( ) => {
70+ const { fetchMock, mockXsrfHeaders, mockXsrfResponse } = createMockSetup ( false , true ) ;
5871
5972 // Mock our second call to get session cookie
6073 const mockSessionResponse = typemoq . Mock . ofType ( nodeFetch . Response ) ;
6174 const mockSessionHeaders = typemoq . Mock . ofType ( nodeFetch . Headers ) ;
62- mockSessionHeaders
63- . setup ( ( mh ) => mh . get ( 'set-cookie' ) )
64- . returns ( ( ) => `${ sessionName } =${ sessionValue } ` )
65- . verifiable ( typemoq . Times . once ( ) ) ;
66- mockSessionResponse
67- . setup ( ( mr ) => mr . status )
68- . returns ( ( ) => 302 )
69- . verifiable ( typemoq . Times . once ( ) ) ;
70- mockSessionResponse
71- . setup ( ( mr ) => mr . headers )
72- . returns ( ( ) => mockSessionHeaders . object )
73- . verifiable ( typemoq . Times . once ( ) ) ;
75+ mockSessionHeaders . setup ( ( mh ) => mh . get ( 'set-cookie' ) ) . returns ( ( ) => `${ sessionName } =${ sessionValue } ` ) ;
76+ mockSessionResponse . setup ( ( mr ) => mr . status ) . returns ( ( ) => 302 ) ;
77+ mockSessionResponse . setup ( ( mr ) => mr . headers ) . returns ( ( ) => mockSessionHeaders . object ) ;
7478
7579 // typemoq doesn't love this comparison, so generalize it a bit
7680 fetchMock
@@ -88,8 +92,7 @@ suite('JupyterPasswordConnect', () => {
8892 } )
8993 )
9094 )
91- . returns ( ( ) => Promise . resolve ( mockSessionResponse . object ) )
92- . verifiable ( typemoq . Times . once ( ) ) ;
95+ . returns ( ( ) => Promise . resolve ( mockSessionResponse . object ) ) ;
9396
9497 const result = await jupyterPasswordConnect . getPasswordConnectionInfo (
9598 //tslint:disable-next-line:no-http-string
@@ -113,38 +116,7 @@ suite('JupyterPasswordConnect', () => {
113116 } ) ;
114117
115118 test ( 'getPasswordConnectionInfo allowUnauthorized' , async ( ) => {
116- // Set up our fake node fetch
117- const fetchMock : typemoq . IMock < typeof nodeFetch . default > = typemoq . Mock . ofInstance ( nodeFetch . default ) ;
118-
119- // Mock our first call to get xsrf cookie
120- const mockXsrfResponse = typemoq . Mock . ofType ( nodeFetch . Response ) ;
121- const mockXsrfHeaders = typemoq . Mock . ofType ( nodeFetch . Headers ) ;
122- mockXsrfHeaders
123- . setup ( ( mh ) => mh . get ( 'set-cookie' ) )
124- . returns ( ( ) => `_xsrf=${ xsrfValue } ` )
125- . verifiable ( typemoq . Times . once ( ) ) ;
126- mockXsrfResponse
127- . setup ( ( mr ) => mr . ok )
128- . returns ( ( ) => true )
129- . verifiable ( typemoq . Times . once ( ) ) ;
130- mockXsrfResponse
131- . setup ( ( mr ) => mr . headers )
132- . returns ( ( ) => mockXsrfHeaders . object )
133- . verifiable ( typemoq . Times . once ( ) ) ;
134-
135- //tslint:disable-next-line:no-http-string
136- fetchMock
137- . setup ( ( fm ) =>
138- fm (
139- 'https://TESTNAME:8888/login?' ,
140- typemoq . It . isObjectWith ( {
141- method : 'get' ,
142- headers : { Connection : 'keep-alive' }
143- } )
144- )
145- )
146- . returns ( ( ) => Promise . resolve ( mockXsrfResponse . object ) )
147- . verifiable ( typemoq . Times . once ( ) ) ;
119+ const { fetchMock, mockXsrfHeaders, mockXsrfResponse } = createMockSetup ( true , true ) ;
148120
149121 // Mock our second call to get session cookie
150122 const mockSessionResponse = typemoq . Mock . ofType ( nodeFetch . Response ) ;
@@ -153,14 +125,8 @@ suite('JupyterPasswordConnect', () => {
153125 . setup ( ( mh ) => mh . get ( 'set-cookie' ) )
154126 . returns ( ( ) => `${ sessionName } =${ sessionValue } ` )
155127 . verifiable ( typemoq . Times . once ( ) ) ;
156- mockSessionResponse
157- . setup ( ( mr ) => mr . status )
158- . returns ( ( ) => 302 )
159- . verifiable ( typemoq . Times . once ( ) ) ;
160- mockSessionResponse
161- . setup ( ( mr ) => mr . headers )
162- . returns ( ( ) => mockSessionHeaders . object )
163- . verifiable ( typemoq . Times . once ( ) ) ;
128+ mockSessionResponse . setup ( ( mr ) => mr . status ) . returns ( ( ) => 302 ) ;
129+ mockSessionResponse . setup ( ( mr ) => mr . headers ) . returns ( ( ) => mockSessionHeaders . object ) ;
164130
165131 // typemoq doesn't love this comparison, so generalize it a bit
166132 //tslint:disable-next-line:no-http-string
@@ -178,8 +144,7 @@ suite('JupyterPasswordConnect', () => {
178144 } )
179145 )
180146 )
181- . returns ( ( ) => Promise . resolve ( mockSessionResponse . object ) )
182- . verifiable ( typemoq . Times . once ( ) ) ;
147+ . returns ( ( ) => Promise . resolve ( mockSessionResponse . object ) ) ;
183148
184149 //tslint:disable-next-line:no-http-string
185150 const result = await jupyterPasswordConnect . getPasswordConnectionInfo (
@@ -203,37 +168,7 @@ suite('JupyterPasswordConnect', () => {
203168 } ) ;
204169
205170 test ( 'getPasswordConnectionInfo failure' , async ( ) => {
206- // Set up our fake node fetch
207- const fetchMock : typemoq . IMock < typeof nodeFetch . default > = typemoq . Mock . ofInstance ( nodeFetch . default ) ;
208-
209- // Mock our first call to get xsrf cookie
210- const mockXsrfResponse = typemoq . Mock . ofType ( nodeFetch . Response ) ;
211- const mockXsrfHeaders = typemoq . Mock . ofType ( nodeFetch . Headers ) ;
212- mockXsrfHeaders
213- . setup ( ( mh ) => mh . get ( 'set-cookie' ) )
214- . returns ( ( ) => `_xsrf=${ xsrfValue } ` )
215- . verifiable ( typemoq . Times . never ( ) ) ;
216- // Status set to not ok and header fetch should not be hit
217- mockXsrfResponse
218- . setup ( ( mr ) => mr . ok )
219- . returns ( ( ) => false )
220- . verifiable ( typemoq . Times . once ( ) ) ;
221- mockXsrfResponse
222- . setup ( ( mr ) => mr . headers )
223- . returns ( ( ) => mockXsrfHeaders . object )
224- . verifiable ( typemoq . Times . never ( ) ) ;
225-
226- fetchMock
227- . setup ( ( fm ) =>
228- //tslint:disable-next-line:no-http-string
229- fm ( 'http://TESTNAME:8888/login?' , {
230- method : 'get' ,
231- redirect : 'manual' ,
232- headers : { Connection : 'keep-alive' }
233- } )
234- )
235- . returns ( ( ) => Promise . resolve ( mockXsrfResponse . object ) )
236- . verifiable ( typemoq . Times . once ( ) ) ;
171+ const { fetchMock, mockXsrfHeaders, mockXsrfResponse } = createMockSetup ( false , false ) ;
237172
238173 const result = await jupyterPasswordConnect . getPasswordConnectionInfo (
239174 //tslint:disable-next-line:no-http-string
0 commit comments