mirror of
https://github.com/vector-im/element-call.git
synced 2026-08-29 21:15:19 +00:00
Add tests
This commit is contained in:
@@ -1291,6 +1291,51 @@ describe("waitForCallPickup$", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("ringing -> unknown if we get disconnected", () => {
|
||||||
|
withTestScheduler(({ behavior, schedule, expectObservable }) => {
|
||||||
|
const connectionState$ = new BehaviorSubject(ConnectionState.Connected);
|
||||||
|
// Someone joins at 20ms (both LiveKit participant and MatrixRTC member)
|
||||||
|
withCallViewModel(
|
||||||
|
{
|
||||||
|
remoteParticipants$: behavior("a 19ms b", {
|
||||||
|
a: [],
|
||||||
|
b: [aliceParticipant],
|
||||||
|
}),
|
||||||
|
rtcMembers$: behavior("a 19ms b", {
|
||||||
|
a: [localRtcMember],
|
||||||
|
b: [localRtcMember, aliceRtcMember],
|
||||||
|
}),
|
||||||
|
connectionState$,
|
||||||
|
},
|
||||||
|
(vm, rtcSession) => {
|
||||||
|
// Notify at 5ms so we enter ringing, then get disconnected 5ms later
|
||||||
|
schedule(" 5ms r 5ms d", {
|
||||||
|
r: () => {
|
||||||
|
rtcSession.emit(
|
||||||
|
MatrixRTCSessionEvent.DidSendCallNotification,
|
||||||
|
mockRingEvent("$notif2", 100),
|
||||||
|
mockLegacyRingEvent,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
d: () => {
|
||||||
|
connectionState$.next(ConnectionState.Disconnected);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expectObservable(vm.callPickupState$).toBe("a 4ms b 5ms c", {
|
||||||
|
a: "unknown",
|
||||||
|
b: "ringing",
|
||||||
|
c: "unknown",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{
|
||||||
|
waitForCallPickup: true,
|
||||||
|
encryptionSystem: { kind: E2eeType.PER_PARTICIPANT },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
test("success when someone joins before we notify", () => {
|
test("success when someone joins before we notify", () => {
|
||||||
withTestScheduler(({ behavior, schedule, expectObservable }) => {
|
withTestScheduler(({ behavior, schedule, expectObservable }) => {
|
||||||
// Join at 10ms, notify later at 20ms (state should stay success)
|
// Join at 10ms, notify later at 20ms (state should stay success)
|
||||||
|
|||||||
@@ -972,12 +972,12 @@ export class CallViewModel extends ViewModel {
|
|||||||
this.livekitDisconnected$,
|
this.livekitDisconnected$,
|
||||||
this.someoneElseJoined$,
|
this.someoneElseJoined$,
|
||||||
]).pipe(
|
]).pipe(
|
||||||
switchMap(([isDisconnected, someoneElseJoined]) => {
|
switchMap(([disconnected, someoneElseJoined]) => {
|
||||||
if (isDisconnected) {
|
if (disconnected) {
|
||||||
// Do not ring until we're connected.
|
// Do not ring until we're connected.
|
||||||
return of("unknown" as const);
|
return of("unknown" as const);
|
||||||
} else if (someoneElseJoined) {
|
} else if (someoneElseJoined) {
|
||||||
of("success" as const);
|
return of("success" as const);
|
||||||
}
|
}
|
||||||
// Show the ringing state of the most recent ringing attempt.
|
// Show the ringing state of the most recent ringing attempt.
|
||||||
return this.ring$.pipe(switchAll());
|
return this.ring$.pipe(switchAll());
|
||||||
|
|||||||
Reference in New Issue
Block a user