summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2023-04-04 13:42:53 +0200
committerGitHub <noreply@github.com>2023-04-04 13:42:53 +0200
commit44cb46c0f24dc369666bfc44ced0cad8f11ccc5b (patch)
tree0760e1ea7ce30f36b6fd8923bed6871f48ad5df5
parentf78b077eaa3968e49b182e05d8ce6453708b429d (diff)
parent67df0afaffa67ded8e7d63ebc9f82d32c53f0153 (diff)
downloadnextcloud-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.yml24
-rw-r--r--cypress.config.ts4
-rw-r--r--cypress/dockerNode.ts1
-rw-r--r--cypress/e2e/files_versions/filesVersionsUtils.ts28
-rw-r--r--cypress/e2e/files_versions/version_creation.cy.ts10
-rw-r--r--cypress/e2e/files_versions/version_download.cy.ts14
-rw-r--r--cypress/e2e/files_versions/version_expiration.cy.ts22
-rw-r--r--cypress/e2e/files_versions/version_naming.cy.ts8
-rw-r--r--cypress/e2e/files_versions/version_restoration.cy.ts16
-rw-r--r--cypress/support/commands.ts51
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')
+ }
+ })
})
/**