fix tests and remove duplicated mocks.

This commit is contained in:
Timo K
2026-01-07 13:26:37 +01:00
parent 556a87d141
commit 83d04ac122
9 changed files with 103 additions and 112 deletions

View File

@@ -104,7 +104,7 @@ describe("LocalMembership", () => {
getOldestMembership: vi.fn().mockReturnValue({ getOldestMembership: vi.fn().mockReturnValue({
getPreferredFoci: vi.fn().mockReturnValue([focusFromOlderMembership]), getPreferredFoci: vi.fn().mockReturnValue([focusFromOlderMembership]),
}), }),
joinRoomSession: vi.fn(), joinRTCSession: vi.fn(),
}) as unknown as MatrixRTCSession; }) as unknown as MatrixRTCSession;
enterRTCSession( enterRTCSession(
@@ -121,7 +121,12 @@ describe("LocalMembership", () => {
}, },
); );
expect(mockedSession.joinRoomSession).toHaveBeenLastCalledWith( expect(mockedSession.joinRTCSession).toHaveBeenLastCalledWith(
{
deviceId: "DEVICE",
memberId: "@alice:example.org:DEVICE",
userId: "@alice:example.org",
},
[ [
{ {
livekit_alias: "roomId", livekit_alias: "roomId",
@@ -163,7 +168,7 @@ describe("LocalMembership", () => {
}, },
memberships: [], memberships: [],
getFocusInUse: vi.fn(), getFocusInUse: vi.fn(),
joinRoomSession: vi.fn(), joinRTCSession: vi.fn(),
}) as unknown as MatrixRTCSession; }) as unknown as MatrixRTCSession;
enterRTCSession( enterRTCSession(

View File

@@ -154,6 +154,7 @@ describe("LocalTransport", () => {
await flushPromises(); await flushPromises();
// final // final
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!room:example.org", livekit_alias: "!room:example.org",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",
@@ -195,6 +196,7 @@ describe("LocalTransport", () => {
await flushPromises(); await flushPromises();
// final // final
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!example_room_id", livekit_alias: "!example_room_id",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",
@@ -247,6 +249,7 @@ describe("LocalTransport", () => {
expect(localTransport$.value).toBe(null); expect(localTransport$.value).toBe(null);
await flushPromises(); await flushPromises();
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!example_room_id", livekit_alias: "!example_room_id",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",
@@ -259,6 +262,7 @@ describe("LocalTransport", () => {
expect(localTransport$.value).toBe(null); expect(localTransport$.value).toBe(null);
await flushPromises(); await flushPromises();
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!example_room_id", livekit_alias: "!example_room_id",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",
@@ -273,6 +277,7 @@ describe("LocalTransport", () => {
expect(localTransport$.value).toBe(null); expect(localTransport$.value).toBe(null);
await flushPromises(); await flushPromises();
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!example_room_id", livekit_alias: "!example_room_id",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",
@@ -304,6 +309,7 @@ describe("LocalTransport", () => {
expect(localTransport$.value).toBe(null); expect(localTransport$.value).toBe(null);
await flushPromises(); await flushPromises();
expect(localTransport$.value).toStrictEqual({ expect(localTransport$.value).toStrictEqual({
forceOldJwtEndpoint: false,
livekit_alias: "!example_room_id", livekit_alias: "!example_room_id",
livekit_service_url: "https://lk.example.org", livekit_service_url: "https://lk.example.org",
type: "livekit", type: "livekit",

View File

@@ -84,7 +84,9 @@ export const createLocalTransport$ = ({
useOldestMember$, useOldestMember$,
useOldJwtEndpoint$, useOldJwtEndpoint$,
delayId$, delayId$,
}: Props): Behavior<LivekitTransport | null> => { }: Props): Behavior<
(LivekitTransport & { forceOldJwtEndpoint: boolean }) | null
> => {
/** /**
* The transport over which we should be actively publishing our media. * The transport over which we should be actively publishing our media.
* undefined when not joined. * undefined when not joined.
@@ -108,7 +110,7 @@ export const createLocalTransport$ = ({
* *
* @throws MatrixRTCTransportMissingError | FailToGetOpenIdToken * @throws MatrixRTCTransportMissingError | FailToGetOpenIdToken
*/ */
const preferredTransport$: Behavior<LivekitTransport | null> = scope.behavior( const preferredTransport$ = scope.behavior(
combineLatest([customLivekitUrl.value$, delayId$, useOldJwtEndpoint$]).pipe( combineLatest([customLivekitUrl.value$, delayId$, useOldJwtEndpoint$]).pipe(
switchMap(([customUrl, delayId, forceOldJwtEndpoint]) => switchMap(([customUrl, delayId, forceOldJwtEndpoint]) =>
from( from(

View File

@@ -144,12 +144,14 @@ export function createConnectionManager$({
localTransport, localTransport,
forceOldJwtEndpointForLocalTransport, forceOldJwtEndpointForLocalTransport,
]) => { ]) => {
// nmodify only the local transport with forceOldJwtEndpointForLocalTransport // modify only the local transport with forceOldJwtEndpointForLocalTransport
const index = transports.value.findIndex((t) => const index = transports.value.findIndex((t) =>
areLivekitTransportsEqual(localTransport, t), areLivekitTransportsEqual(localTransport, t),
); );
transports.value[index].forceOldJwtEndpoint = if (index !== -1) {
forceOldJwtEndpointForLocalTransport; transports.value[index].forceOldJwtEndpoint =
forceOldJwtEndpointForLocalTransport;
}
logger.trace( logger.trace(
`Managing transports: ${transports.value.map((t) => t.livekit_service_url).join(", ")}`, `Managing transports: ${transports.value.map((t) => t.livekit_service_url).join(", ")}`,
); );

View File

@@ -26,7 +26,7 @@ import {
import { ConnectionManagerData } from "./ConnectionManager.ts"; import { ConnectionManagerData } from "./ConnectionManager.ts";
import { import {
flushPromises, flushPromises,
mockCallMembership, mockRtcMembership,
mockRemoteParticipant, mockRemoteParticipant,
} from "../../../utils/test.ts"; } from "../../../utils/test.ts";
import { type Connection } from "./Connection.ts"; import { type Connection } from "./Connection.ts";
@@ -49,12 +49,12 @@ const transportB: LivekitTransport = {
livekit_alias: "!alias:sample.com", livekit_alias: "!alias:sample.com",
}; };
const bobMembership = mockCallMembership( const bobMembership = mockRtcMembership(
"@bob:example.org", "@bob:example.org",
"DEV000", "DEV000",
transportA, transportA,
); );
const carlMembership = mockCallMembership( const carlMembership = mockRtcMembership(
"@carl:sample.com", "@carl:sample.com",
"DEV111", "DEV111",
transportB, transportB,

View File

@@ -18,7 +18,7 @@ import { it } from "vitest";
import { ObservableScope } from "../../ObservableScope.ts"; import { ObservableScope } from "../../ObservableScope.ts";
import type { Room as MatrixRoom } from "matrix-js-sdk/lib/models/room"; import type { Room as MatrixRoom } from "matrix-js-sdk/lib/models/room";
import { import {
mockCallMembership, mockRtcMembership,
mockMatrixRoomMember, mockMatrixRoomMember,
withTestScheduler, withTestScheduler,
} from "../../../utils/test.ts"; } from "../../../utils/test.ts";
@@ -111,7 +111,7 @@ describe("MatrixMemberMetadata", () => {
rawDisplayName: "it's a me", rawDisplayName: "it's a me",
}); });
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [mockCallMembership("@local:example.com", "DEVICE1")], a: [mockRtcMembership("@local:example.com", "DEVICE1")],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
testScope, testScope,
@@ -149,8 +149,8 @@ describe("MatrixMemberMetadata", () => {
withTestScheduler(({ behavior, expectObservable }) => { withTestScheduler(({ behavior, expectObservable }) => {
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [ a: [
mockCallMembership("@alice:example.com", "DEVICE1"), mockRtcMembership("@alice:example.com", "DEVICE1"),
mockCallMembership("@bob:example.com", "DEVICE1"), mockRtcMembership("@bob:example.com", "DEVICE1"),
], ],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
@@ -179,7 +179,7 @@ describe("MatrixMemberMetadata", () => {
setUpBasicRoom(); setUpBasicRoom();
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [mockCallMembership("@no-name:foo.bar", "D000")], a: [mockRtcMembership("@no-name:foo.bar", "D000")],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
testScope, testScope,
@@ -201,11 +201,11 @@ describe("MatrixMemberMetadata", () => {
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [ a: [
mockCallMembership("@bob:example.com", "DEVICE1"), mockRtcMembership("@bob:example.com", "DEVICE1"),
mockCallMembership("@bob:example.com", "DEVICE2"), mockRtcMembership("@bob:example.com", "DEVICE2"),
mockCallMembership("@bob:foo.bar", "BOB000"), mockRtcMembership("@bob:foo.bar", "BOB000"),
mockCallMembership("@carl:example.com", "C000"), mockRtcMembership("@carl:example.com", "C000"),
mockCallMembership("@evil:example.com", "E000"), mockRtcMembership("@evil:example.com", "E000"),
], ],
}); });
@@ -233,10 +233,10 @@ describe("MatrixMemberMetadata", () => {
setUpBasicRoom(); setUpBasicRoom();
const memberships$ = behavior("ab", { const memberships$ = behavior("ab", {
a: [mockCallMembership("@bob:example.com", "DEVICE1")], a: [mockRtcMembership("@bob:example.com", "DEVICE1")],
b: [ b: [
mockCallMembership("@bob:example.com", "DEVICE1"), mockRtcMembership("@bob:example.com", "DEVICE1"),
mockCallMembership("@bob:foo.bar", "BOB000"), mockRtcMembership("@bob:foo.bar", "BOB000"),
], ],
}); });
@@ -262,10 +262,10 @@ describe("MatrixMemberMetadata", () => {
const memberships$ = behavior("ab", { const memberships$ = behavior("ab", {
a: [ a: [
mockCallMembership("@bob:example.com", "DEVICE1"), mockRtcMembership("@bob:example.com", "DEVICE1"),
mockCallMembership("@bob:foo.bar", "BOB000"), mockRtcMembership("@bob:foo.bar", "BOB000"),
], ],
b: [mockCallMembership("@bob:example.com", "DEVICE1")], b: [mockRtcMembership("@bob:example.com", "DEVICE1")],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
@@ -292,8 +292,8 @@ describe("MatrixMemberMetadata", () => {
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [ a: [
mockCallMembership("@bob:example.com", "B000"), mockRtcMembership("@bob:example.com", "B000"),
mockCallMembership("@carl:example.com", "C000"), mockRtcMembership("@carl:example.com", "C000"),
], ],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
@@ -331,16 +331,16 @@ describe("MatrixMemberMetadata", () => {
// - room join/leave // - room join/leave
// - disambiguate // - disambiguate
const memberships$ = behavior("ab-d", { const memberships$ = behavior("ab-d", {
a: [mockCallMembership(CARL, "C000")], a: [mockRtcMembership(CARL, "C000")],
b: [ b: [
mockCallMembership(CARL, "C000"), mockRtcMembership(CARL, "C000"),
// bob joins // bob joins
mockCallMembership(BOB, "B000"), mockRtcMembership(BOB, "B000"),
], ],
// c carl gets renamed to BOB // c carl gets renamed to BOB
d: [ d: [
// carl leaves // carl leaves
mockCallMembership(BOB, "B000"), mockRtcMembership(BOB, "B000"),
], ],
}); });
schedule("--a-", { schedule("--a-", {
@@ -379,8 +379,8 @@ describe("MatrixMemberMetadata", () => {
it("should disambiguate users with invisible characters", () => { it("should disambiguate users with invisible characters", () => {
withTestScheduler(({ behavior, expectObservable }) => { withTestScheduler(({ behavior, expectObservable }) => {
const bobRtcMember = mockCallMembership("@bob:example.org", "BBBB"); const bobRtcMember = mockRtcMembership("@bob:example.org", "BBBB");
const bobZeroWidthSpaceRtcMember = mockCallMembership( const bobZeroWidthSpaceRtcMember = mockRtcMembership(
"@bob2:example.org", "@bob2:example.org",
"BBBB", "BBBB",
); );
@@ -397,9 +397,9 @@ describe("MatrixMemberMetadata", () => {
fakeMemberWith(bobZeroWidthSpace); fakeMemberWith(bobZeroWidthSpace);
fakeMemberWith({ userId: "@carol:example.org" }); fakeMemberWith({ userId: "@carol:example.org" });
const memberships$ = behavior("ab", { const memberships$ = behavior("ab", {
a: [mockCallMembership("@carol:example.org", "1111"), bobRtcMember], a: [mockRtcMembership("@carol:example.org", "1111"), bobRtcMember],
b: [ b: [
mockCallMembership("@carol:example.org", "1111"), mockRtcMembership("@carol:example.org", "1111"),
bobRtcMember, bobRtcMember,
bobZeroWidthSpaceRtcMember, bobZeroWidthSpaceRtcMember,
], ],
@@ -450,8 +450,8 @@ describe("MatrixMemberMetadata", () => {
it("should strip RTL characters from displayname", () => { it("should strip RTL characters from displayname", () => {
withTestScheduler(({ behavior, expectObservable }) => { withTestScheduler(({ behavior, expectObservable }) => {
const daveRtcMember = mockCallMembership("@dave:example.org", "DDDD"); const daveRtcMember = mockRtcMembership("@dave:example.org", "DDDD");
const daveRTLRtcMember = mockCallMembership( const daveRTLRtcMember = mockRtcMembership(
"@dave2:example.org", "@dave2:example.org",
"DDDD", "DDDD",
); );
@@ -466,9 +466,9 @@ describe("MatrixMemberMetadata", () => {
fakeMemberWith(daveRTL); fakeMemberWith(daveRTL);
fakeMemberWith(dave); fakeMemberWith(dave);
const memberships$ = behavior("ab", { const memberships$ = behavior("ab", {
a: [mockCallMembership("@carol:example.org", "DDDD")], a: [mockRtcMembership("@carol:example.org", "DDDD")],
b: [ b: [
mockCallMembership("@carol:example.org", "DDDD"), mockRtcMembership("@carol:example.org", "DDDD"),
daveRtcMember, daveRtcMember,
daveRTLRtcMember, daveRTLRtcMember,
], ],
@@ -527,8 +527,8 @@ describe("MatrixMemberMetadata", () => {
}); });
const memberships$ = behavior("a", { const memberships$ = behavior("a", {
a: [ a: [
mockCallMembership("@local:example.com", "DEVICE1"), mockRtcMembership("@local:example.com", "DEVICE1"),
mockCallMembership("@alice:example.com", "DEVICE1"), mockRtcMembership("@alice:example.com", "DEVICE1"),
], ],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(
@@ -562,12 +562,12 @@ describe("MatrixMemberMetadata", () => {
fakeMemberWith({ userId: "@carl:example.com" }); fakeMemberWith({ userId: "@carl:example.com" });
fakeMemberWith({ userId: "@bob:example.com" }); fakeMemberWith({ userId: "@bob:example.com" });
const memberships$ = behavior("ab-d", { const memberships$ = behavior("ab-d", {
a: [mockCallMembership("@bob:example.com", "B000")], a: [mockRtcMembership("@bob:example.com", "B000")],
b: [ b: [
mockCallMembership("@bob:example.com", "B000"), mockRtcMembership("@bob:example.com", "B000"),
mockCallMembership("@carl:example.com", "C000"), mockRtcMembership("@carl:example.com", "C000"),
], ],
d: [mockCallMembership("@carl:example.com", "C000")], d: [mockRtcMembership("@carl:example.com", "C000")],
}); });
const metadataStore = createMatrixMemberMetadata$( const metadataStore = createMatrixMemberMetadata$(

View File

@@ -21,8 +21,8 @@ import {
import { ECConnectionFactory } from "./ConnectionFactory.ts"; import { ECConnectionFactory } from "./ConnectionFactory.ts";
import { type OpenIDClientParts } from "../../../livekit/openIDSFU.ts"; import { type OpenIDClientParts } from "../../../livekit/openIDSFU.ts";
import { import {
mockCallMembership,
mockMediaDevices, mockMediaDevices,
mockRtcMembership,
ownMemberMock, ownMemberMock,
withTestScheduler, withTestScheduler,
} from "../../../utils/test.ts"; } from "../../../utils/test.ts";
@@ -101,9 +101,9 @@ afterEach(() => {
test("bob, carl, then bob joining no tracks yet", () => { test("bob, carl, then bob joining no tracks yet", () => {
withTestScheduler(({ expectObservable, behavior, scope }) => { withTestScheduler(({ expectObservable, behavior, scope }) => {
const bobMembership = mockCallMembership("@bob:example.com", "BDEV000"); const bobMembership = mockRtcMembership("@bob:example.com", "BDEV000");
const carlMembership = mockCallMembership("@carl:example.com", "CDEV000"); const carlMembership = mockRtcMembership("@carl:example.com", "CDEV000");
const daveMembership = mockCallMembership("@dave:foo.bar", "DDEV000"); const daveMembership = mockRtcMembership("@dave:foo.bar", "DDEV000");
const eMarble = "abc"; const eMarble = "abc";
const vMarble = "abc"; const vMarble = "abc";

View File

@@ -17,14 +17,16 @@ export const localRtcMemberDevice2 = mockRtcMembership(
"2222", "2222",
); );
export const local = mockMatrixRoomMember(localRtcMember); export const local = mockMatrixRoomMember(localRtcMember);
// export const localParticipant = mockLocalParticipant({ identity: "" });
export const localId = `${local.userId}:${localRtcMember.deviceId}`; export const localId = `${local.userId}:${localRtcMember.deviceId}`;
export const aliceRtcMember = mockRtcMembership("@alice:example.org", "AAAA"); export const aliceDeviceId = "AAAA";
export const aliceUserId = "@alice:example.org";
export const aliceId = `${aliceUserId}:${aliceDeviceId}`;
export const aliceRtcMember = mockRtcMembership(aliceUserId, aliceDeviceId);
export const alice = mockMatrixRoomMember(aliceRtcMember, { export const alice = mockMatrixRoomMember(aliceRtcMember, {
rawDisplayName: "Alice", rawDisplayName: "Alice",
}); });
export const aliceId = `${alice.userId}:${aliceRtcMember.deviceId}`;
export const aliceParticipant = mockRemoteParticipant({ identity: aliceId }); export const aliceParticipant = mockRemoteParticipant({ identity: aliceId });
export const aliceDoppelgangerRtcMember = mockRtcMembership( export const aliceDoppelgangerRtcMember = mockRtcMembership(
@@ -38,11 +40,13 @@ export const aliceDoppelganger = mockMatrixRoomMember(
}, },
); );
export const bobRtcMember = mockRtcMembership("@bob:example.org", "BBBB"); export const bobDeviceId = "BBBB";
export const bobUserId = "@bob:example.org";
export const bobId = `${bobUserId}:${bobDeviceId}`;
export const bobRtcMember = mockRtcMembership(bobUserId, bobDeviceId);
export const bob = mockMatrixRoomMember(bobRtcMember, { export const bob = mockMatrixRoomMember(bobRtcMember, {
rawDisplayName: "Bob", rawDisplayName: "Bob",
}); });
export const bobId = `${bob.userId}:${bobRtcMember.deviceId}`;
export const bobZeroWidthSpaceRtcMember = mockRtcMembership( export const bobZeroWidthSpaceRtcMember = mockRtcMembership(
"@bob2:example.org", "@bob2:example.org",

View File

@@ -203,40 +203,30 @@ export const exampleTransport: LivekitTransport = {
livekit_alias: "!alias:example.org", livekit_alias: "!alias:example.org",
}; };
export function mockCallMembership(
userId: string,
deviceId: string,
transport?: Transport,
): CallMembership {
const t = transport ?? transportForUser(userId);
return {
userId: userId,
deviceId: deviceId,
getTransport: vi.fn().mockReturnValue(t),
transports: [t],
} as unknown as CallMembership;
}
function transportForUser(userId: string): Transport {
const domain = userId.split(":")[1];
return {
type: "livekit",
livekit_service_url: `https://lk.${domain}`,
livekit_alias: `!alias:${domain}`,
};
}
export function mockRtcMembership( export function mockRtcMembership(
user: string | RoomMember, user: string | RoomMember,
deviceId: string, deviceId: string,
callId = "", customOverwrites?: {
fociPreferred: Transport[] = [exampleTransport], rtcBackendIdentity?: string;
focusActive: LivekitFocusSelection = { callId?: string;
type: "livekit", fociPreferred?: Transport[];
focus_selection: "oldest_membership", focusActive?: LivekitFocusSelection;
membership?: Partial<SessionMembershipData>;
}, },
membership: Partial<SessionMembershipData> = {},
): CallMembership { ): CallMembership {
// setup defaults based on overwrites and fallback values.
const { rtcBackendIdentity, callId, fociPreferred, focusActive, membership } =
{
fociPreferred: [exampleTransport],
focusActive: {
type: "livekit" as const,
focus_selection: "oldest_membership" as const,
},
callId: "",
membership: {},
...customOverwrites,
};
const data: SessionMembershipData = { const data: SessionMembershipData = {
application: "m.call", application: "m.call",
call_id: callId, call_id: callId,
@@ -245,15 +235,21 @@ export function mockRtcMembership(
focus_active: focusActive, focus_active: focusActive,
...membership, ...membership,
}; };
const userId = typeof user === "string" ? user : user.userId;
const event = new MatrixEvent({ const event = new MatrixEvent({
sender: typeof user === "string" ? user : user.userId, sender: userId,
event_id: `$-ev-${randomUUID()}:example.org`, event_id: `$-ev-${randomUUID()}:example.org`,
content: data, content: data,
}); });
const membershipData = CallMembership.membershipDataFromMatrixEvent(event); const membershipData = CallMembership.membershipDataFromMatrixEvent(event);
const cms = new CallMembership(event, membershipData, "xx"); const cms = new CallMembership(
event,
membershipData,
rtcBackendIdentity ?? `${userId}:${deviceId}`,
);
vi.mocked(cms).getTransport = vi.fn().mockReturnValue(fociPreferred[0]); vi.mocked(cms).getTransport = vi.fn().mockReturnValue(fociPreferred[0]);
return cms; return cms;
} }
@@ -486,7 +482,7 @@ export class MockRTCSession extends TypedEventEmitter<
if (value !== prev) this.emit(MembershipManagerEvent.ProbablyLeft, value); if (value !== prev) this.emit(MembershipManagerEvent.ProbablyLeft, value);
} }
public async joinRoomSession(): Promise<void> { public async joinRTCSession(): Promise<void> {
return Promise.resolve(); return Promise.resolve();
} }
} }
@@ -535,27 +531,3 @@ export function mockMuteStates(
const observableScope = new ObservableScope(); const observableScope = new ObservableScope();
return new MuteStates(observableScope, mockMediaDevices({}), joined$); return new MuteStates(observableScope, mockMediaDevices({}), joined$);
} }
export const mockComputeLivekitParticipantIdentity$ = (
membership: CallMembershipIdentityParts,
kind: "rtc" | "session",
): Observable<string> => {
function sha256(commitmentStr: string): string {
return encodeUnpaddedBase64(
createHash("sha256").update(commitmentStr, "utf8").digest(),
);
}
let hash;
switch (kind) {
case "rtc": {
hash = sha256(
`${membership.userId}|${membership.deviceId}|${membership.memberId}`,
);
break;
}
case "session":
default:
hash = `${membership.userId}:${membership.deviceId}`;
}
return of(hash);
};