diff options
| author | Raúl Benencia <id@rbenencia.name> | 2026-06-04 12:24:08 -0300 |
|---|---|---|
| committer | Raul Benencia <46945030+raul-te@users.noreply.github.com> | 2026-06-04 16:54:47 -0300 |
| commit | 1668a8c01763c39dd91c39f98ffe36670ba8c612 (patch) | |
| tree | 4aa0726cdfc20a2cbe85369c64f7d6444e65343c /test | |
| parent | 3907fcb858ccd85ada9255d0eabefb5f41f9da50 (diff) | |
refactor: drop jquery and bootstrap js
The heavy JS libraries are only used for a simple navbar. It doesn't
make sense to keep them. Instead, a lightweight local version has been
implemented.
Diffstat (limited to 'test')
| -rw-r--r-- | test/integ-test/frontend_smoke.js | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/test/integ-test/frontend_smoke.js b/test/integ-test/frontend_smoke.js index 3810166..0b453c8 100644 --- a/test/integ-test/frontend_smoke.js +++ b/test/integ-test/frontend_smoke.js @@ -206,10 +206,10 @@ async function evaluate(cdp, sessionID, expression) { return result.result.value; } -async function waitForPage(cdp, sessionID, expression, description) { +async function waitForPage(cdp, sessionID, expression, description, timeoutMS = 5000) { await waitFor(description, async () => { return Boolean(await evaluate(cdp, sessionID, expression)); - }); + }, timeoutMS); } async function run() { @@ -260,16 +260,85 @@ async function run() { await cdp.send('Runtime.enable', {}, sessionID); await cdp.send('Page.enable', {}, sessionID); + await cdp.send('Emulation.setDeviceMetricsOverride', { + width: 390, + height: 844, + deviceScaleFactor: 1, + mobile: true, + }, sessionID); await requestURL(apiURL + '/poll/1/' + smokeMacPath + '?host=frontend-smoke'); + await waitFor('seeded unknown server to appear in ajax server list', async () => { + const servers = await requestJSON(apiURL + '/ajax/servers'); + return servers.some((server) => server.Mac === smokeMac); + }, 10000); + await cdp.send('Page.navigate', { url: apiURL + '/' }, sessionID); await waitForPage(cdp, sessionID, 'document.readyState === "complete"', 'home page load'); + const collapsedNavbarState = await evaluate(cdp, sessionID, `(() => { + const button = document.querySelector('.navbar-toggler'); + const menu = document.getElementById('navbarsExample10'); + return { + buttonDisplay: button ? getComputedStyle(button).display : null, + menuDisplay: menu ? getComputedStyle(menu).display : null, + menuOpen: menu ? menu.classList.contains('show') : null, + expanded: button ? button.getAttribute('aria-expanded') : null, + }; + })()`); + + if (collapsedNavbarState.buttonDisplay === 'none') { + throw new Error('Navbar toggler is not visible at mobile width'); + } + if (collapsedNavbarState.menuDisplay !== 'none' || collapsedNavbarState.menuOpen) { + throw new Error('Navbar menu is not collapsed before toggling'); + } + if (collapsedNavbarState.expanded !== 'false') { + throw new Error('Navbar toggler did not start collapsed'); + } + + const expandedNavbarState = await evaluate(cdp, sessionID, `(() => { + const button = document.querySelector('.navbar-toggler'); + const menu = document.getElementById('navbarsExample10'); + button.click(); + return { + menuDisplay: getComputedStyle(menu).display, + menuOpen: menu.classList.contains('show'), + expanded: button.getAttribute('aria-expanded'), + }; + })()`); + + if (expandedNavbarState.menuDisplay === 'none' || !expandedNavbarState.menuOpen) { + throw new Error('Navbar menu did not open after toggling'); + } + if (expandedNavbarState.expanded !== 'true') { + throw new Error('Navbar toggler did not report expanded state'); + } + + const recollapsedNavbarState = await evaluate(cdp, sessionID, `(() => { + const button = document.querySelector('.navbar-toggler'); + const menu = document.getElementById('navbarsExample10'); + button.click(); + return { + menuDisplay: getComputedStyle(menu).display, + menuOpen: menu.classList.contains('show'), + expanded: button.getAttribute('aria-expanded'), + }; + })()`); + + if (recollapsedNavbarState.menuDisplay !== 'none' || recollapsedNavbarState.menuOpen) { + throw new Error('Navbar menu did not collapse after second toggle'); + } + if (recollapsedNavbarState.expanded !== 'false') { + throw new Error('Navbar toggler did not report collapsed state'); + } + await waitForPage( cdp, sessionID, 'Boolean(document.querySelector("#mac option[value=\\"' + smokeMac + '\\"]"))', - 'unknown server option' + 'unknown server option', + 10000 ); const homeState = await evaluate(cdp, sessionID, `(() => { |
