Files
notifications-admin/tests/javascripts/fullscreenTable.test.js

89 lines
2.7 KiB
JavaScript
Raw Normal View History

2025-04-09 14:52:56 -04:00
require('../../app/assets/javascripts/fullscreenTable.js');
2019-05-13 14:45:00 +01:00
2025-04-09 14:52:56 -04:00
describe('fullscreenTable', () => {
let wrapper, rightShadow;
2025-04-09 14:52:56 -04:00
const setupDOM = (scrollLeft = 0, scrollWidth = 1000, clientWidth = 500) => {
document.body.innerHTML = `
<div class="fullscreen-table">
<div class="table-wrapper" style="overflow-x: scroll;">
<table>
<tr><td>Test</td></tr>
2019-05-13 14:45:00 +01:00
</table>
</div>
2025-04-09 14:52:56 -04:00
<div class="fullscreen-right-shadow"></div>
</div>
`;
2019-05-13 14:45:00 +01:00
2025-04-09 14:52:56 -04:00
wrapper = document.querySelector('.table-wrapper');
rightShadow = document.querySelector('.fullscreen-right-shadow');
2019-05-13 14:45:00 +01:00
2025-04-09 14:52:56 -04:00
// Mock scroll values
Object.defineProperty(wrapper, 'scrollLeft', {
get: () => scrollLeft,
configurable: true
2019-05-13 14:45:00 +01:00
});
2025-04-09 14:52:56 -04:00
Object.defineProperty(wrapper, 'scrollWidth', {
get: () => scrollWidth,
configurable: true
});
2025-04-09 14:52:56 -04:00
Object.defineProperty(wrapper, 'clientWidth', {
get: () => clientWidth,
configurable: true
});
2025-04-09 14:52:56 -04:00
// 👇 Now that DOM is ready, initialize the logic
window.initFullscreenTables();
2025-04-09 14:52:56 -04:00
// Force trigger scroll event if needed
wrapper.dispatchEvent(new Event('scroll'));
};
2025-04-09 14:52:56 -04:00
afterEach(() => {
document.body.innerHTML = '';
2019-05-13 14:45:00 +01:00
});
2025-04-09 14:52:56 -04:00
test('adds right shadow on initial load if scrollable', () => {
setupDOM(0, 1000, 500);
expect(wrapper.classList.contains('scrolled')).toBe(false);
expect(rightShadow.classList.contains('visible')).toBe(true);
2019-05-13 14:45:00 +01:00
});
2025-04-09 14:52:56 -04:00
test('hides right shadow when scrolled to max', () => {
setupDOM(500, 1000, 500);
expect(wrapper.classList.contains('scrolled')).toBe(true);
expect(rightShadow.classList.contains('visible')).toBe(false);
2019-05-13 14:45:00 +01:00
});
2025-04-09 14:52:56 -04:00
test('handles mid-scroll: left + right shadows active', () => {
setupDOM(250, 1000, 500);
expect(wrapper.classList.contains('scrolled')).toBe(true);
expect(rightShadow.classList.contains('visible')).toBe(true);
2019-05-13 14:45:00 +01:00
});
2025-04-09 14:52:56 -04:00
test('gracefully handles missing right shadow', () => {
document.body.innerHTML = `
<div class="fullscreen-table">
<div class="table-wrapper">
<table>
<tr><td>Only content</td></tr>
</table>
</div>
</div>
`;
2025-04-09 14:52:56 -04:00
wrapper = document.querySelector('.table-wrapper');
2025-04-09 14:52:56 -04:00
Object.defineProperty(wrapper, 'scrollLeft', { get: () => 100, configurable: true });
Object.defineProperty(wrapper, 'scrollWidth', { get: () => 500, configurable: true });
Object.defineProperty(wrapper, 'clientWidth', { get: () => 200, configurable: true });
2025-04-09 14:52:56 -04:00
// 👇 Call after building DOM
window.initFullscreenTables();
wrapper.dispatchEvent(new Event('scroll'));
2025-04-09 14:52:56 -04:00
expect(wrapper.classList.contains('scrolled')).toBe(true);
// No error thrown for missing .fullscreen-right-shadow
});
2019-05-13 14:45:00 +01:00
});