Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Update @nextcloud/cypress to v1.0.0-beta.11 #49403

Merged
merged 1 commit into from
Nov 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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: 4 additions & 9 deletions cypress/e2e/files_sharing/public-share/setup-public-share.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,25 +92,20 @@ 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()

const shareData: Record<string, unknown> = {}
return cy.createRandomUser()
.then(($user) => { user = $user })
.then(() => setupData(shareName))
.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
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ describe('files_sharing: Public share - File drop', { testIsolation: true }, ()
})

describe('Terms of service', { testIsolation: true }, () => {
before(() => cy.runOccCommand('config:app:set --value "TEST: Some disclaimer text" --type string core shareapi_public_link_disclaimertext'))
before(() => cy.runOccCommand('config:app:set --value \'TEST: Some disclaimer text\' --type string core shareapi_public_link_disclaimertext'))
beforeEach(() => cy.visit(shareUrl))
after(() => cy.runOccCommand('config:app:delete core shareapi_public_link_disclaimertext'))

Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/files_versions/version_expiration.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe('Versions expiration', () => {
})

it('Expire all versions', () => {
cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"')
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')
Expand All @@ -38,7 +38,7 @@ describe('Versions expiration', () => {
it('Expire versions v2', () => {
nameVersion(2, 'v1')

cy.runOccCommand('config:system:set versions_retention_obligation --value "0, 0"')
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')
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
4 changes: 2 additions & 2 deletions cypress/e2e/settings/users_groups.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,15 +213,15 @@ describe.only('Settings: Sort groups in the UI', () => {
cy.runOccCommand('group:list --output json').then((output) => {
const groups = Object.keys(JSON.parse(output.stdout)).filter((group) => group !== 'admin')
groups.forEach((group) => {
cy.runOccCommand(`group:delete "${group}"`)
cy.runOccCommand(`group:delete '${group}'`)
})
})

// Add two groups and add one user to group B
cy.runOccCommand('group:add A')
cy.runOccCommand('group:add B')
cy.createRandomUser().then((user) => {
cy.runOccCommand(`group:adduser B "${user.userId}"`)
cy.runOccCommand(`group:adduser B '${user.userId}'`)
})

// Visit the settings as admin
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/theming/a11y-color-contrast.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ describe('Accessibility of Nextcloud theming colors', () => {
before(() => {
cy.createRandomUser().then(($user) => {
// set user theme
cy.runOccCommand(`user:setting -- '${$user.userId}' theming enabled-themes '["${theme}"]'`)
cy.runOccCommand(`user:setting -- '${$user.userId}' theming enabled-themes '[\\"${theme}\\"]'`)
cy.login($user)
cy.visit('/')
cy.injectAxe({ axeCorePath: 'node_modules/axe-core/axe.min.js' })
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/theming/user-settings_app-order.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ describe('User theming set app order with default app', () => {
// install a third app
installTestApp()
// set files as default app
cy.runOccCommand('config:system:set --value "files" defaultapp')
cy.runOccCommand('config:system:set --value \'files\' defaultapp')

// Create random user for this test
cy.createRandomUser().then(($user) => {
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'`)
})
22 changes: 19 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,12 @@ 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.exec(`docker exec --workdir /var/www/html ${containerName} chown -R www-data:www-data /var/www/html/apps/testapp`)
})
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 +66,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"
}
}
}
artonge marked this conversation as resolved.
Show resolved Hide resolved
Loading