70 lines
2.6 KiB
TypeScript
70 lines
2.6 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, jest } from '@jest/globals';
|
|
import { OpenViduMeet } from '../../src/components/OpenViduMeet';
|
|
import '../../src/index';
|
|
|
|
describe('OpenViduMeet WebComponent Attributes', () => {
|
|
let component: OpenViduMeet;
|
|
|
|
beforeEach(() => {
|
|
component = document.createElement('openvidu-meet') as OpenViduMeet;
|
|
document.body.appendChild(component);
|
|
});
|
|
|
|
afterEach(() => {
|
|
document.body.removeChild(component);
|
|
document.body.innerHTML = '';
|
|
});
|
|
|
|
it('should render iframe with correct attributes', () => {
|
|
const iframe = component.shadowRoot?.querySelector('iframe');
|
|
expect(iframe).not.toBeNull();
|
|
expect(iframe?.getAttribute('allow')).toContain('camera');
|
|
expect(iframe?.getAttribute('allow')).toContain('microphone');
|
|
expect(iframe?.getAttribute('allow')).toContain('display-capture');
|
|
expect(iframe?.getAttribute('allow')).toContain('fullscreen');
|
|
expect(iframe?.getAttribute('allow')).toContain('autoplay');
|
|
expect(iframe?.getAttribute('allow')).toContain('compute-pressure');
|
|
});
|
|
|
|
it('should reject rendering iframe when "room-url" attribute is missing', () => {
|
|
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
|
|
// Trigger updateIframeSrc manually
|
|
(component as any).updateIframeSrc();
|
|
|
|
const iframe = component.shadowRoot?.querySelector('iframe');
|
|
|
|
expect(iframe).toBeDefined();
|
|
expect(iframe?.src).toBeFalsy();
|
|
expect(consoleErrorSpy).toHaveBeenCalledWith('The "room-url" or "recording-url" attribute is required.');
|
|
|
|
consoleErrorSpy.mockRestore();
|
|
});
|
|
|
|
it('should update iframe src when "room-url" attribute changes', () => {
|
|
const roomUrl = 'https://example.com/room/testRoom-123?secret=123456';
|
|
component.setAttribute('room-url', roomUrl);
|
|
component.setAttribute('user', 'testUser');
|
|
|
|
// Manually trigger the update (MutationObserver doesn't always trigger in tests)
|
|
(component as any).updateIframeSrc();
|
|
|
|
const iframe = component.shadowRoot?.querySelector('iframe');
|
|
expect(iframe?.src).toEqual(`${roomUrl}&user=testUser`);
|
|
});
|
|
|
|
it('should extract origin from room-url and set as allowed origin', () => {
|
|
const domain = 'https://example.com';
|
|
const roomUrl = `${domain}/room/testRoom-123?secret=123456`;
|
|
component.setAttribute('room-url', roomUrl);
|
|
|
|
// Trigger update
|
|
(component as any).updateIframeSrc();
|
|
|
|
// Check if origin was extracted and set
|
|
expect((component as any).targetIframeOrigin).toBe(domain);
|
|
expect((component as any).commandsManager.targetIframeOrigin).toBe(domain);
|
|
expect((component as any).eventsManager.targetIframeOrigin).toBe(domain);
|
|
});
|
|
});
|