mirror of
https://github.com/vector-im/element-call.git
synced 2026-09-07 21:45:18 +00:00
Add further tests
This commit is contained in:
@@ -31,6 +31,7 @@ import {
|
|||||||
flushPromises,
|
flushPromises,
|
||||||
mockConfig,
|
mockConfig,
|
||||||
mockLivekitRoom,
|
mockLivekitRoom,
|
||||||
|
mockLocalParticipant,
|
||||||
mockMuteStates,
|
mockMuteStates,
|
||||||
withTestScheduler,
|
withTestScheduler,
|
||||||
ownMemberMock,
|
ownMemberMock,
|
||||||
@@ -880,4 +881,99 @@ describe("LocalMembership", () => {
|
|||||||
scope.end();
|
scope.end();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("toggleScreenSharing", () => {
|
||||||
|
let originalMediaDevices: MediaDevices | undefined;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
mockConfig();
|
||||||
|
// Screen sharing is only offered when getDisplayMedia is available.
|
||||||
|
originalMediaDevices = navigator.mediaDevices;
|
||||||
|
Object.defineProperty(navigator, "mediaDevices", {
|
||||||
|
configurable: true,
|
||||||
|
value: { getDisplayMedia: vi.fn() },
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
Object.defineProperty(navigator, "mediaDevices", {
|
||||||
|
configurable: true,
|
||||||
|
value: originalMediaDevices,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const createMembershipWithConnection = (
|
||||||
|
connection: Connection | null,
|
||||||
|
): {
|
||||||
|
scope: ObservableScope;
|
||||||
|
localMembership: ReturnType<typeof createLocalMembership$>;
|
||||||
|
} => {
|
||||||
|
const scope = new ObservableScope();
|
||||||
|
const connectionManagerData = new ConnectionManagerData();
|
||||||
|
if (connection) connectionManagerData.add(connection, []);
|
||||||
|
const localMembership = createLocalMembership$({
|
||||||
|
scope,
|
||||||
|
...defaultCreateLocalMemberValues,
|
||||||
|
connectionManager: {
|
||||||
|
connectionManagerData$: constant(new Epoch(connectionManagerData)),
|
||||||
|
},
|
||||||
|
localTransport$: new BehaviorSubject({
|
||||||
|
advertised$: new BehaviorSubject(aTransport),
|
||||||
|
active$: new BehaviorSubject(aTransportWithSFUConfig),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
return { scope, localMembership };
|
||||||
|
};
|
||||||
|
|
||||||
|
it("surfaces a failure and clears it on dismiss", async () => {
|
||||||
|
const error = new Error("NotReadableError");
|
||||||
|
const setScreenShareEnabled = vi.fn().mockRejectedValue(error);
|
||||||
|
const connection = {
|
||||||
|
state$: constant(ConnectionState.LivekitConnected),
|
||||||
|
transport: aTransport,
|
||||||
|
livekitRoom: mockLivekitRoom({
|
||||||
|
localParticipant: mockLocalParticipant({
|
||||||
|
isScreenShareEnabled: false,
|
||||||
|
setScreenShareEnabled,
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
} as unknown as Connection;
|
||||||
|
const { scope, localMembership } =
|
||||||
|
createMembershipWithConnection(connection);
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
expect(localMembership.toggleScreenSharing).not.toBeNull();
|
||||||
|
expect(localMembership.screenShareError$.value).toBeNull();
|
||||||
|
|
||||||
|
localMembership.toggleScreenSharing!();
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
expect(setScreenShareEnabled).toHaveBeenCalledWith(
|
||||||
|
true,
|
||||||
|
expect.any(Object),
|
||||||
|
undefined,
|
||||||
|
);
|
||||||
|
expect(localMembership.screenShareError$.value).toBe(error);
|
||||||
|
|
||||||
|
localMembership.dismissScreenShareError();
|
||||||
|
expect(localMembership.screenShareError$.value).toBeNull();
|
||||||
|
|
||||||
|
scope.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does nothing when there is no local participant", async () => {
|
||||||
|
// No connection means participant$ never resolves to a participant.
|
||||||
|
const { scope, localMembership } =
|
||||||
|
createMembershipWithConnection(null);
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
expect(localMembership.toggleScreenSharing).not.toBeNull();
|
||||||
|
localMembership.toggleScreenSharing!();
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
expect(localMembership.screenShareError$.value).toBeNull();
|
||||||
|
|
||||||
|
scope.end();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user