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

241 lines
8.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Copyright (C) 2023 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 Designer (Populated)', function() {
beforeEach(function() {
cy.login();
// Import existing
cy.importLayout('../assets/export_test_layout.zip').as('testLayoutId').then((res) => {
cy.checkoutLayout(res);
cy.goToLayoutAndLoadPrefs(res);
});
});
// Open widget form, change the name and duration, save, and see the name change result
it.skip('changes and saves widget properties', () => {
// Create and alias for reload widget
cy.intercept('GET', '/playlist/widget/form/edit/*').as('reloadWidget');
// Select the first widget from the first region on timeline ( image )
cy.get('#layout-timeline .designer-region:first [data-type="widget"]:first-child').click();
// Type the new name in the input
cy.get('#properties-panel input[name="name"]').clear().type('newName');
// Set a duration
cy.get('#properties-panel #useDuration').check();
cy.get('#properties-panel input[name="duration"]').clear().type(12);
// Save form
cy.get('#properties-panel button[data-action="save"]').click();
// Should show a notification for the name change
cy.get('.toast-success').contains('newName');
// Check if the values are the same entered after reload
cy.wait('@reloadWidget').then(() => {
cy.get('#properties-panel input[name="name"]').should('have.attr', 'value').and('equal', 'newName');
cy.get('#properties-panel input[name="duration"]').should('have.attr', 'value').and('equal', '12');
});
});
// On layout edit form, change background color and layer, save and check the changes
it.skip('changes and saves layout properties', () => {
// Create and alias for reload layout
cy.intercept('GET', '/layout?layoutId=*').as('reloadLayout');
// Change background color
cy.get('#properties-panel input[name="backgroundColor"]').clear().type('#ccc');
// Change layer
cy.get('#properties-panel input[name="backgroundzIndex"]').clear().type(1);
// Save form
cy.get('#properties-panel button[data-action="save"]').click();
// Should show a notification for the successful save
cy.get('.toast-success').contains('Edited');
// Check if the values are the same entered after reload
cy.wait('@reloadLayout').then(() => {
cy.get('#properties-panel input[name="backgroundColor"]').should('have.attr', 'value').and('equal', '#cccccc');
cy.get('#properties-panel input[name="backgroundzIndex"]').should('have.value', '1');
});
});
// On layout edit form, change background image check the changes
it.skip('should change layout´s background image', () => {
// Create and alias for reload layout
cy.intercept('GET', '/layout?layoutId=*').as('reloadLayout');
cy.intercept('GET', '/library/search?*').as('mediaLoad');
cy.get('#properties-panel #backgroundRemoveButton').click();
// Open library search tab
cy.get('.editor-main-toolbar #btn-menu-0').click();
cy.get('.editor-main-toolbar #btn-menu-1').click();
cy.wait('@mediaLoad');
cy.get('.editor-bottom-bar #navigator-edit-btn').click();
cy.get('.editor-main-toolbar #media-content-1 .toolbar-card:nth-of-type(2)').find('img').should('be.visible');
// Get a table row, select it and add to the region
cy.get('.editor-main-toolbar #media-content-1 .toolbar-card:nth-of-type(2) .select-button').click({force: true}).then(() => {
cy.get('#properties-panel-form-container .background-image-drop').click().then(() => {
// Save form
cy.get('#properties-panel button[data-action="save"]').click();
// Should show a notification for the successful save
cy.get('.toast-success').contains('Edited');
// Check if the background field has an image
cy.get('#properties-panel .background-image-add img#bg_image_image').should('be.visible');
});
});
});
// Navigator
it.skip('should change and save the region´s position', () => {
// Create and alias for position save and reload layout
cy.intercept('GET', '/layout?layoutId=*').as('reloadLayout');
cy.intercept('GET', '/region/form/edit/*').as('reloadRegion');
cy.intercept('GET', '**/region/preview/*').as('regionPreview');
// Open navigator edit
cy.get('.editor-bottom-bar #navigator-edit-btn').click();
// Wait for the region to preview
cy.wait('@regionPreview');
cy.get('#layout-navigator [data-type="region"]:first').then(($originalRegion) => {
const regionId = $originalRegion.attr('id');
// Select region
cy.get('#layout-navigator-content #' + regionId).click();
// Move region 50px for each dimension
cy.get('#layout-navigator-content #' + regionId).then(($movedRegion) => {
const regionOriginalPosition = {
top: Math.round($movedRegion.position().top),
left: Math.round($movedRegion.position().left),
};
const offsetToAdd = 50;
// Move the region
cy.get('#layout-navigator-content #' + regionId)
.trigger('mousedown', {
which: 1,
})
.trigger('mousemove', {
which: 1,
pageX: $movedRegion.width() / 2 + $movedRegion.offset().left + offsetToAdd,
pageY: $movedRegion.height() / 2 + $movedRegion.offset().top + offsetToAdd,
})
.trigger('mouseup');
// Close the navigator edit
cy.wait('@reloadRegion');
// Save
cy.get('#properties-panel button#save').click();
// Wait for the layout to reload
cy.wait('@reloadLayout');
// Check if the region´s position are not the original
cy.get('#layout-navigator-content #' + regionId).then(($changedRegion) => {
expect(Math.round($changedRegion.position().top)).to.not.eq(regionOriginalPosition.top);
expect(Math.round($changedRegion.position().left)).to.not.eq(regionOriginalPosition.left);
});
});
});
});
it.skip('should delete a widget using the toolbar bin', () => {
cy.intercept('GET', '/layout?layoutId=*').as('reloadLayout');
cy.intercept('GET', '/region/preview/*').as('regionPreview');
// Select a widget from the timeline
cy.get('#layout-timeline .designer-region:first [data-type="widget"]:first-child').click().then(($el) => {
const widgetId = $el.attr('id');
// Wait for the widget to be loaded
cy.wait('@regionPreview');
// Click trash container
cy.get('.editor-bottom-bar button#delete-btn').click({force: true});
// Confirm delete on modal
cy.get('[data-test="deleteObjectModal"] button.btn-bb-confirm').click();
// Check toast message
cy.get('.toast-success').contains('Deleted');
// Wait for the layout to reload
cy.wait('@reloadLayout');
// Check that widget is not on timeline
cy.get('#layout-timeline [data-type="widget"]#' + widgetId).should('not.exist');
});
});
it.skip('saves the widgets order when sorting by dragging', () => {
cy.intercept('GET', 'POST', '**/playlist/order/*').as('saveOrder');
cy.intercept('GET', '/layout?layoutId=*').as('reloadLayout');
cy.get('#layout-timeline .designer-region:first [data-type="widget"]:first-child').then(($oldWidget) => {
const offsetX = 50;
// Move to the second widget position ( plus offset )
cy.wrap($oldWidget)
.trigger('mousedown', {
which: 1,
})
.trigger('mousemove', {
which: 1,
pageX: $oldWidget.offset().left + $oldWidget.width() * 1.5 + offsetX,
})
.trigger('mouseup', {force: true});
cy.wait('@saveOrder');
// Should show a notification for the order change
cy.get('.toast-success').contains('Order Changed');
// Reload layout and check if the new first widget has a different Id
cy.wait('@reloadLayout');
cy.get('#layout-timeline .designer-region:first [data-type="widget"]:first-child').then(($newWidget) => {
expect($oldWidget.attr('id')).not.to.eq($newWidget.attr('id'));
});
});
});
});