// Log uncaught exceptions but don't swallow them blindly. // Only ignore known non-critical errors (e.g. ResizeObserver). Cypress.on('uncaught:exception', (err) => { // ResizeObserver loop errors are harmless if (err.message.includes('ResizeObserver')) return false // Let all other errors fail the test return true }) // Custom commands for the oil calculator app // Login as admin via token injection Cypress.Commands.add('loginAsAdmin', () => { cy.request('GET', '/api/users').then((res) => { const admin = res.body.find(u => u.role === 'admin') if (admin) { cy.window().then(win => { win.localStorage.setItem('oil_auth_token', admin.token) }) } }) }) // Login with a specific token Cypress.Commands.add('loginWithToken', (token) => { cy.window().then(win => { win.localStorage.setItem('oil_auth_token', token) }) }) // Verify toast message appears Cypress.Commands.add('expectToast', (text) => { cy.get('.toast').should('contain', text) }) // Navigate via nav tabs Cypress.Commands.add('goToSection', (label) => { cy.get('.nav-tab').contains(label).click() })