From a081b40fb23087ac7d7d57f71e23d414fb17b000 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 4 May 2026 13:24:19 +0200 Subject: [PATCH] add marble test --- .../localMember/HomeserverConnected.test.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/state/CallViewModel/localMember/HomeserverConnected.test.ts b/src/state/CallViewModel/localMember/HomeserverConnected.test.ts index 413c5745..56e1eef9 100644 --- a/src/state/CallViewModel/localMember/HomeserverConnected.test.ts +++ b/src/state/CallViewModel/localMember/HomeserverConnected.test.ts @@ -14,6 +14,8 @@ import { MembershipManagerEvent, Status } from "matrix-js-sdk/lib/matrixrtc"; import { ObservableScope } from "../../ObservableScope"; import { createHomeserverConnected$ } from "./HomeserverConnected"; +import { TestScheduler } from "rxjs/testing"; + /** * Minimal stub of a Matrix client sufficient for our tests: ``` @@ -291,4 +293,42 @@ describe("createHomeserverConnected$ - Grace Period", () => { client.setSyncState(SyncState.Syncing); expect(hsConnected.combined$.value).toBe(true); }); + + it('marble: sync "s----e" -> HomeserverConnected "t---------f"', () => { + const ts = new TestScheduler((a, b) => expect(a).toEqual(b)); + + ts.run(({ cold, expectObservable }) => { + const GRACE = 5; + const scope = new ObservableScope(); + + // Setup Mocks + const client = new MockMatrixClient(SyncState.Syncing); + const session = new MockMatrixRTCSession({ + membershipStatus: Status.Connected, + probablyLeft: false, + }); + + const hs = createHomeserverConnected$(scope, client, session, GRACE); + + // Marble-Input: s (Syncing) at 0ms, e (Error) at 5ms + const syncValues = { s: SyncState.Syncing, e: SyncState.Error }; + const driver$ = cold("s----e", syncValues); + + // Feed Mock-Client with marble values + driver$.subscribe((state) => { + client.setSyncState(state); + }); + + const values = { t: true, f: false }; + + // t (0ms: Syncing + Connected = true) + // (5ms: Error occurs, Grace period starts, still true) + // f (10ms: 5ms + 5ms Grace period ends, should flip to false) + expectObservable(hs.combined$).toBe("t---------f", values); + + ts.flush(); + scope.end(); + }); + }); + });