Skip to content

Commit 98deefd

Browse files
committed
test: added tests for utility functions
1 parent 47a1a23 commit 98deefd

File tree

3 files changed

+159
-0
lines changed

3 files changed

+159
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { describe, it, expect, vi, afterEach } from 'vitest';
2+
import { handleSessionTimeout } from './session';
3+
4+
vi.mock('bootstrap', () => ({
5+
Modal: vi.fn().mockImplementation(() => ({
6+
show: vi.fn(),
7+
hide: vi.fn(),
8+
})),
9+
}));
10+
11+
describe('Session Utils', () => {
12+
afterEach(() => {
13+
vi.restoreAllMocks();
14+
});
15+
16+
describe('handleSessionTimeout', () => {
17+
it('should observe attribute changes and reload page on button click', () => {
18+
document.body.innerHTML = `
19+
<div id="pmf-show-session-warning" data-value="hide"></div>
20+
<div id="sessionWarningModal"></div>
21+
<button id="pmf-button-reload-page"></button>
22+
`;
23+
24+
const mockObserver = {
25+
observe: vi.fn(),
26+
disconnect: vi.fn(),
27+
takeRecords: vi.fn(),
28+
};
29+
global.MutationObserver = vi.fn(() => mockObserver) as unknown as typeof MutationObserver;
30+
31+
const mockReload = vi.fn();
32+
Object.defineProperty(global, 'location', {
33+
value: {
34+
reload: mockReload,
35+
},
36+
writable: true,
37+
});
38+
39+
handleSessionTimeout();
40+
41+
expect(mockObserver.observe).toHaveBeenCalled();
42+
const reloadButton = document.getElementById('pmf-button-reload-page');
43+
reloadButton?.click();
44+
expect(mockReload).toHaveBeenCalled();
45+
});
46+
});
47+
});
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { describe, it, expect, vi, afterEach } from 'vitest';
2+
import { sidebarToggle } from './sidebar';
3+
4+
describe('Sidebar Utils', () => {
5+
afterEach(() => {
6+
vi.restoreAllMocks();
7+
});
8+
9+
describe('sidebarToggle', () => {
10+
it('should toggle sidebar class and update localStorage on button click', () => {
11+
document.body.innerHTML = `
12+
<button id="sidebarToggle"></button>
13+
`;
14+
15+
const mockSetItem = vi.fn();
16+
Object.defineProperty(global, 'localStorage', {
17+
value: {
18+
setItem: mockSetItem,
19+
},
20+
writable: true,
21+
});
22+
23+
sidebarToggle();
24+
25+
const toggleButton = document.getElementById('sidebarToggle');
26+
toggleButton?.click();
27+
28+
expect(document.body.classList.contains('pmf-admin-sidenav-toggled')).toBe(true);
29+
expect(mockSetItem).toHaveBeenCalledWith('sb|sidebar-toggle', 'true');
30+
31+
toggleButton?.click();
32+
33+
expect(document.body.classList.contains('pmf-admin-sidenav-toggled')).toBe(false);
34+
expect(mockSetItem).toHaveBeenCalledWith('sb|sidebar-toggle', 'false');
35+
});
36+
37+
it('should not throw an error if sidebarToggle button is not found', () => {
38+
document.body.innerHTML = ``;
39+
40+
expect(() => sidebarToggle()).not.toThrow();
41+
});
42+
});
43+
});
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { describe, it, expect, vi, afterEach } from 'vitest';
2+
import { selectAll, unSelectAll, formatBytes, initializeTooltips } from './utils';
3+
import { Tooltip } from 'bootstrap';
4+
5+
vi.mock('bootstrap', () => ({
6+
Tooltip: vi.fn(),
7+
}));
8+
9+
describe('Utils', () => {
10+
afterEach(() => {
11+
vi.restoreAllMocks();
12+
});
13+
14+
describe('selectAll', () => {
15+
it('should select all options in the select element', () => {
16+
document.body.innerHTML = `
17+
<select id="testSelect" multiple>
18+
<option value="1">Option 1</option>
19+
<option value="2">Option 2</option>
20+
</select>
21+
`;
22+
23+
selectAll('testSelect');
24+
25+
const selectElement = document.getElementById('testSelect') as HTMLSelectElement;
26+
for (const option of selectElement.options) {
27+
expect(option.selected).toBe(true);
28+
}
29+
});
30+
});
31+
32+
describe('unSelectAll', () => {
33+
it('should unselect all options in the select element', () => {
34+
document.body.innerHTML = `
35+
<select id="testSelect" multiple>
36+
<option value="1" selected>Option 1</option>
37+
<option value="2" selected>Option 2</option>
38+
</select>
39+
`;
40+
41+
unSelectAll('testSelect');
42+
43+
const selectElement = document.getElementById('testSelect') as HTMLSelectElement;
44+
for (const option of selectElement.options) {
45+
expect(option.selected).toBe(false);
46+
}
47+
});
48+
});
49+
50+
describe('formatBytes', () => {
51+
it('should format bytes correctly', () => {
52+
expect(formatBytes(1024)).toBe('1 KiB');
53+
expect(formatBytes(1048576)).toBe('1 MiB');
54+
expect(formatBytes(0)).toBe('0 Bytes');
55+
});
56+
});
57+
58+
describe('initializeTooltips', () => {
59+
it('should initialize tooltips', () => {
60+
document.body.innerHTML = `
61+
<div data-bs-toggle="tooltip" title="Tooltip text"></div>
62+
`;
63+
64+
initializeTooltips();
65+
66+
expect(vi.mocked(Tooltip)).toHaveBeenCalled();
67+
});
68+
});
69+
});

0 commit comments

Comments
 (0)