@@ -427,4 +427,82 @@ describe('Call', function() {
427427 expect ( client . client . mediaHandler . getUserMediaStream ) . toHaveBeenNthCalledWith ( 1 , true , true ) ;
428428 expect ( client . client . mediaHandler . getUserMediaStream ) . toHaveBeenNthCalledWith ( 2 , true , false ) ;
429429 } ) ;
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+ } ) ;
430508} ) ;
0 commit comments