Skip to content

Commit

Permalink
chore: Update @nextcloud/cypress to v1.0.0-beta.11
Browse files Browse the repository at this point in the history
Signed-off-by: Louis Chemineau <[email protected]>
  • Loading branch information
artonge committed Nov 25, 2024
1 parent 3822db5 commit 9d7e7a1
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 75 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cypress.yml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ jobs:

- name: Create data dir archive
if: failure() && matrix.containers != 'component'
run: docker exec nextcloud-cypress-tests-server tar -cvjf - data > data.tar
run: docker exec nextcloud-cypress-tests_server tar -cvjf - data > data.tar

- name: Upload data dir archive
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
Expand Down
4 changes: 2 additions & 2 deletions cypress/dockerNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
import Docker from 'dockerode'
import waitOn from 'wait-on'
import { c as createTar } from 'tar'
import path from 'path'
import path, { basename } from 'path'
import { execSync } from 'child_process'
import { existsSync } from 'fs'

export const docker = new Docker()

const CONTAINER_NAME = 'nextcloud-cypress-tests-server'
const CONTAINER_NAME = `nextcloud-cypress-tests_${basename(process.cwd()).replace(' ', '')}`
const SERVER_IMAGE = 'ghcr.io/nextcloud/continuous-integration-shallow-server'

/**
Expand Down
13 changes: 5 additions & 8 deletions cypress/e2e/files_sharing/public-share/setup-public-share.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,15 +92,13 @@ export function setupPublicShare(): Cypress.Chainable<string> {
return cy.task('getVariable', { key: 'public-share-data' })
.then((data) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const { dataSnapshot, dbSnapshot, shareUrl } = data as any || {}
if (dataSnapshot && dbSnapshot) {
cy.restoreDB(dbSnapshot)
cy.restoreData(dataSnapshot)
const { dataSnapshot, shareUrl } = data as any || {}
if (dataSnapshot) {
cy.restoreState(dataSnapshot)
url = shareUrl
return cy.wrap(shareUrl as string)
} else {
cy.restoreData()
cy.restoreDB()
cy.restoreState()

const shareData: Record<string, unknown> = {}
return cy.createRandomUser()
Expand All @@ -109,8 +107,7 @@ export function setupPublicShare(): Cypress.Chainable<string> {
.then(() => createShare(shareName))
.then((value) => { shareData.shareUrl = value })
.then(() => adjustSharePermission())
.then(() => cy.backupDB().then((value) => { shareData.dbSnapshot = value }))
.then(() => cy.backupData([user.userId]).then((value) => { shareData.dataSnapshot = value }))
.then(() => cy.saveState().then((value) => { shareData.dataSnapshot = value }))
.then(() => cy.task('setVariable', { key: 'public-share-data', value: shareData }))
.then(() => cy.log(`Public share setup, URL: ${shareData.shareUrl}`))
.then(() => cy.wrap(url))
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/settings/personal-info.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ describe('Settings: Change personal information', { testIsolation: true }, () =>
cy.login(user)
cy.visit('/settings/user')

cy.backupDB().then(($snapshot) => {
cy.saveState().then(($snapshot) => {
snapshot = $snapshot
})
})
Expand All @@ -136,7 +136,7 @@ describe('Settings: Change personal information', { testIsolation: true }, () =>
})

afterEach(() => {
cy.restoreDB(snapshot)
cy.restoreState(snapshot)
})

it('Can dis- and enable the profile', () => {
Expand Down
34 changes: 1 addition & 33 deletions cypress/support/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,41 +216,9 @@ Cypress.Commands.add('resetUserTheming', (user?: User) => {
}
})

Cypress.Commands.add('runOccCommand', (command: string, options?: Partial<Cypress.ExecOptions>) => {
const env = Object.entries(options?.env ?? {}).map(([name, value]) => `-e '${name}=${value}'`).join(' ')
return cy.exec(`docker exec --user www-data ${env} nextcloud-cypress-tests-server php ./occ ${command}`, options)
})

Cypress.Commands.add('userFileExists', (user: string, path: string) => {
user.replaceAll('"', '\\"')
path.replaceAll('"', '\\"').replaceAll(/^\/+/gm, '')
return cy.exec(`docker exec --user www-data nextcloud-cypress-tests-server stat --printf="%s" "data/${user}/files/${path}"`, { failOnNonZeroExit: true })
return cy.runCommand(`stat --printf="%s" "data/${user}/files/${path}"`, { failOnNonZeroExit: true })
.then((exec) => Number.parseInt(exec.stdout || '0'))
})

Cypress.Commands.add('backupDB', (): Cypress.Chainable<string> => {
const randomString = Math.random().toString(36).substring(7)
cy.exec(`docker exec --user www-data nextcloud-cypress-tests-server cp /var/www/html/data/owncloud.db /var/www/html/data/owncloud.db-${randomString}`)
cy.log(`Created snapshot ${randomString}`)
return cy.wrap(randomString)
})

Cypress.Commands.add('restoreDB', (snapshot: string = 'init') => {
cy.exec(`docker exec --user www-data nextcloud-cypress-tests-server cp /var/www/html/data/owncloud.db-${snapshot} /var/www/html/data/owncloud.db`)
cy.log(`Restored snapshot ${snapshot}`)
})

Cypress.Commands.add('backupData', (users: string[] = ['admin']) => {
const snapshot = Math.random().toString(36).substring(7)
const toBackup = users.map((user) => `'${user.replaceAll('\\', '').replaceAll('\'', '\\\'')}'`).join(' ')
cy.exec(`docker exec --user www-data rm /var/www/html/data/data-${snapshot}.tar`, { failOnNonZeroExit: false })
cy.exec(`docker exec --user www-data --workdir /var/www/html/data nextcloud-cypress-tests-server tar cf /var/www/html/data/data-${snapshot}.tar ${toBackup}`)
return cy.wrap(snapshot as string)
})

Cypress.Commands.add('restoreData', (snapshot?: string) => {
snapshot = snapshot ?? 'init'
snapshot.replaceAll('\\', '').replaceAll('"', '\\"')
cy.exec(`docker exec --user www-data --workdir /var/www/html/data nextcloud-cypress-tests-server rm -vfr $(tar --exclude='*/*' -tf '/var/www/html/data/data-${snapshot}.tar')`)
cy.exec(`docker exec --user www-data --workdir /var/www/html/data nextcloud-cypress-tests-server tar -xf '/var/www/html/data/data-${snapshot}.tar'`)
})
19 changes: 16 additions & 3 deletions cypress/support/commonUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import { basename } from 'path'

