@@ -352,6 +352,21 @@ function flushPromises() {
352352 return new Promise ( ( resolve ) => setImmediate ( resolve ) ) ;
353353}
354354
355+ function createDefaultFetch ( devices ) {
356+ const deviceList = Array . isArray ( devices ) ? devices : [ 'en0' , 'utun0' ] ;
357+ return function fetch ( url ) {
358+ if ( url === '/api/devices' ) {
359+ return Promise . resolve ( {
360+ ok : true ,
361+ json ( ) {
362+ return Promise . resolve ( { devices : deviceList , count : deviceList . length } ) ;
363+ }
364+ } ) ;
365+ }
366+ return Promise . reject ( new Error ( `fetch not mocked for ${ url } ` ) ) ;
367+ } ;
368+ }
369+
355370function createBrowserHarness ( options = { } ) {
356371 const document = new FakeDocument ( options . url || 'https://example.test/' ) ;
357372 const localStorage = new FakeStorage ( options . storage || { } ) ;
@@ -431,7 +446,12 @@ function createBrowserHarness(options = {}) {
431446 appendElement ( document , settingMenu , 'input' , 'maxHopInput' , { type : 'number' , value : '30' } ) ;
432447 appendElement ( document , settingMenu , 'input' , 'minHopInput' , { type : 'number' , value : '1' } ) ;
433448 appendElement ( document , settingMenu , 'input' , 'portInput' , { type : 'number' , value : '80' } ) ;
434- appendElement ( document , settingMenu , 'input' , 'devInput' , { type : 'text' , value : '' } ) ;
449+ appendElement ( document , settingMenu , 'input' , 'devInput' , {
450+ type : 'text' ,
451+ value : '' ,
452+ attributes : { list : 'deviceOptions' }
453+ } ) ;
454+ appendElement ( document , settingMenu , 'datalist' , 'deviceOptions' ) ;
435455 appendElement ( document , settingMenu , 'span' , 'dev-error-message' ) ;
436456 appendElement ( document , settingMenu , 'input' , 'dataProvider' , { type : 'text' , value : '' } ) ;
437457 appendElement ( document , settingMenu , 'span' , 'dp-error-message' ) ;
@@ -455,7 +475,7 @@ function createBrowserHarness(options = {}) {
455475 URLSearchParams,
456476 CustomEvent : FakeCustomEvent ,
457477 Event : FakeEvent ,
458- fetch : options . fetch || ( ( ) => Promise . reject ( new Error ( 'fetch not mocked' ) ) ) ,
478+ fetch : options . fetch || createDefaultFetch ( options . devices ) ,
459479 io : {
460480 connect ( ) {
461481 return socket ;
@@ -511,6 +531,7 @@ function createBrowserHarness(options = {}) {
511531 minHopInput : document . getElementById ( 'minHopInput' ) ,
512532 portInput : document . getElementById ( 'portInput' ) ,
513533 devInput : document . getElementById ( 'devInput' ) ,
534+ deviceOptions : document . getElementById ( 'deviceOptions' ) ,
514535 devError : document . getElementById ( 'dev-error-message' ) ,
515536 dataProvider : document . getElementById ( 'dataProvider' ) ,
516537 dpError : document . getElementById ( 'dp-error-message' ) ,
0 commit comments