From b731c2e9fd44732e8bf1be894d63374ef710d289 Mon Sep 17 00:00:00 2001 From: Timo K Date: Fri, 14 Nov 2025 16:53:43 +0100 Subject: [PATCH] dont import withCallViewModel in Lifecycle test --- .../CallNotificationLifecycle.test.ts | 308 ++++++++---------- 1 file changed, 142 insertions(+), 166 deletions(-) diff --git a/src/state/CallViewModel/CallNotificationLifecycle.test.ts b/src/state/CallViewModel/CallNotificationLifecycle.test.ts index 94112cf0..1fd04d7a 100644 --- a/src/state/CallViewModel/CallNotificationLifecycle.test.ts +++ b/src/state/CallViewModel/CallNotificationLifecycle.test.ts @@ -5,25 +5,16 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { ConnectionState } from "livekit-client"; -import { - EventType, - MatrixEvent, - type IEvent, - type IRoomTimelineData, -} from "matrix-js-sdk"; import { type ICallNotifyContent, type IRTCNotificationContent, MatrixRTCSessionEvent, } from "matrix-js-sdk/lib/matrixrtc"; -import { BehaviorSubject } from "rxjs"; import { describe, it } from "vitest"; import { E2eeType } from "../../e2ee/e2eeType"; import { withTestScheduler } from "../../utils/test"; import { - alice, aliceParticipant, aliceRtcMember, local, @@ -33,7 +24,7 @@ import { createCallNotificationLifecycle$, type Props as CallNotificationLifecycleProps, } from "./CallNotificationLifecycle"; -import { withCallViewModel } from "./CallViewModel.test"; +// import { withCallViewModel } from "./CallViewModel.test"; import { trackEpoch } from "../ObservableScope"; const mockLegacyRingEvent = {} as { event_id: string } & ICallNotifyContent; @@ -69,9 +60,7 @@ describe("waitForCallPickup$", () => { }, localUser: localRtcMember, }; - const lifecycle = createCallNotificationLifecycle$(props); - expectObservable(lifecycle.callPickupState$).toBe("a 9ms b 29ms c", { a: "unknown", b: "ringing", @@ -79,13 +68,11 @@ describe("waitForCallPickup$", () => { }); }); }); - it("ringing -> success if someone joins before timeout is reached", () => { withTestScheduler(({ scope, hot, behavior, expectObservable }) => { // Someone joins at 20ms (both LiveKit participant and MatrixRTC member) const props: CallNotificationLifecycleProps = { scope, - memberships$: scope.behavior( behavior("a 19ms b", { a: [localRtcMember], @@ -103,7 +90,6 @@ describe("waitForCallPickup$", () => { localUser: localRtcMember, }; const lifecycle = createCallNotificationLifecycle$(props); - expectObservable(lifecycle.callPickupState$).toBe("a 4ms b 14ms c", { a: "unknown", b: "ringing", @@ -111,13 +97,11 @@ describe("waitForCallPickup$", () => { }); }); }); - it("success when someone joins before we notify", () => { withTestScheduler(({ scope, hot, behavior, expectObservable }) => { // Someone joins at 20ms (both LiveKit participant and MatrixRTC member) const props: CallNotificationLifecycleProps = { scope, - memberships$: scope.behavior( behavior("a 9ms b", { a: [localRtcMember], @@ -135,20 +119,17 @@ describe("waitForCallPickup$", () => { localUser: localRtcMember, }; const lifecycle = createCallNotificationLifecycle$(props); - expectObservable(lifecycle.callPickupState$).toBe("a 9ms b", { a: "unknown", b: "success", }); }); }); - it("notify without lifetime -> immediate timeout", () => { withTestScheduler(({ scope, hot, behavior, expectObservable }) => { // Someone joins at 20ms (both LiveKit participant and MatrixRTC member) const props: CallNotificationLifecycleProps = { scope, - memberships$: scope.behavior( behavior("a", { a: [localRtcMember], @@ -165,7 +146,6 @@ describe("waitForCallPickup$", () => { localUser: localRtcMember, }; const lifecycle = createCallNotificationLifecycle$(props); - expectObservable(lifecycle.callPickupState$).toBe("a 9ms b", { a: "unknown", b: "timeout", @@ -208,149 +188,145 @@ describe("waitForCallPickup$", () => { }); }); - it("decline before timeout window ends -> decline", () => { - withTestScheduler(({ schedule, expectObservable }) => { - withCallViewModel( - {}, - (vm, rtcSession) => { - // Notify at 10ms with 50ms lifetime, decline at 40ms with matching id - schedule(" 10ms r 29ms d", { - r: () => { - rtcSession.emit( - MatrixRTCSessionEvent.DidSendCallNotification, - mockRingEvent("$decl1", 50), - mockLegacyRingEvent, - ); - }, - d: () => { - // Emit decline timeline event with id matching the notification - rtcSession.room.emit( - MatrixRoomEvent.Timeline, - new MatrixEvent({ - type: EventType.RTCDecline, - content: { - "m.relates_to": { - rel_type: "m.reference", - event_id: "$decl1", - }, - }, - }), - rtcSession.room, - undefined, - false, - {} as IRoomTimelineData, - ); - }, - }); - expectObservable(vm.callPickupState$).toBe("a 9ms b 29ms e", { - a: "unknown", - b: "ringing", - e: "decline", - }); - }, - { - waitForCallPickup: true, - encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, - }, - ); - }); - }); - - it("decline after timeout window ends -> stays timeout", () => { - withTestScheduler(({ schedule, expectObservable }) => { - withCallViewModel( - {}, - (vm, rtcSession) => { - // Notify at 10ms with 20ms lifetime (timeout at 30ms), decline at 40ms - schedule(" 10ms r 20ms t 10ms d", { - r: () => { - rtcSession.emit( - MatrixRTCSessionEvent.DidSendCallNotification, - mockRingEvent("$decl2", 20), - mockLegacyRingEvent, - ); - }, - t: () => {}, - d: () => { - rtcSession.room.emit( - MatrixRoomEvent.Timeline, - new MatrixEvent({ - event_id: "$decl2", - type: "m.rtc.decline", - }), - rtcSession.room, - undefined, - false, - {} as IRoomTimelineData, - ); - }, - }); - expectObservable(vm.callPickupState$).toBe("a 9ms b 19ms c", { - a: "unknown", - b: "ringing", - c: "timeout", - }); - }, - { - waitForCallPickup: true, - encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, - }, - ); - }); - }); - - function testStaysRinging(declineEvent: Partial): void { - withTestScheduler(({ schedule, expectObservable }) => { - withCallViewModel( - {}, - (vm, rtcSession) => { - // Notify at 10ms with id A, decline arrives at 20ms with id B - schedule(" 10ms r 10ms d", { - r: () => { - rtcSession.emit( - MatrixRTCSessionEvent.DidSendCallNotification, - mockRingEvent("$right", 50), - mockLegacyRingEvent, - ); - }, - d: () => { - rtcSession.room.emit( - MatrixRoomEvent.Timeline, - new MatrixEvent(declineEvent), - rtcSession.room, - undefined, - false, - {} as IRoomTimelineData, - ); - }, - }); - // We assert up to 21ms to see the ringing at 10ms and no change at 20ms - expectObservable(vm.callPickupState$, "21ms !").toBe("a 9ms b", { - a: "unknown", - b: "ringing", - }); - }, - { - waitForCallPickup: true, - encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, - }, - ); - }); - } - - it("decline with wrong id is ignored (stays ringing)", () => { - testStaysRinging({ - event_id: "$wrong", - type: "m.rtc.decline", - sender: local.userId, - }); - }); - - it("decline with sender being the local user is ignored (stays ringing)", () => { - testStaysRinging({ - event_id: "$right", - type: "m.rtc.decline", - sender: alice.userId, - }); - }); + // it("decline before timeout window ends -> decline", () => { + // withTestScheduler(({ schedule, expectObservable }) => { + // withCallViewModel( + // {}, + // (vm, rtcSession) => { + // // Notify at 10ms with 50ms lifetime, decline at 40ms with matching id + // schedule(" 10ms r 29ms d", { + // r: () => { + // rtcSession.emit( + // MatrixRTCSessionEvent.DidSendCallNotification, + // mockRingEvent("$decl1", 50), + // mockLegacyRingEvent, + // ); + // }, + // d: () => { + // // Emit decline timeline event with id matching the notification + // rtcSession.room.emit( + // MatrixRoomEvent.Timeline, + // new MatrixEvent({ + // type: EventType.RTCDecline, + // content: { + // "m.relates_to": { + // rel_type: "m.reference", + // event_id: "$decl1", + // }, + // }, + // }), + // rtcSession.room, + // undefined, + // false, + // {} as IRoomTimelineData, + // ); + // }, + // }); + // expectObservable(vm.callPickupState$).toBe("a 9ms b 29ms e", { + // a: "unknown", + // b: "ringing", + // e: "decline", + // }); + // }, + // { + // waitForCallPickup: true, + // encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, + // }, + // ); + // }); + // }); + // it("decline after timeout window ends -> stays timeout", () => { + // withTestScheduler(({ schedule, expectObservable }) => { + // withCallViewModel( + // {}, + // (vm, rtcSession) => { + // // Notify at 10ms with 20ms lifetime (timeout at 30ms), decline at 40ms + // schedule(" 10ms r 20ms t 10ms d", { + // r: () => { + // rtcSession.emit( + // MatrixRTCSessionEvent.DidSendCallNotification, + // mockRingEvent("$decl2", 20), + // mockLegacyRingEvent, + // ); + // }, + // t: () => {}, + // d: () => { + // rtcSession.room.emit( + // MatrixRoomEvent.Timeline, + // new MatrixEvent({ + // event_id: "$decl2", + // type: "m.rtc.decline", + // }), + // rtcSession.room, + // undefined, + // false, + // {} as IRoomTimelineData, + // ); + // }, + // }); + // expectObservable(vm.callPickupState$).toBe("a 9ms b 19ms c", { + // a: "unknown", + // b: "ringing", + // c: "timeout", + // }); + // }, + // { + // waitForCallPickup: true, + // encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, + // }, + // ); + // }); + // }); + // function testStaysRinging(declineEvent: Partial): void { + // withTestScheduler(({ schedule, expectObservable }) => { + // withCallViewModel( + // {}, + // (vm, rtcSession) => { + // // Notify at 10ms with id A, decline arrives at 20ms with id B + // schedule(" 10ms r 10ms d", { + // r: () => { + // rtcSession.emit( + // MatrixRTCSessionEvent.DidSendCallNotification, + // mockRingEvent("$right", 50), + // mockLegacyRingEvent, + // ); + // }, + // d: () => { + // rtcSession.room.emit( + // MatrixRoomEvent.Timeline, + // new MatrixEvent(declineEvent), + // rtcSession.room, + // undefined, + // false, + // {} as IRoomTimelineData, + // ); + // }, + // }); + // // We assert up to 21ms to see the ringing at 10ms and no change at 20ms + // expectObservable(vm.callPickupState$, "21ms !").toBe("a 9ms b", { + // a: "unknown", + // b: "ringing", + // }); + // }, + // { + // waitForCallPickup: true, + // encryptionSystem: { kind: E2eeType.PER_PARTICIPANT }, + // }, + // ); + // }); + // } + // it("decline with wrong id is ignored (stays ringing)", () => { + // testStaysRinging({ + // event_id: "$wrong", + // type: "m.rtc.decline", + // sender: local.userId, + // }); + // }); + // it("decline with sender being the local user is ignored (stays ringing)", () => { + // testStaysRinging({ + // event_id: "$right", + // type: "m.rtc.decline", + // sender: alice.userId, + // }); + // }); });