From 11b384b195992dbffc6bb5ec9eeb25f4630caa9c Mon Sep 17 00:00:00 2001 From: Tamás Zolnai Date: Tue, 22 Sep 2020 16:51:23 +0200 Subject: cypress: NC: test nextcloud specific features. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I52bc1709f29de1d69c2ae52c806bedad4eee8bc4 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/103254 Tested-by: Jenkins CollaboraOffice Reviewed-by: Tamás Zolnai --- cypress_test/data/mobile/writer/nextcloud.odt | Bin 0 -> 8487 bytes cypress_test/integration_tests/common/helper.js | 192 +++++++++++++++------ .../mobile/writer/nextcloud_spec.js | 170 ++++++++++++++++++ cypress_test/plugins/blacklists.js | 5 + cypress_test/plugins/index.js | 5 +- 5 files changed, 319 insertions(+), 53 deletions(-) create mode 100644 cypress_test/data/mobile/writer/nextcloud.odt create mode 100644 cypress_test/integration_tests/mobile/writer/nextcloud_spec.js diff --git a/cypress_test/data/mobile/writer/nextcloud.odt b/cypress_test/data/mobile/writer/nextcloud.odt new file mode 100644 index 000000000..f7494e82f Binary files /dev/null and b/cypress_test/data/mobile/writer/nextcloud.odt differ diff --git a/cypress_test/integration_tests/common/helper.js b/cypress_test/integration_tests/common/helper.js index f748b9bde..b41cbdeff 100644 --- a/cypress_test/integration_tests/common/helper.js +++ b/cypress_test/integration_tests/common/helper.js @@ -59,7 +59,138 @@ function loadTestDocLocal(fileName, subFolder, noFileCopy) { cy.log('Loading test document with a local build - end.'); } -function loadTestDocNextcloud(fileName, subFolder) { +function loadTestDocNextcloud(fileName, subFolder, subsequentLoad) { + cy.log('Loading test document with nextcloud - start.'); + cy.log('Param - fileName: ' + fileName); + cy.log('Param - subFolder: ' + subFolder); + cy.log('Param - subsequentLoad: ' + subsequentLoad); + + // Open local nextcloud installation + cy.visit('http://localhost/nextcloud'); + + if (subsequentLoad !== true) { + // Log in with cypress test user / password + cy.get('input#user') + .clear() + .type('cypress_test'); + + cy.get('input#password') + .clear() + .type('cypress_test'); + + cy.get('input#submit-form') + .click(); + + cy.get('.button.new') + .should('be.visible'); + + // Wait for free space calculation before uploading document + cy.get('#free_space') + .should('not.have.attr', 'value', ''); + + // Remove all files + cy.get('#fileList') + .then(function(filelist) { + if (filelist.find('tr').length !== 0) { + cy.waitUntil(function() { + cy.get('#fileList tr:nth-of-type(1) .action-menu.permanent') + .click(); + + cy.get('.menuitem.action.action-delete.permanent') + .click(); + + cy.get('#uploadprogressbar') + .should('not.be.visible'); + + return cy.get('#fileList') + .then(function(filelist) { + return filelist.find('tr').length === 0; + }); + }, {timeout: 60000}); + } + }); + } else { + // Wait for free space calculation before uploading document + cy.get('#free_space') + .should('not.have.attr', 'value', ''); + } + + cy.get('tr[data-file=\'' + fileName + '\']') + .should('not.exist'); + + // Upload test document + var fileURI = ''; + if (subFolder === undefined) { + fileURI += fileName; + } else { + fileURI += subFolder + '/' + fileName; + } + doIfOnDesktop(function() { + cy.get('input#file_upload_start') + .attachFile({ filePath: 'desktop/' + fileURI, encoding: 'binary' }); + }); + doIfOnMobile(function() { + cy.get('input#file_upload_start') + .attachFile({ filePath: 'mobile/' + fileURI, encoding: 'binary' }); + }); + + cy.get('#uploadprogressbar') + .should('not.be.visible'); + + // Open test document + cy.get('tr[data-file=\'' + fileName + '\']') + .click(); + + cy.get('iframe#richdocumentsframe') + .should('be.visible', {timeout : Cypress.config('defaultCommandTimeout') * 2.0}); + + var getIframeBody = function(originalGet, level) { + if (level === 1) { + return cy.wrap(originalGet('iframe#richdocumentsframe')) + .its('0.contentDocument', {log: false}).should('exist') + .its('body', {log: false}).should('not.be.undefined') + .then(cy.wrap, {log: false}); + } else if (level === 2) { + return cy.wrap(originalGet('iframe#richdocumentsframe')) + .its('0.contentDocument', {log: false}).should('exist') + .its('body', {log: false}).should('not.be.undefined') + .then(cy.wrap, {log: false}) + .find('iframe#loleafletframe', {log: false}) + .its('0.contentDocument', {log: false}).should('exist') + .its('body', {log: false}).should('not.be.undefined') + .then(cy.wrap, {log: false}); + } + }; + + cy.get('iframe#richdocumentsframe') + .then(function() { + Cypress.env('IFRAME_LEVEL', '2'); + }); + + Cypress.Commands.overwrite('get', function(originalFn, selector, options) { + var iFrameLevel = Cypress.env('IFRAME_LEVEL'); + if ((iFrameLevel === '1' || iFrameLevel === '2') && !selector.startsWith('@')) + if (selector === 'body') + return getIframeBody(originalFn, parseInt(iFrameLevel)); + else + return getIframeBody(originalFn, parseInt(iFrameLevel)).find(selector, options); + else + return originalFn(selector, options); + }); + + Cypress.Commands.overwrite('contains', function(originalFn, selector, content, options) { + if (Cypress.env('IFRAME_LEVEL') === '2') + return cy.get('#document-container').parent().wrap(originalFn(selector, content, options)); + else + return originalFn(selector, content, options); + }); + + cy.wait(10000); + + cy.log('Loading test document with nextcloud - end.'); +} + +function loadFileToNextCloud(fileName, subFolder) { cy.log('Loading test document with nextcloud - start.'); cy.log('Param - fileName: ' + fileName); cy.log('Param - subFolder: ' + subFolder); @@ -86,7 +217,6 @@ function loadTestDocNextcloud(fileName, subFolder) { cy.get('#free_space') .should('not.have.attr', 'value', ''); - // Remove all files cy.get('#fileList') .then(function(filelist) { if (filelist.find('tr').length !== 0) { @@ -130,52 +260,11 @@ function loadTestDocNextcloud(fileName, subFolder) { cy.get('#uploadprogressbar') .should('not.be.visible'); - // Open test document cy.get('tr[data-file=\'' + fileName + '\']') - .click(); - - cy.get('iframe#richdocumentsframe') - .should('be.visible', {timeout : Cypress.config('defaultCommandTimeout') * 2.0}); - - var getIframeBody = function(originalGet) { - return cy.wrap(originalGet('iframe#richdocumentsframe')) - .its('0.contentDocument', {log: false}).should('exist') - .its('body', {log: false}).should('not.be.undefined') - .then(cy.wrap, {log: false}) - .find('iframe#loleafletframe', {log: false}) - .its('0.contentDocument', {log: false}).should('exist') - .its('body', {log: false}).should('not.be.undefined') - .then(cy.wrap, {log: false}); - }; - - cy.get('iframe#richdocumentsframe') - .then(function() { - Cypress.env('WITHIN_IFRAME', 'TRUE'); - }); - - Cypress.Commands.overwrite('get', function(originalFn, selector, options) { - if (Cypress.env('WITHIN_IFRAME') === 'TRUE' && !selector.startsWith('@')) - if (selector === 'body') - return getIframeBody(originalFn); - else - return getIframeBody(originalFn).find(selector, options); - else - return originalFn(selector, options); - }); - - Cypress.Commands.overwrite('contains', function(originalFn, selector, content, options) { - if (Cypress.env('WITHIN_IFRAME') === 'TRUE') - return cy.get('#document-container').parent().wrap(originalFn(selector, content, options)); - else - return originalFn(selector, content, options); - }); - - cy.wait(10000); - - cy.log('Loading test document with nextcloud - end.'); + .should('be.visible'); } -function loadTestDoc(fileName, subFolder, noFileCopy) { +function loadTestDoc(fileName, subFolder, noFileCopy, subsequentLoad) { cy.log('Loading test document - start.'); cy.log('Param - fileName: ' + fileName); cy.log('Param - subFolder: ' + subFolder); @@ -186,7 +275,7 @@ function loadTestDoc(fileName, subFolder, noFileCopy) { }); if (Cypress.env('INTEGRATION') === 'nextcloud') { - loadTestDocNextcloud(fileName, subFolder); + loadTestDocNextcloud(fileName, subFolder, subsequentLoad); } else { loadTestDocLocal(fileName, subFolder, noFileCopy); } @@ -321,8 +410,8 @@ function matchClipboardText(regexp) { }); } -function beforeAll(fileName, subFolder, noFileCopy) { - loadTestDoc(fileName, subFolder, noFileCopy); +function beforeAll(fileName, subFolder, noFileCopy, subsequentLoad) { + loadTestDoc(fileName, subFolder, noFileCopy, subsequentLoad); } function afterAll(fileName) { @@ -333,7 +422,7 @@ function afterAll(fileName) { return; if (Cypress.env('INTEGRATION') === 'nextcloud') { - if (Cypress.env('WITHIN_IFRAME') === 'TRUE') { + if (Cypress.env('IFRAME_LEVEL') === '2') { // Close the document doIfOnMobile(function() { cy.get('#tb_actionbar_item_closemobile') @@ -346,7 +435,7 @@ function afterAll(fileName) { .then(function(item) { cy.wrap(item) .click(); - Cypress.env('WITHIN_IFRAME', ''); + Cypress.env('IFRAME_LEVEL', ''); }); }); doIfOnDesktop(function() { @@ -354,7 +443,7 @@ function afterAll(fileName) { .then(function(item) { cy.wrap(item) .click(); - Cypress.env('WITHIN_IFRAME', ''); + Cypress.env('IFRAME_LEVEL', ''); }); }); @@ -774,3 +863,4 @@ module.exports.doIfOnMobile = doIfOnMobile; module.exports.doIfOnDesktop = doIfOnDesktop; module.exports.moveCursor = moveCursor; module.exports.typeIntoDocument = typeIntoDocument; +module.exports.loadFileToNextCloud = loadFileToNextCloud; diff --git a/cypress_test/integration_tests/mobile/writer/nextcloud_spec.js b/cypress_test/integration_tests/mobile/writer/nextcloud_spec.js new file mode 100644 index 000000000..8df27bd59 --- /dev/null +++ b/cypress_test/integration_tests/mobile/writer/nextcloud_spec.js @@ -0,0 +1,170 @@ +/* global describe it cy require afterEach Cypress */ + +var helper = require('../../common/helper'); +var mobileHelper = require('../../common/mobile_helper'); + +describe('Nextcloud specific tests.', function() { + var testFileName = 'nextcloud.odt'; + + afterEach(function() { + helper.afterAll(testFileName); + }); + + it('Insert image from storage.', function() { + helper.loadFileToNextCloud('image_to_insert.png', 'writer'); + + helper.beforeAll(testFileName, 'writer', undefined, true); + + // Click on edit button + mobileHelper.enableEditingMobile(); + + mobileHelper.openInsertionWizard(); + + cy.get('.insertgraphicremote') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', ''); + cy.wrap(item) + .click(); + }); + + cy.get('.oc-dialog') + .should('be.visible'); + + cy.get('tr[data-entryname=\'image_to_insert.png\']') + .click(); + + cy.get('.oc-dialog-buttonrow .primary') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '2'); + cy.wrap(item) + .click(); + }); + + cy.get('.leaflet-pane.leaflet-overlay-pane svg g.Graphic') + .should('exist'); + }); + + it('Save as.', function() { + helper.beforeAll(testFileName, 'writer'); + + // Click on edit button + mobileHelper.enableEditingMobile(); + + mobileHelper.openHamburgerMenu(); + + cy.contains('.menu-entry-with-icon', 'File') + .click(); + + cy.contains('.menu-entry-with-icon', 'Save As...') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '1'); + cy.wrap(item) + .click(); + }); + + cy.get('.oc-dialog') + .should('be.visible'); + + cy.get('.oc-dialog input') + .clear() + .type('1' + testFileName); + + cy.get('.oc-dialog-buttonrow .primary') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '2'); + cy.wrap(item) + .click(); + }); + + // Close the document + cy.get('#mobile-edit-button') + .should('be.visible'); + + cy.get('#tb_actionbar_item_closemobile') + .then(function(item) { + cy.wrap(item) + .click(); + Cypress.env('IFRAME_LEVEL', ''); + }); + + cy.get('tr[data-file=\'1' + testFileName + '\']') + .should('be.visible'); + + cy.get('tr[data-file=\'' + testFileName + '\']') + .should('be.visible'); + }); + + it('Share.', function() { + helper.beforeAll(testFileName, 'writer'); + + // Click on edit button + mobileHelper.enableEditingMobile(); + + mobileHelper.openHamburgerMenu(); + + cy.contains('.menu-entry-with-icon', 'File') + .click(); + + cy.contains('.menu-entry-with-icon', 'Share...') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', ''); + cy.wrap(item) + .click(); + }); + + cy.get('#app-sidebar') + .should('be.visible'); + + // issue here + //cy.get('section#sharing') + // .should('be.visible'); + + cy.get('.app-sidebar__close.icon-close') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '2'); + cy.wrap(item) + .click(); + }); + }); + + it('Revision history.', function() { + helper.beforeAll(testFileName, 'writer'); + + // Click on edit button + mobileHelper.enableEditingMobile(); + + mobileHelper.openHamburgerMenu(); + + cy.contains('.menu-entry-with-icon', 'File') + .click(); + + cy.contains('.menu-entry-with-icon', 'See revision history') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', ''); + cy.wrap(item) + .click(); + }); + + cy.get('#app-sidebar') + .should('be.visible'); + + cy.get('section#tab-versionsTabView') + .should('be.visible'); + + cy.get('.app-sidebar__close.icon-close') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '1'); + cy.wrap(item) + .click(); + }); + + // issue here + cy.get('#revViewerContainer .icon-close') + .then(function(item) { + Cypress.env('IFRAME_LEVEL', '2'); + cy.wrap(item) + .click(); + }); + }); +}); + diff --git a/cypress_test/plugins/blacklists.js b/cypress_test/plugins/blacklists.js index cf2edb893..3fc54ba6b 100644 --- a/cypress_test/plugins/blacklists.js +++ b/cypress_test/plugins/blacklists.js @@ -163,6 +163,11 @@ var phpProxyBlackList = [ ], ]; +var nextcloudOnlyList = [ + ['mobile/writer/nextcloud_spec.js', []], +]; + module.exports.coreBlackLists = coreBlackLists; module.exports.nextcloudBlackList = nextcloudBlackList; +module.exports.nextcloudOnlyList = nextcloudOnlyList; module.exports.phpProxyBlackList = phpProxyBlackList; diff --git a/cypress_test/plugins/index.js b/cypress_test/plugins/index.js index 4547a88ba..83eccb2b6 100644 --- a/cypress_test/plugins/index.js +++ b/cypress_test/plugins/index.js @@ -79,8 +79,9 @@ function pickTests(filename, foundTests, config) { testsToRun = removeBlacklistedTest(filename, testsToRun, coreblackList); if (process.env.CYPRESS_INTEGRATION === 'nextcloud') { - var NCblackList = blacklists.nextcloudBlackList; - testsToRun = removeBlacklistedTest(filename, testsToRun, NCblackList); + testsToRun = removeBlacklistedTest(filename, testsToRun, blacklists.nextcloudBlackList); + } else { + testsToRun = removeBlacklistedTest(filename, testsToRun, blacklists.nextcloudOnlyList); } if (process.env.CYPRESS_INTEGRATION === 'php-proxy') { -- cgit v1.2.3