Files
Cloud-CMS/cypress/e2e/Library/playlist_editor_populated.cy.js

208 lines
8.3 KiB
JavaScript
Raw Normal View History

2025-12-02 10:32:59 -05:00
/*
* 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/>.
*/
describe('Playlist Editor (Populated)', function() {
beforeEach(function() {
cy.login();
// Create random name
let uuid = Cypress._.random(0, 1e9);
// Create a new layout and go to the layout's designer page
cy.createNonDynamicPlaylist(uuid).as('testPlaylistId').then((res) => {
// Populate playlist with some widgets and media
cy.addWidgetToPlaylist(res, 'embedded', {
name: 'Embedded Widget'
});
cy.addMediaToLibrary("file/example.zip");
cy.addWidgetToPlaylist(res, 'clock', {
name: 'Clock Widget'
});
cy.openPlaylistEditorAndLoadPrefs(res);
});
});
it('changes and saves widget properties', () => {
// Create and alias for reload widget
// cy.intercept('GET','/playlist/widget/form/edit/*').as('reloadWidget');
// Select the first widget on timeline ( image )
cy.get('#timeline-container [data-type="widget"]').first().click();
// Wait for the widget to load
// cy.wait('@reloadWidget');
// Type the new name in the input
cy.get('a[href="#advancedTab"]').click();
cy.get('#properties-panel-form-container input[name="name"]').clear().type('newName');
// Set a duration
cy.get('#properties-panel-form-container input[name="useDuration"]').check();
cy.get('#properties-panel-form-container input[name="duration"]').clear().type(12);
// Save form
cy.get('#properties-panel-form-container button[data-action="save"]').click();
// Should show a notification for the name change
// cy.get('.toast-success');
// Wait for the widget to reload
// cy.wait('@reloadWidget');
// Check if the values are the same entered after reload
cy.get('#properties-panel-form-container input[name="name"]').should('have.prop', 'value').and('equal', 'newName');
cy.get('#properties-panel-form-container input[name="duration"]').should('have.prop', 'value').and('equal', '12');
});
it.skip('should revert a saved form to a previous state', () => {
let oldName;
// Create and alias for reload widget
// cy.intercept('GET', '/playlist/widget/form/edit/*').as('reloadWidget');
// cy.intercept('PUT', '/playlist/widget/*').as('saveWidget');
// Select the first widget on timeline ( image )
cy.get('#timeline-container [data-type="widget"]').first().click();
// Wait for the widget to load
// cy.wait('@reloadWidget');
// Get the input field
cy.get('a[href="#advancedTab"]').click();
cy.get('#properties-panel-form-container input[name="name"]').then(($input) => {
// Save old name
oldName = $input.val();
//Type the new name in the input
cy.get('#properties-panel-form-container input[name="name"]').clear().type('newName');
// Save form
cy.get('#properties-panel-form-container button[data-action="save"]').click();
// Should show a notification for the name change
// cy.get('.toast-success');
// Wait for the widget to save
// cy.wait('@reloadWidget');
// Click the revert button
cy.get('#playlist-editor-toolbar #undoContainer').click();
// Wait for the widget to save
// cy.wait('@saveWidget');
// Test if the revert made the name go back to the old name
cy.get('#properties-panel-form-container input[name="name"]').should('have.prop', 'value').and('equal', oldName);
});
});
it('should delete a widget using the toolbar bin', () => {
// cy.intercept('/playlist?playlistId=*').as('reloadPlaylist');
// Select a widget from the navigator
cy.get('#playlist-timeline [data-type="widget"]').first().click().then(($el) => {
const widgetId = $el.attr('id');
// Click trash container
cy.get('div[class="widgetDelete"]').first().click({force: true});
// Confirm delete on modal
cy.get('button[class*="btn-bb-confirm"]').click();
// Check toast message
// cy.get('.toast-success').contains('Deleted');
// Wait for the layout to reload
// cy.wait('@reloadPlaylist');
// Check that widget is not on timeline
cy.get('#playlist-timeline [data-type="widget"]#' + widgetId).should('not.exist');
});
});
it.skip('should add an audio clip to a widget by the context menu, and adds a link to open the form in the timeline', () => {
cy.populateLibraryWithMedia();
// Create and alias for reload playlist
cy.intercept('/playlist?playlistId=*').as('reloadPlaylist');
// Right click to open the context menu and select add audio
cy.get('#timeline-container [data-type="widget"]').first().should('be.visible').rightclick();
cy.get('.context-menu-btn[data-property="Audio"]').should('be.visible').click();
// Select the 1st option
cy.get('[data-test="widgetPropertiesForm"] #mediaId > option').eq(1).then(($el) => {
cy.get('[data-test="widgetPropertiesForm"] #mediaId').select($el.val());
});
// Save and close the form
cy.get('[data-test="widgetPropertiesForm"] .btn-bb-done').click();
// Check if the widget has the audio icon
// cy.wait('@reloadPlaylist');
cy.get('#timeline-container [data-type="widget"]:first-child')
.find('i[data-property="Audio"]').should('exist').click({force: true});
cy.get('[data-test="widgetPropertiesForm"]').contains('Audio for');
});
// Skip test for now ( it's failing in the test suite and being tested already in layout designer spec )
it.skip('attaches expiry dates to a widget by the context menu, and adds a link to open the form in the timeline', () => {
// Create and alias for reload playlist
// cy.intercept('/playlist?playlistId=*').as('reloadPlaylist');
// Right click to open the context menu and select add audio
cy.get('#timeline-container [data-type="widget"]').first().should('be.visible').rightclick();
cy.get('.context-menu-btn[data-property="Expiry"]').should('be.visible').click();
// Add dates
cy.get('[data-test="widgetPropertiesForm"] .starttime-control .date-clear-button').click();
// cy.get('[data-test="widgetPropertiesForm"] #fromDt').find('input[class="datePickerHelper form-control dateControl dateTime active"]').click();
cy.get('div[class="flatpickr-wrapper"]').first().click();
cy.get('.flatpickr-calendar.open .dayContainer .flatpickr-day:first').click();
cy.get('[data-test="widgetPropertiesForm"] .endtime-control .date-clear-button').click();
// cy.get('[data-test="widgetPropertiesForm"] #toDt').find('input[class="datePickerHelper form-control dateControl dateTime active"]').click();
cy.get('div[class="flatpickr-wrapper"]').last().click();
cy.get('.flatpickr-calendar.open .dayContainer .flatpickr-day:first').click();
// Save and close the form
cy.get('[data-test="widgetPropertiesForm"] .btn-bb-done').click();
// Check if the widget has the expiry dates icon
// cy.wait('@reloadPlaylist');
cy.get('#timeline-container [data-type="widget"]:first-child')
.find('i[data-property="Expiry"]').should('exist').click({force: true});
cy.get('[data-test="widgetPropertiesForm"]').contains('Expiry for');
});
});