@@ -427,4 +427,82 @@ describe('Call', function() {
427
427
expect ( client . client . mediaHandler . getUserMediaStream ) . toHaveBeenNthCalledWith ( 1 , true , true ) ;
428
428
expect ( client . client . mediaHandler . getUserMediaStream ) . toHaveBeenNthCalledWith ( 2 , true , false ) ;
429
429
} ) ;
430
+
431
+ it ( "should handle mid-call device changes" , async ( ) => {
432
+ client . client . mediaHandler . getUserMediaStream = jest . fn ( ) . mockReturnValue (
433
+ new MockMediaStream (
434
+ "stream" , [
435
+ new MockMediaStreamTrack ( "audio_track" , "audio" ) ,
436
+ new MockMediaStreamTrack ( "video_track" , "video" ) ,
437
+ ] ,
438
+ ) ,
439
+ ) ;
440
+
441
+ const callPromise = call . placeVideoCall ( ) ;
442
+ await client . httpBackend . flush ( ) ;
443
+ await callPromise ;
444
+
445
+ await call . onAnswerReceived ( {
446
+ getContent : ( ) => {
447
+ return {
448
+ version : 1 ,
449
+ call_id : call . callId ,
450
+ party_id : 'party_id' ,
451
+ answer : {
452
+ sdp : DUMMY_SDP ,
453
+ } ,
454
+ } ;
455
+ } ,
456
+ } ) ;
457
+
458
+ await call . updateLocalUsermediaStream (
459
+ new MockMediaStream (
460
+ "replacement_stream" ,
461
+ [
462
+ new MockMediaStreamTrack ( "new_audio_track" , "audio" ) ,
463
+ new MockMediaStreamTrack ( "video_track" , "video" ) ,
464
+ ] ,
465
+ ) ,
466
+ ) ;
467
+ expect ( call . localUsermediaStream . id ) . toBe ( "stream" ) ;
468
+ expect ( call . localUsermediaStream . getAudioTracks ( ) [ 0 ] . id ) . toBe ( "new_audio_track" ) ;
469
+ expect ( call . localUsermediaStream . getVideoTracks ( ) [ 0 ] . id ) . toBe ( "video_track" ) ;
470
+ expect ( call . usermediaSenders . find ( ( sender ) => {
471
+ return sender ?. track ?. kind === "audio" ;
472
+ } ) . track . id ) . toBe ( "new_audio_track" ) ;
473
+ expect ( call . usermediaSenders . find ( ( sender ) => {
474
+ return sender ?. track ?. kind === "video" ;
475
+ } ) . track . id ) . toBe ( "video_track" ) ;
476
+ } ) ;
477
+
478
+ it ( "should handle upgrade to video call" , async ( ) => {
479
+ const callPromise = call . placeVoiceCall ( ) ;
480
+ await client . httpBackend . flush ( ) ;
481
+ await callPromise ;
482
+
483
+ await call . onAnswerReceived ( {
484
+ getContent : ( ) => {
485
+ return {
486
+ version : 1 ,
487
+ call_id : call . callId ,
488
+ party_id : 'party_id' ,
489
+ answer : {
490
+ sdp : DUMMY_SDP ,
491
+ } ,
492
+ [ SDPStreamMetadataKey ] : { } ,
493
+ } ;
494
+ } ,
495
+ } ) ;
496
+
497
+ await call . upgradeCall ( false , true ) ;
498
+
499
+ expect ( call . localUsermediaStream . getAudioTracks ( ) [ 0 ] . id ) . toBe ( "audio_track" ) ;
500
+ expect ( call . localUsermediaStream . getVideoTracks ( ) [ 0 ] . id ) . toBe ( "video_track" ) ;
501
+ expect ( call . usermediaSenders . find ( ( sender ) => {
502
+ return sender ?. track ?. kind === "audio" ;
503
+ } ) . track . id ) . toBe ( "audio_track" ) ;
504
+ expect ( call . usermediaSenders . find ( ( sender ) => {
505
+ return sender ?. track ?. kind === "video" ;
506
+ } ) . track . id ) . toBe ( "video_track" ) ;
507
+ } ) ;
430
508
} ) ;
0 commit comments