// cypress/e2e/fullscreen.spec.js describe('Fullscreen Toggle', () => { const ROOT = '/'; beforeEach(() => { cy.visit(ROOT); }); it('defaults to normal mode when no fullscreen param is present', () => { // Body should not have fullscreen class cy.get('body').should('not.have.class', 'fullscreen'); // URL should not include `fullscreen` cy.url().should('not.include', 'fullscreen='); // Header and footer should be visible (max-height > 0) cy.get('header').should('have.css', 'max-height').and(value => { expect(parseFloat(value)).to.be.greaterThan(0); }); cy.get('footer').should('have.css', 'max-height').and(value => { expect(parseFloat(value)).to.be.greaterThan(0); }); }); it('initFullscreenFromUrl() picks up ?fullscreen=1 on load', () => { cy.visit(`${ROOT}?fullscreen=1`); cy.get('body').should('have.class', 'fullscreen'); cy.url().should('include', 'fullscreen=1'); // Header and footer should be collapsed (max-height == 0) cy.get('header').should('have.css', 'max-height', '0px'); cy.get('footer').should('have.css', 'max-height', '0px'); }); it('enterFullscreen() adds fullscreen class, sets full width, and updates URL', () => { cy.window().then(win => { win.exitFullscreen(); // ensure starting state win.enterFullscreen(); }); cy.get('body').should('have.class', 'fullscreen'); cy.url().should('include', 'fullscreen=1'); cy.get('.container, .container-fluid') .should('have.class', 'container-fluid'); cy.get('header').should('have.css', 'max-height', '0px'); cy.get('footer').should('have.css', 'max-height', '0px'); }); it('exitFullscreen() removes fullscreen class, resets width, and URL param', () => { // start in fullscreen cy.window().invoke('enterFullscreen'); // then exit cy.window().invoke('exitFullscreen'); cy.get('body').should('not.have.class', 'fullscreen'); cy.url().should('not.include', 'fullscreen='); cy.get('.container, .container-fluid') .should('have.class', 'container') .and('not.have.class', 'container-fluid'); // Header and footer should be expanded again cy.get('header').should('have.css', 'max-height').and(value => { expect(parseFloat(value)).to.be.greaterThan(0); }); cy.get('footer').should('have.css', 'max-height').and(value => { expect(parseFloat(value)).to.be.greaterThan(0); }); }); it('toggleFullscreen() toggles into and out of fullscreen', () => { // Toggle into fullscreen cy.window().invoke('toggleFullscreen'); cy.get('body').should('have.class', 'fullscreen'); cy.url().should('include', 'fullscreen=1'); // Toggle back cy.window().invoke('toggleFullscreen'); cy.get('body').should('not.have.class', 'fullscreen'); cy.url().should('not.include', 'fullscreen='); }); });