/**
* Get the header navigation bar
*/
Expand Down Expand Up @@ -49,8 +51,9 @@ export function installTestApp() {
cy.runOccCommand('-V').then((output) => {
const version = output.stdout.match(/(\d\d+)\.\d+\.\d+/)?.[1]
cy.wrap(version).should('not.be.undefined')
cy.exec(`docker cp '${testAppPath}' nextcloud-cypress-tests-server:/var/www/html/apps`, { log: true })
cy.exec(`docker exec nextcloud-cypress-tests-server sed -i -e 's|-version="[0-9]\\+|-version="${version}|g' apps/testapp/appinfo/info.xml`)
getContainerName()
.then(containerName => cy.exec(`docker cp '${testAppPath}' ${containerName}:/var/www/html/apps`, { log: true }))
cy.runCommand(`sed -i -e 's|-version="[0-9]\\+|-version="${version}|g' apps/testapp/appinfo/info.xml`)
cy.runOccCommand('app:enable --force testapp')
})
}
Expand All @@ -60,5 +63,15 @@ export function installTestApp() {
*/
export function uninstallTestApp() {
cy.runOccCommand('app:remove testapp', { failOnNonZeroExit: false })
cy.exec('docker exec nextcloud-cypress-tests-server rm -fr apps/testapp/appinfo/info.xml')
cy.runCommand('rm -fr apps/testapp/appinfo/info.xml')
}

/**
*
*/
export function getContainerName(): Cypress.Chainable<string> {
return cy.exec('pwd')
.then(({ stdout }) => {
return cy.wrap(`nextcloud-cypress-tests_${basename(stdout).replace(' ', '')}`)
})
}
20 changes: 0 additions & 20 deletions cypress/support/cypress-e2e.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,27 +53,7 @@ declare global {
*/
resetUserTheming(user?: User): Cypress.Chainable<void>,

/**
* Run an occ command in the docker container.
*/
runOccCommand(command: string, options?: Partial<Cypress.ExecOptions>): Cypress.Chainable<Cypress.Exec>,

userFileExists(user: string, path: string): Cypress.Chainable<number>

/**
* Create a snapshot of the current database
*/
backupDB(): Cypress.Chainable<string>,

/**
* Restore a snapshot of the database
* Default is the post-setup state
*/
restoreDB(snapshot?: string): Cypress.Chainable

backupData(users?: string[]): Cypress.Chainable<string>

restoreData(snapshot?: string): Cypress.Chainable
}
}
}
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"@cypress/vue2": "^2.1.1",
"@cypress/webpack-preprocessor": "^6.0.2",
"@nextcloud/babel-config": "^1.2.0",
"@nextcloud/cypress": "^1.0.0-beta.9",
"@nextcloud/cypress": "^1.0.0-beta.11",
"@nextcloud/eslint-config": "^8.4.1",
"@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/typings": "^1.9.1",
Expand Down Expand Up @@ -204,4 +204,4 @@
"overrides": {
"colors": "1.4.0"
}
}
}

0 comments on commit 9d7e7a1

Please sign in to comment.