Skip to content

Commit 78fa119

Browse files
committed
Improve mock classes
Signed-off-by: Šimon Brandner <[email protected]>
1 parent f05a240 commit 78fa119

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

spec/unit/webrtc/call.spec.ts

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,34 @@ class MockRTCPeerConnection {
8282
}
8383
close() {}
8484
getStats() { return []; }
85+
addTrack(track: MockMediaStreamTrack) {return new MockRTCRtpSender(track);}
86+
}
87+
88+
class MockRTCRtpSender {
89+
constructor(public track: MockMediaStreamTrack) {}
90+
91+
replaceTrack(track: MockMediaStreamTrack) {this.track = track;}
92+
}
93+
94+
class MockMediaStreamTrack {
95+
constructor(public readonly id: string, public readonly kind: "audio" | "video", public enabled = true) {}
96+
97+
stop() {}
8598
}
8699

87100
class MockMediaStream {
88101
constructor(
89102
public id: string,
103+
private tracks: MockMediaStreamTrack[] = [],
90104
) {}
91105

92-
getTracks() { return []; }
93-
getAudioTracks() { return [{ enabled: true }]; }
94-
getVideoTracks() { return [{ enabled: true }]; }
106+
getTracks() { return this.tracks; }
107+
getAudioTracks() { return this.tracks.filter((track) => track.kind === "audio"); }
108+
getVideoTracks() { return this.tracks.filter((track) => track.kind === "video"); }
95109
addEventListener() {}
110+
removeEventListener() { }
111+
addTrack(track: MockMediaStreamTrack) {this.tracks.push(track);}
112+
removeTrack(track: MockMediaStreamTrack) {this.tracks.splice(this.tracks.indexOf(track), 1);}
96113
}
97114

98115
class MockMediaDeviceInfo {
@@ -102,7 +119,13 @@ class MockMediaDeviceInfo {
102119
}
103120

104121
class MockMediaHandler {
105-
getUserMediaStream() { return new MockMediaStream("mock_stream_from_media_handler"); }
122+
getUserMediaStream(audio: boolean, video: boolean) {
123+
const tracks = [];
124+
if (audio) tracks.push(new MockMediaStreamTrack("audio_track", "audio"));
125+
if (video) tracks.push(new MockMediaStreamTrack("video_track", "video"));
126+
127+
return new MockMediaStream("mock_stream_from_media_handler", tracks);
128+
}
106129
stopUserMediaStream() {}
107130
}
108131

@@ -350,7 +373,15 @@ describe('Call', function() {
350373
},
351374
});
352375

353-
call.pushRemoteFeed(new MockMediaStream("remote_stream"));
376+
call.pushRemoteFeed(
377+
new MockMediaStream(
378+
"remote_stream",
379+
[
380+
new MockMediaStreamTrack("remote_audio_track", "audio"),
381+
new MockMediaStreamTrack("remote_video_track", "video"),
382+
],
383+
),
384+
);
354385
const feed = call.getFeeds().find((feed) => feed.stream.id === "remote_stream");
355386
expect(feed?.purpose).toBe(SDPStreamMetadataPurpose.Usermedia);
356387
expect(feed?.isAudioMuted()).toBeTruthy();

0 commit comments

Comments
 (0)