import { StreamAttendeeOptionsModel } from './stream-attendee-options.model'; import { StreamHostOptionsModel } from './stream-host-options.model'; import { StreamOptionsModel, StreamOptionsSchema } from './stream-options.model'; describe('StreamOptionsModel', () => { describe('constructor', () => { it('should create and initialize empty model', () => { const model = new StreamOptionsModel(); expect(model.attendee).toBeInstanceOf(StreamAttendeeOptionsModel); expect(model.host).toBeInstanceOf(StreamHostOptionsModel); }); it('should intialize model from schema', () => { const schema: StreamOptionsSchema = { attendee: { enable_2fa: false, enable_camera: false, enable_chat: false, enable_microphone: false, enable_multiple_hosts: false, enable_password: false, enable_private_messages: false, }, host: { enable_camera: true, enable_microphone: true, }, }; const model = new StreamOptionsModel(schema); const { attendee } = model; expect(attendee.enable2fa).toBe(schema.attendee.enable_2fa); expect(attendee.enableCamera).toBe(schema.attendee.enable_camera); expect(attendee.enableChat).toBe(schema.attendee.enable_chat); expect(attendee.enableMicrophone).toBe(schema.attendee.enable_microphone); expect(attendee.enableMultipleHosts).toBe(schema.attendee.enable_multiple_hosts); expect(attendee.enablePassword).toBe(schema.attendee.enable_password); expect(attendee.enablePrivateMessages).toBe(schema.attendee.enable_private_messages); const { host } = model; expect(host.enableCamera).toBe(schema.host.enable_camera); expect(host.enableMicrophone).toBe(schema.host.enable_microphone); }); }); describe('#fromSchema', () => { it('should initialize from a schema input', () => { const model = new StreamOptionsModel(); expect(model.attendee).toBeInstanceOf(StreamAttendeeOptionsModel); expect(model.host).toBeInstanceOf(StreamHostOptionsModel); const schema: StreamOptionsSchema = { attendee: { enable_2fa: false, enable_camera: false, enable_chat: false, enable_microphone: false, enable_multiple_hosts: false, enable_password: false, enable_private_messages: false, }, host: { enable_camera: true, enable_microphone: true, }, }; model.fromSchema(schema); const { attendee } = model; expect(attendee.enable2fa).toBe(schema.attendee.enable_2fa); expect(attendee.enableCamera).toBe(schema.attendee.enable_camera); expect(attendee.enableChat).toBe(schema.attendee.enable_chat); expect(attendee.enableMicrophone).toBe(schema.attendee.enable_microphone); expect(attendee.enableMultipleHosts).toBe(schema.attendee.enable_multiple_hosts); expect(attendee.enablePassword).toBe(schema.attendee.enable_password); expect(attendee.enablePrivateMessages).toBe(schema.attendee.enable_private_messages); const { host } = model; expect(host.enableCamera).toBe(schema.host.enable_camera); expect(host.enableMicrophone).toBe(schema.host.enable_microphone); }); }); describe('#toSchema', () => { it('should build a schema object from the model', () => { const model = new StreamOptionsModel(); expect(model.attendee).toBeInstanceOf(StreamAttendeeOptionsModel); expect(model.host).toBeInstanceOf(StreamHostOptionsModel); const schema: StreamOptionsSchema = { attendee: { enable_2fa: false, enable_camera: false, enable_chat: false, enable_microphone: false, enable_multiple_hosts: false, enable_password: false, enable_private_messages: false, }, host: { enable_camera: true, enable_microphone: true, }, }; model.fromSchema(schema); const { attendee } = model; expect(attendee.enable2fa).toBe(schema.attendee.enable_2fa); expect(attendee.enableCamera).toBe(schema.attendee.enable_camera); expect(attendee.enableChat).toBe(schema.attendee.enable_chat); expect(attendee.enableMicrophone).toBe(schema.attendee.enable_microphone); expect(attendee.enableMultipleHosts).toBe(schema.attendee.enable_multiple_hosts); expect(attendee.enablePassword).toBe(schema.attendee.enable_password); expect(attendee.enablePrivateMessages).toBe(schema.attendee.enable_private_messages); const { host } = model; expect(host.enableCamera).toBe(schema.host.enable_camera); expect(host.enableMicrophone).toBe(schema.host.enable_microphone); const newSchema = model.toSchema(); expect(newSchema).toStrictEqual(schema); }); }); });