diff --git a/cypress/e2e/attachments.spec.js b/cypress/e2e/attachments.spec.js index f8ffe0bc1a5..86dffe7e57e 100644 --- a/cypress/e2e/attachments.spec.js +++ b/cypress/e2e/attachments.spec.js @@ -21,7 +21,6 @@ */ import { initUserAndFiles, randHash, randUser } from '../utils/index.js' -import 'cypress-file-upload' const user = randUser() const recipient = randUser() @@ -41,7 +40,12 @@ function attachFile(name, requestAlias = null) { } return cy.getEditor() .find('input[type="file"][data-text-el="attachment-file-input"]') - .attachFile(name) + .selectFile([ + { + contents: 'cypress/fixtures/' + name, + fileName: name, + }, + ], { force: true }) } /** @@ -406,10 +410,4 @@ describe('Test all attachment insertion methods', () => { } }) }) - - it('Delete the user', () => { - cy.deleteUser(user) - cy.deleteUser(recipient) - }) - }) diff --git a/cypress/e2e/nodes/ImageView.spec.js b/cypress/e2e/nodes/ImageView.spec.js index ad0c78591d4..eab983f4ec6 100644 --- a/cypress/e2e/nodes/ImageView.spec.js +++ b/cypress/e2e/nodes/ImageView.spec.js @@ -15,7 +15,6 @@ describe('Image View', () => { before(() => { cy.createUser(user) cy.login(user) - cy.visit('/apps/files') // Upload test files to user's storage cy.createFolder('child-folder') diff --git a/cypress/e2e/nodes/Mentions.spec.js b/cypress/e2e/nodes/Mentions.spec.js index 25c0ce69cbf..e732ea866b3 100644 --- a/cypress/e2e/nodes/Mentions.spec.js +++ b/cypress/e2e/nodes/Mentions.spec.js @@ -1,5 +1,4 @@ import { initUserAndFiles, randUser } from '../../utils/index.js' -import 'cypress-file-upload' const user = randUser() const mentionMe = randUser() diff --git a/cypress/e2e/sync.spec.js b/cypress/e2e/sync.spec.js index 26449b12d88..ba2b401e536 100644 --- a/cypress/e2e/sync.spec.js +++ b/cypress/e2e/sync.spec.js @@ -66,6 +66,8 @@ describe('Sync', () => { it('recovers from a lost connection', () => { let count = 0 + cy.intercept({ method: 'PUT', url: '**/apps/text/session/create' }) + .as('createSession') cy.intercept({ method: 'POST', url: '**/apps/text/session/*' }, (req) => { if (count < 4) { req.destroy() @@ -86,6 +88,9 @@ describe('Sync', () => { cy.wait('@syncAfterRecovery', { timeout: 30000 }) cy.get('#editor-container .document-status', { timeout: 30000 }) .should('not.contain', 'File could not be loaded') + // FIXME: There seems to be a bug where typed words maybe lost if not waiting for the new session + cy.wait('@createSession') + cy.wait('@syncAfterRecovery') cy.getContent().type('* more content added after the lost connection{enter}') cy.wait('@syncAfterRecovery') cy.closeFile() diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 56c1996a690..9d1276d7edd 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -36,48 +36,61 @@ addCommands() // and also to determine paths, urls and the like. let auth Cypress.Commands.overwrite('login', (login, user) => { + cy.window().then((win) => { + win.location.href = 'about:blank' + }) auth = { user: user.userId, password: user.password } login(user) }) Cypress.Commands.add('ocsRequest', (options) => { - return cy.request({ - form: true, - auth, - headers: { - 'OCS-ApiRequest': 'true', - 'Content-Type': 'application/x-www-form-urlencoded', - }, - ...options, - }) + return cy.request('/csrftoken') + .then(({ body }) => body.token) + .then(requesttoken => { + return cy.request({ + form: true, + auth, + headers: { + 'OCS-ApiRequest': 'true', + 'Content-Type': 'application/x-www-form-urlencoded', + requesttoken, + }, + ...options, + }) + }) }) Cypress.Commands.add('uploadFile', (fileName, mimeType, target) => { - return cy.fixture(fileName, 'base64') - .then(Cypress.Blob.base64StringToBlob) + return cy.fixture(fileName, 'binary') + .then(Cypress.Blob.binaryStringToBlob) .then(blob => { - const file = new File([blob], fileName, { type: mimeType }) if (typeof target !== 'undefined') { fileName = target } - return cy.request('/csrftoken') - .then(({ body }) => body.token) - .then(requesttoken => { - return axios.put(`${url}/remote.php/webdav/${fileName}`, file, { + cy.request('/csrftoken') + .then(({ body }) => { + return cy.wrap(body.token) + }) + .then(async (requesttoken) => { + return cy.request({ + url: `${url}/remote.php/webdav/${fileName}`, + method: 'put', + body: blob.size > 0 ? blob : '', + auth, headers: { requesttoken, 'Content-Type': mimeType, }, - }).then(response => { - const fileId = Number( - response.headers['oc-fileid']?.split('oc')?.[0] - ) - cy.log(`Uploaded ${fileName}`, - response.status, - { fileId } - ) - return fileId }) + }).then(response => { + const fileId = Number( + response.headers['oc-fileid']?.split('oc')?.[0] + ) + cy.log(`Uploaded ${fileName}`, + response.status, + { fileId } + ) + return cy.wrap(fileId) }) }) }) @@ -95,27 +108,27 @@ Cypress.Commands.add('downloadFile', (fileName) => { }) Cypress.Commands.add('createFile', (target, content, mimeType = 'text/markdown') => { - const fileName = target.split('/').pop() - const blob = new Blob([content], { type: mimeType }) - const file = new File([blob], fileName, { type: mimeType }) - return cy.window() - .then(async win => { - const response = await axios.put(`${url}/remote.php/webdav/${target}`, file, { + return cy.request('/csrftoken') + .then(({ body }) => body.token) + .then(requesttoken => { + return cy.request({ + url: `${url}/remote.php/webdav/${target}`, + method: 'put', + body: blob.size > 0 ? blob : '', + auth, headers: { - requesttoken: win.OC.requestToken, 'Content-Type': mimeType, + requesttoken, }, + }).then((response) => { + return cy.log(`Uploaded ${target}`, response.status) }) - - return cy.log(`Uploaded ${fileName}`, response.status) }) - }) Cypress.Commands.add('shareFileToUser', (path, targetUser, shareData = {}) => { - cy.clearCookies() cy.ocsRequest({ method: 'POST', url: `${url}/ocs/v2.php/apps/files_sharing/api/v1/shares`, @@ -212,7 +225,8 @@ Cypress.Commands.add('createFolder', (target) => { return cy.request('/csrftoken') .then(({ body }) => body.token) .then(requesttoken => { - return axios.request(`${rootPath}/${dirPath}`, { + return cy.request({ + url: `${rootPath}/${dirPath}`, method: 'MKCOL', auth, headers: { diff --git a/package-lock.json b/package-lock.json index 2d435e94dbc..24440090f1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,7 +95,6 @@ "@vue/test-utils": "^1.3.0 <2", "@vue/vue2-jest": "^29.2.4", "cypress": "^12.15.0", - "cypress-file-upload": "^5.0.8", "eslint-plugin-cypress": "^2.13.3", "identity-obj-proxy": "^3.0.0", "jest": "^29.5.0", @@ -7999,18 +7998,6 @@ "node": "^14.0.0 || ^16.0.0 || >=18.0.0" } }, - "node_modules/cypress-file-upload": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", - "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", - "dev": true, - "engines": { - "node": ">=8.2.1" - }, - "peerDependencies": { - "cypress": ">3.0.0" - } - }, "node_modules/cypress/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -27785,13 +27772,6 @@ } } }, - "cypress-file-upload": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", - "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", - "dev": true, - "requires": {} - }, "dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", diff --git a/package.json b/package.json index 9b026747634..2b97f7bf86d 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,6 @@ "@vue/test-utils": "^1.3.0 <2", "@vue/vue2-jest": "^29.2.4", "cypress": "^12.15.0", - "cypress-file-upload": "^5.0.8", "eslint-plugin-cypress": "^2.13.3", "identity-obj-proxy": "^3.0.0", "jest": "^29.5.0",