Files
Cloud-CMS/cypress/e2e/Layout/Editor/layout-action-menu.cy.js
Matt Batchelder 05ce0da296 Initial Upload
2025-12-02 10:32:59 -05:00

135 lines
4.6 KiB
JavaScript

/*
* Copyright (C) 2025 Xibo Signage Ltd
*
* Xibo - Digital Signage - https://xibosignage.com
*
* This file is part of Xibo.
*
* Xibo is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* Xibo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
*/
/* eslint-disable max-len */
describe('Layout Editor Toolbar (Back button, Interactive Mode, Layout jump list)', () => {
beforeEach(function() {
cy.login();
cy.intercept('GET', '/user/pref?preference=toolbar').as('toolbarPrefsLoad');
cy.intercept('GET', '/user/pref?preference=editor').as('editorPrefsLoad');
cy.visit('/layout/view');
cy.get('button.layout-add-button').click();
cy.get('#layout-viewer').should('be.visible');
cy.wait('@toolbarPrefsLoad');
cy.wait('@editorPrefsLoad');
});
it('Back button should be present and navigate correctly', () => {
cy.get('#backBtn')
.should('have.class', 'btn btn-lg')
.and('have.attr', 'href', '/layout/view')
.click({force: true});
cy.url().should('include', '/layout/view');
});
it('should display Interactive Mode with OFF status initially', () => { // done
cy.get('li.interactive-control')
.should('have.attr', 'data-status', 'off')
.within(() => {
cy.contains('.interactive-control-label', 'Interactive Mode');
cy.get('.interactive-control-status-off').should('be.visible').and('contain.text', 'OFF');
cy.get('.interactive-control-status-on').should('not.be.visible');
});
});
it('should toggle Interactive Mode status on click', () => { // done
cy.get('li.nav-item.interactive-control[data-status="off"]')
.should(($el) => {
expect($el).to.be.visible;
})
.click({force: true});
cy.get('.interactive-control-status-off').should('not.be.visible');
});
it.only('should open and close the layout jump list dropdown safely', () => {
cy.intercept('GET', '/layout?onlyMyLayouts=*').as('onlyMyLayouts');
const layoutName = 'Audio-Video-PDF';
cy.get('#select2-layoutJumpList-container')
.should('be.visible');
// Force click because the element intermittently detaches in CI environment
cy.get('#layoutJumpListContainer .select2-selection')
.should('be.visible')
.click({force: true});
// Check for status
cy.wait('@onlyMyLayouts').then((interception) => {
const result = interception.response.body.data[0];
cy.log('result:', result.layoutId);
});
// Type into the search input
cy.get('.select2-search__field')
.should('be.visible')
.clear()
.type(layoutName, {delay: 100});
// Click the matching option
cy.get('.select2-results__option')
.contains(layoutName)
.click();
});
it('Options dropdown menu toggles and contains expected items', () => {
cy.get('#optionsContainerTop').should('be.visible');
cy.get('#optionsContainerTop').click({force: true});
cy.get('.navbar-submenu-options-container')
.should('be.visible')
.within(() => {
cy.get('#publishLayout').should('be.visible');
cy.get('#checkoutLayout').should('have.class', 'd-none');
cy.get('#discardLayout').should('be.visible');
cy.get('#newLayout').should('be.visible');
cy.get('#deleteLayout').should('have.class', 'd-none');
cy.get('#saveTemplate').should('have.class', 'd-none');
cy.get('#scheduleLayout').should('have.class', 'd-none');
cy.get('#clearLayout').should('be.visible');
cy.get('#displayTooltips').should('be.checked');
cy.get('#deleteConfirmation').should('be.checked');
});
});
it('Tooltips and popovers appear on hover', () => {
// Tooltip
cy.get('.layout-info-name')
.should('be.visible')
.trigger('mouseover');
cy.get('.tooltip').should('be.visible');
cy.get('.layout-info-name')
.should('be.visible')
.trigger('mouseout');
// Popover
cy.get('#layout-info-status')
.should('be.visible')
.trigger('mouseover');
cy.get('.popover').should('be.visible');
cy.get('#layout-info-status')
.should('be.visible')
.trigger('mouseout');
});
});