diff --git a/src/state/CallViewModel/localMember/LocalTransport.test.ts b/src/state/CallViewModel/localMember/LocalTransport.test.ts index 00d1d037..04a44fde 100644 --- a/src/state/CallViewModel/localMember/LocalTransport.test.ts +++ b/src/state/CallViewModel/localMember/LocalTransport.test.ts @@ -21,7 +21,9 @@ import * as openIDSFU from "../../../livekit/openIDSFU"; describe("LocalTransport", () => { let scope: ObservableScope; - beforeEach(() => (scope = new ObservableScope())); + beforeEach(() => { + scope = new ObservableScope(); + }); afterEach(() => scope.end()); it("throws if config is missing", async () => { @@ -161,4 +163,41 @@ describe("LocalTransport", () => { type: "livekit", }); }); + + it("supports getting a transport from the backend", async () => { + // Use config so transport discovery succeeds, but delay OpenID JWT fetch + const memberships$ = new BehaviorSubject(new Epoch([])); + const openIdResolver = Promise.withResolvers(); + + vi.spyOn(openIDSFU, "getSFUConfigWithOpenID").mockReturnValue( + openIdResolver.promise, + ); + + const localTransport$ = createLocalTransport$({ + scope, + roomId: "!room:example.org", + useOldestMember$: constant(true), + memberships$, + client: { + getDomain: () => "", + // eslint-disable-next-line @typescript-eslint/naming-convention + _unstable_getRTCTransports: async () => + Promise.resolve([ + { type: "livekit", livekit_service_url: "https://lk.example.org" }, + ]), + getOpenIdToken: vi.fn(), + getDeviceId: vi.fn(), + }, + }); + + openIdResolver.resolve({ url: "https://lk.example.org", jwt: "jwt" }); + expect(localTransport$.value).toBe(null); + await flushPromises(); + // final + expect(localTransport$.value).toStrictEqual({ + livekit_alias: "!room:example.org", + livekit_service_url: "https://lk.example.org", + type: "livekit", + }); + }); });