fix tests and remove duplicated mocks.
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(", ")}`,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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$(
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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);
|
|
||||||
};
|
|
||||||
|
|||||||
Reference in New Issue
Block a user