Stop voice broadcast recording on redaction (#9455)
This commit is contained in:
parent
d5a4718d46
commit
07a1e9a009
5 changed files with 76 additions and 30 deletions
|
@ -20,6 +20,7 @@ import {
|
|||
EventType,
|
||||
MatrixClient,
|
||||
MatrixEvent,
|
||||
MatrixEventEvent,
|
||||
MsgType,
|
||||
RelationType,
|
||||
Room,
|
||||
|
@ -81,6 +82,7 @@ describe("VoiceBroadcastRecording", () => {
|
|||
const setUpVoiceBroadcastRecording = () => {
|
||||
voiceBroadcastRecording = new VoiceBroadcastRecording(infoEvent, client);
|
||||
voiceBroadcastRecording.on(VoiceBroadcastRecordingEvent.StateChanged, onStateChanged);
|
||||
jest.spyOn(voiceBroadcastRecording, "destroy");
|
||||
jest.spyOn(voiceBroadcastRecording, "removeAllListeners");
|
||||
};
|
||||
|
||||
|
@ -214,6 +216,18 @@ describe("VoiceBroadcastRecording", () => {
|
|||
expect(voiceBroadcastRecorder.start).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
describe("and the info event is redacted", () => {
|
||||
beforeEach(() => {
|
||||
infoEvent.emit(MatrixEventEvent.BeforeRedaction, null, null);
|
||||
});
|
||||
|
||||
itShouldBeInState(VoiceBroadcastInfoState.Stopped);
|
||||
|
||||
it("should destroy the recording", () => {
|
||||
expect(voiceBroadcastRecording.destroy).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("and receiving a call action", () => {
|
||||
beforeEach(() => {
|
||||
dis.dispatch({
|
||||
|
|
|
@ -18,28 +18,22 @@ import { mocked } from "jest-mock";
|
|||
import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import {
|
||||
VoiceBroadcastInfoEventType,
|
||||
VoiceBroadcastRecordingsStore,
|
||||
VoiceBroadcastRecordingsStoreEvent,
|
||||
VoiceBroadcastRecording,
|
||||
VoiceBroadcastInfoState,
|
||||
} from "../../../src/voice-broadcast";
|
||||
import { mkEvent, mkStubRoom, stubClient } from "../../test-utils";
|
||||
|
||||
jest.mock("../../../src/voice-broadcast/models/VoiceBroadcastRecording.ts", () => ({
|
||||
VoiceBroadcastRecording: jest.fn().mockImplementation(
|
||||
(
|
||||
infoEvent: MatrixEvent,
|
||||
client: MatrixClient,
|
||||
) => ({ infoEvent, client }),
|
||||
),
|
||||
}));
|
||||
import { mkStubRoom, stubClient } from "../../test-utils";
|
||||
import { mkVoiceBroadcastInfoStateEvent } from "../utils/test-utils";
|
||||
|
||||
describe("VoiceBroadcastRecordingsStore", () => {
|
||||
const roomId = "!room:example.com";
|
||||
let client: MatrixClient;
|
||||
let room: Room;
|
||||
let infoEvent: MatrixEvent;
|
||||
let otherInfoEvent: MatrixEvent;
|
||||
let recording: VoiceBroadcastRecording;
|
||||
let otherRecording: VoiceBroadcastRecording;
|
||||
let recordings: VoiceBroadcastRecordingsStore;
|
||||
let onCurrentChanged: (recording: VoiceBroadcastRecording) => void;
|
||||
|
||||
|
@ -51,22 +45,17 @@ describe("VoiceBroadcastRecordingsStore", () => {
|
|||
return room;
|
||||
}
|
||||
});
|
||||
infoEvent = mkEvent({
|
||||
event: true,
|
||||
type: VoiceBroadcastInfoEventType,
|
||||
user: client.getUserId(),
|
||||
room: roomId,
|
||||
content: {},
|
||||
});
|
||||
recording = {
|
||||
infoEvent,
|
||||
} as unknown as VoiceBroadcastRecording;
|
||||
infoEvent = mkVoiceBroadcastInfoStateEvent(roomId, VoiceBroadcastInfoState.Started, client.getUserId());
|
||||
otherInfoEvent = mkVoiceBroadcastInfoStateEvent(roomId, VoiceBroadcastInfoState.Started, client.getUserId());
|
||||
recording = new VoiceBroadcastRecording(infoEvent, client);
|
||||
otherRecording = new VoiceBroadcastRecording(otherInfoEvent, client);
|
||||
recordings = new VoiceBroadcastRecordingsStore();
|
||||
onCurrentChanged = jest.fn();
|
||||
recordings.on(VoiceBroadcastRecordingsStoreEvent.CurrentChanged, onCurrentChanged);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
recording.destroy();
|
||||
recordings.off(VoiceBroadcastRecordingsStoreEvent.CurrentChanged, onCurrentChanged);
|
||||
});
|
||||
|
||||
|
@ -110,6 +99,32 @@ describe("VoiceBroadcastRecordingsStore", () => {
|
|||
it("should emit a current changed event", () => {
|
||||
expect(onCurrentChanged).toHaveBeenCalledWith(null);
|
||||
});
|
||||
|
||||
it("and calling it again should work", () => {
|
||||
recordings.clearCurrent();
|
||||
expect(recordings.getCurrent()).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("and setting another recording and stopping the previous recording", () => {
|
||||
beforeEach(() => {
|
||||
recordings.setCurrent(otherRecording);
|
||||
recording.stop();
|
||||
});
|
||||
|
||||
it("should keep the current recording", () => {
|
||||
expect(recordings.getCurrent()).toBe(otherRecording);
|
||||
});
|
||||
});
|
||||
|
||||
describe("and the recording stops", () => {
|
||||
beforeEach(() => {
|
||||
recording.stop();
|
||||
});
|
||||
|
||||
it("should clear the current recording", () => {
|
||||
expect(recordings.getCurrent()).toBeNull();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -133,10 +148,7 @@ describe("VoiceBroadcastRecordingsStore", () => {
|
|||
});
|
||||
|
||||
it("should return the recording", () => {
|
||||
expect(returnedRecording).toEqual({
|
||||
infoEvent,
|
||||
client,
|
||||
});
|
||||
expect(returnedRecording.infoEvent).toBe(infoEvent);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue