Skip to content

Commit 47ef2ab

Browse files
feat: refactor tests
1 parent f38c8ad commit 47ef2ab

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed
+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import React from 'react';
2+
import { render } from '@testing-library/react';
3+
import { useSelector } from 'react-redux';
4+
import LiveTab from './LiveTab';
5+
6+
jest.mock('react-redux', () => ({
7+
useSelector: jest.fn(),
8+
}));
9+
10+
describe('LiveTab', () => {
11+
afterEach(() => {
12+
jest.clearAllMocks();
13+
document.body.innerHTML = '';
14+
});
15+
16+
it('renders iframe from liveModel using dangerouslySetInnerHTML', () => {
17+
useSelector.mockImplementation((selector) => selector({
18+
courseHome: { courseId: 'course-v1:test+id+2024' },
19+
models: {
20+
live: {
21+
'course-v1:test+id+2024': {
22+
iframe: '<iframe id="lti-tab-embed" src="about:blank"></iframe>',
23+
},
24+
},
25+
},
26+
}));
27+
28+
render(<LiveTab />);
29+
30+
const iframe = document.getElementById('lti-tab-embed');
31+
expect(iframe).toBeInTheDocument();
32+
expect(iframe.src).toBe('about:blank');
33+
});
34+
35+
it('adds classes to iframe after mount', () => {
36+
document.body.innerHTML = `
37+
<div id="live_tab">
38+
<iframe id="lti-tab-embed" class=""></iframe>
39+
</div>
40+
`;
41+
42+
useSelector.mockImplementation((selector) => selector({
43+
courseHome: { courseId: 'course-v1:test+id+2024' },
44+
models: {
45+
live: {
46+
'course-v1:test+id+2024': {
47+
iframe: '<iframe id="lti-tab-embed"></iframe>',
48+
},
49+
},
50+
},
51+
}));
52+
53+
render(<LiveTab />);
54+
55+
const iframe = document.getElementById('lti-tab-embed');
56+
expect(iframe.className).toContain('vh-100');
57+
expect(iframe.className).toContain('w-100');
58+
expect(iframe.className).toContain('border-0');
59+
});
60+
61+
it('does not throw if iframe is not found in DOM', () => {
62+
useSelector.mockImplementation((selector) => selector({
63+
courseHome: { courseId: 'course-v1:test+id+2024' },
64+
models: {
65+
live: {
66+
'course-v1:test+id+2024': {
67+
iframe: '<div>No iframe here</div>',
68+
},
69+
},
70+
},
71+
}));
72+
73+
expect(() => render(<LiveTab />)).not.toThrow();
74+
const iframe = document.getElementById('lti-tab-embed');
75+
expect(iframe).toBeNull();
76+
});
77+
});

0 commit comments

Comments
 (0)