diff options
author | Joas Schilling <213943+nickvergessen@users.noreply.github.com> | 2023-04-04 13:42:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 13:42:53 +0200 |
commit | 44cb46c0f24dc369666bfc44ced0cad8f11ccc5b (patch) | |
tree | 0760e1ea7ce30f36b6fd8923bed6871f48ad5df5 | |
parent | f78b077eaa3968e49b182e05d8ce6453708b429d (diff) | |
parent | 67df0afaffa67ded8e7d63ebc9f82d32c53f0153 (diff) | |
download | nextcloud-server-44cb46c0f24dc369666bfc44ced0cad8f11ccc5b.tar.gz nextcloud-server-44cb46c0f24dc369666bfc44ced0cad8f11ccc5b.zip |
Merge pull request #37345 from nextcloud/artonge/fix_files_version_cypress_tests
Fix cypress tests for files_versions
-rw-r--r-- | .github/workflows/cypress.yml | 24 | ||||
-rw-r--r-- | cypress.config.ts | 4 | ||||
-rw-r--r-- | cypress/dockerNode.ts | 1 | ||||
-rw-r--r-- | cypress/e2e/files_versions/filesVersionsUtils.ts | 28 | ||||
-rw-r--r-- | cypress/e2e/files_versions/version_creation.cy.ts | 10 | ||||
-rw-r--r-- | cypress/e2e/files_versions/version_download.cy.ts | 14 | ||||
-rw-r--r-- | cypress/e2e/files_versions/version_expiration.cy.ts | 22 | ||||
-rw-r--r-- | cypress/e2e/files_versions/version_naming.cy.ts | 8 | ||||
-rw-r--r-- | cypress/e2e/files_versions/version_restoration.cy.ts | 16 | ||||
-rw-r--r-- | cypress/support/commands.ts | 51 |
10 files changed, 114 insertions, 64 deletions
diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index ea1a741f574..66f3b4383fc 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -57,7 +57,7 @@ jobs: fail-fast: false matrix: # run multiple copies of the current job in parallel - containers: ['component', 1, 2] + containers: ["component", 1, 2] name: runner ${{ matrix.containers }} @@ -91,6 +91,28 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + - name: Extract NC logs + if: failure() && matrix.containers != 'component' + run: docker logs nextcloud-cypress-tests-server > nextcloud.log + + - name: Upload NC logs + uses: actions/upload-artifact@v3 + if: failure() && matrix.containers != 'component' + with: + name: nc_logs_${{ matrix.containers }} + path: nextcloud.log + + - name: Create data dir archive + if: failure() && matrix.containers != 'component' + run: docker exec nextcloud-cypress-tests-server tar -cvjf - data > data.tar + + - name: Upload data dir archive + uses: actions/upload-artifact@v3 + if: failure() && matrix.containers != 'component' + with: + name: nc_data_${{ matrix.containers }} + path: data.tar + summary: runs-on: ubuntu-latest needs: [init, cypress] diff --git a/cypress.config.ts b/cypress.config.ts index b8cb90c5177..0fba6005dc2 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -71,7 +71,9 @@ export default defineConfig({ // Remove container after run on('after:run', () => { - stopNextcloud() + if (!process.env.CI) { + stopNextcloud() + } }) // Before the browser launches diff --git a/cypress/dockerNode.ts b/cypress/dockerNode.ts index 58544118024..af5619bbf80 100644 --- a/cypress/dockerNode.ts +++ b/cypress/dockerNode.ts @@ -122,7 +122,6 @@ export const configureNextcloud = async function() { await runExec(container, ['php', 'occ', 'config:system:set', 'default_locale', '--value', 'en_US'], true) await runExec(container, ['php', 'occ', 'config:system:set', 'force_locale', '--value', 'en_US'], true) await runExec(container, ['php', 'occ', 'config:system:set', 'enforce_theme', '--value', 'light'], true) - await runExec(container, ['php', 'occ', 'config:system:set', 'versions_retention_obligation', '--value', '0, 0'], true) console.log('└─ Nextcloud is now ready to use 🎉') } diff --git a/cypress/e2e/files_versions/filesVersionsUtils.ts b/cypress/e2e/files_versions/filesVersionsUtils.ts index 1aa7ebde316..87252fc60f1 100644 --- a/cypress/e2e/files_versions/filesVersionsUtils.ts +++ b/cypress/e2e/files_versions/filesVersionsUtils.ts @@ -21,13 +21,17 @@ */ import path from "path" +import type { User } from "@nextcloud/cypress" -export function uploadThreeVersions(user) { - cy.uploadContent(user, new Blob(['v1'], { type: 'text/plain' }), 'text/plain', '/test.txt') - cy.wait(1000) - cy.uploadContent(user, new Blob(['v2'], { type: 'text/plain' }), 'text/plain', '/test.txt') - cy.wait(1000) - cy.uploadContent(user, new Blob(['v3'], { type: 'text/plain' }), 'text/plain', '/test.txt') +export function uploadThreeVersions(user: User, fileName: string) { + // A new version will not be created if the changes occur + // within less than one second of each other. + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.uploadContent(user, new Blob(['v1'], { type: 'text/plain' }), 'text/plain', `/${fileName}`) + .wait(1100) + .uploadContent(user, new Blob(['v2'], { type: 'text/plain' }), 'text/plain', `/${fileName}`) + .wait(1100) + .uploadContent(user, new Blob(['v3'], { type: 'text/plain' }), 'text/plain', `/${fileName}`) cy.login(user) } @@ -52,7 +56,7 @@ export function openVersionMenu(index: number) { cy.get('[data-files-versions-version]') .eq(index).within(() => { cy.get('.action-item__menutoggle').filter(':visible') - .click() + .click() }) }) } @@ -65,17 +69,17 @@ export function clickPopperAction(actionName: string) { export function nameVersion(index: number, name: string) { openVersionMenu(index) - clickPopperAction("Name this version") + clickPopperAction('Name this version') cy.get(':focused').type(`${name}{enter}`) } -export function assertVersionContent(index: number, expectedContent: string) { +export function assertVersionContent(filename: string, index: number, expectedContent: string) { const downloadsFolder = Cypress.config('downloadsFolder') openVersionMenu(index) - clickPopperAction("Download version") + clickPopperAction('Download version') - return cy.readFile(path.join(downloadsFolder, 'test.txt')) + return cy.readFile(path.join(downloadsFolder, filename)) .then((versionContent) => expect(versionContent).to.equal(expectedContent)) - .then(() => cy.exec(`rm ${downloadsFolder}/test.txt`)) + .then(() => cy.exec(`rm ${downloadsFolder}/${filename}`)) }
\ No newline at end of file diff --git a/cypress/e2e/files_versions/version_creation.cy.ts b/cypress/e2e/files_versions/version_creation.cy.ts index d6655059143..d390d1c4406 100644 --- a/cypress/e2e/files_versions/version_creation.cy.ts +++ b/cypress/e2e/files_versions/version_creation.cy.ts @@ -23,18 +23,22 @@ import { openVersionsPanel, uploadThreeVersions } from './filesVersionsUtils' describe('Versions creation', () => { + let randomFileName = '' + before(() => { + randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt' + cy.createRandomUser() .then((user) => { - uploadThreeVersions(user) + uploadThreeVersions(user, randomFileName) cy.login(user) cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) }) }) it('Opens the versions panel and sees the versions', () => { - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) cy.get('#tab-version_vue').within(() => { cy.get('[data-files-versions-version]').should('have.length', 3) diff --git a/cypress/e2e/files_versions/version_download.cy.ts b/cypress/e2e/files_versions/version_download.cy.ts index 69f46915031..30299e9f8e1 100644 --- a/cypress/e2e/files_versions/version_download.cy.ts +++ b/cypress/e2e/files_versions/version_download.cy.ts @@ -23,19 +23,23 @@ import { assertVersionContent, openVersionsPanel, uploadThreeVersions } from './filesVersionsUtils' describe('Versions download', () => { + let randomFileName = '' + before(() => { + randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt' + cy.createRandomUser() .then((user) => { - uploadThreeVersions(user) + uploadThreeVersions(user, randomFileName) cy.login(user) cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) }) }) it('Download versions and assert there content', () => { - assertVersionContent(0, 'v3') - assertVersionContent(1, 'v2') - assertVersionContent(2, 'v1') + assertVersionContent(randomFileName, 0, 'v3') + assertVersionContent(randomFileName, 1, 'v2') + assertVersionContent(randomFileName, 2, 'v1') }) }) diff --git a/cypress/e2e/files_versions/version_expiration.cy.ts b/cypress/e2e/files_versions/version_expiration.cy.ts index fdac454884d..a3b2eea83e1 100644 --- a/cypress/e2e/files_versions/version_expiration.cy.ts +++ b/cypress/e2e/files_versions/version_expiration.cy.ts @@ -23,35 +23,43 @@ import { assertVersionContent, nameVersion, openVersionsPanel, uploadThreeVersions } from './filesVersionsUtils' describe('Versions expiration', () => { + let randomFileName = '' + beforeEach(() => { + randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt' + cy.createRandomUser() .then((user) => { - uploadThreeVersions(user) + uploadThreeVersions(user, randomFileName) cy.login(user) cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) }) }) it('Expire all versions', () => { + cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"') cy.runOccCommand('versions:expire') + cy.runOccCommand('config:system:set versions_retention_obligation --value auto') cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) cy.get('#tab-version_vue').within(() => { cy.get('[data-files-versions-version]').should('have.length', 1) cy.get('[data-files-versions-version]').eq(0).contains('Current version') }) - assertVersionContent(0, 'v3') + assertVersionContent(randomFileName, 0, 'v3') }) it('Expire versions v2', () => { nameVersion(2, 'v1') + cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"') cy.runOccCommand('versions:expire') + cy.runOccCommand('config:system:set versions_retention_obligation --value auto') cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) cy.get('#tab-version_vue').within(() => { cy.get('[data-files-versions-version]').should('have.length', 2) @@ -59,7 +67,7 @@ describe('Versions expiration', () => { cy.get('[data-files-versions-version]').eq(1).contains('v1') }) - assertVersionContent(0, 'v3') - assertVersionContent(1, 'v1') + assertVersionContent(randomFileName, 0, 'v3') + assertVersionContent(randomFileName, 1, 'v1') }) }) diff --git a/cypress/e2e/files_versions/version_naming.cy.ts b/cypress/e2e/files_versions/version_naming.cy.ts index 03edae131b6..4b662e31b94 100644 --- a/cypress/e2e/files_versions/version_naming.cy.ts +++ b/cypress/e2e/files_versions/version_naming.cy.ts @@ -23,13 +23,17 @@ import { nameVersion, openVersionsPanel, uploadThreeVersions } from './filesVersionsUtils' describe('Versions naming', () => { + let randomFileName = '' + before(() => { + randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt' + cy.createRandomUser() .then((user) => { - uploadThreeVersions(user) + uploadThreeVersions(user, randomFileName) cy.login(user) cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) }) }) diff --git a/cypress/e2e/files_versions/version_restoration.cy.ts b/cypress/e2e/files_versions/version_restoration.cy.ts index 0e09b0d8aa6..115d30caa82 100644 --- a/cypress/e2e/files_versions/version_restoration.cy.ts +++ b/cypress/e2e/files_versions/version_restoration.cy.ts @@ -24,17 +24,21 @@ import { assertVersionContent, clickPopperAction, openVersionMenu, openVersionsP function restoreVersion(index: number) { openVersionMenu(index) - clickPopperAction("Restore version") + clickPopperAction('Restore version') } describe('Versions restoration', () => { + let randomFileName = '' + before(() => { + randomFileName = Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 10) + '.txt' + cy.createRandomUser() .then((user) => { - uploadThreeVersions(user) + uploadThreeVersions(user, randomFileName) cy.login(user) cy.visit('/apps/files') - openVersionsPanel('test.txt') + openVersionsPanel(randomFileName) }) }) @@ -48,8 +52,8 @@ describe('Versions restoration', () => { }) it('Downloads versions and assert there content', () => { - assertVersionContent(0, 'v1') - assertVersionContent(1, 'v3') - assertVersionContent(2, 'v2') + assertVersionContent(randomFileName, 0, 'v1') + assertVersionContent(randomFileName, 1, 'v3') + assertVersionContent(randomFileName, 2, 'v2') }) }) diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index d214bb2b45e..1a9999343d5 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -99,33 +99,32 @@ Cypress.Commands.add('uploadFile', (user, fixture = 'image.jpg', mimeType = 'ima */ Cypress.Commands.add('uploadContent', (user, blob, mimeType, target) => { cy.clearCookies() - .then(async () => { - const fileName = basename(target) - - // Process paths - const rootPath = `${Cypress.env('baseUrl')}/remote.php/dav/files/${encodeURIComponent(user.userId)}` - const filePath = target.split('/').map(encodeURIComponent).join('/') - try { - const file = new File([blob], fileName, { type: mimeType }) - await axios({ - url: `${rootPath}${filePath}`, - method: 'PUT', - data: file, - headers: { - 'Content-Type': mimeType, - }, - auth: { - username: user.userId, - password: user.password, - }, - }).then(response => { + .then(async () => { + const fileName = basename(target) + + // Process paths + const rootPath = `${Cypress.env('baseUrl')}/remote.php/dav/files/${encodeURIComponent(user.userId)}` + const filePath = target.split('/').map(encodeURIComponent).join('/') + try { + const file = new File([blob], fileName, { type: mimeType }) + const response = await axios({ + url: `${rootPath}${filePath}`, + method: 'PUT', + data: file, + headers: { + 'Content-Type': mimeType, + }, + auth: { + username: user.userId, + password: user.password, + }, + }) cy.log(`Uploaded content as ${fileName}`, response) - }) - } catch (error) { - cy.log('error', error) - throw new Error(`Unable to process fixture`) - } - }) + } catch (error) { + cy.log('error', error) + throw new Error('Unable to process fixture') + } + }) }) /** |