f7cloud_client/apps/groupfolders/cypress/e2e/groupfoldersUtils.ts
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

176 lines
7.1 KiB
TypeScript

/**
* SPDX-FileCopyrightText: 2023 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/* eslint-disable jsdoc/require-jsdoc */
import {getActionButtonForFile, getRowForFile, triggerActionForFile} from './files/filesUtils'
export const PERMISSION_READ = 'read'
export const PERMISSION_WRITE = 'write'
export const PERMISSION_SHARE = 'share'
export const PERMISSION_DELETE = 'delete'
export function createGroup(groupName: string) {
return cy.runOccCommand(`group:add ${groupName}`)
}
export function addUserToGroup(groupName: string, userName: string) {
return cy.runOccCommand(`group:adduser ${groupName} ${userName}`)
}
export function createGroupFolder(groupFolderName: string, groupName: string, groupPermissions: string[]) {
return cy.runOccCommand(`groupfolders:create ${groupFolderName}`)
.then(execObject => {
const groupFolderId = execObject.stdout
return cy.runOccCommand(`groupfolders:group ${groupFolderId} ${groupName} ${groupPermissions.join(' ')}`)
.then(() => groupFolderId)
})
}
export function enableACLPermissions(groupFolderId: string) {
return cy.runOccCommand(`groupfolders:permissions ${groupFolderId} --enable`)
}
export function disableACLPermissions(groupFolderId: string) {
return cy.runOccCommand(`groupfolders:permissions ${groupFolderId} --disable`)
}
export function addACLManagerUser(groupFolderId: string, userName: string) {
return cy.runOccCommand(`groupfolders:permissions ${groupFolderId} --manage-add --user ${userName}`)
}
export function removeACLManager(groupFolderId: string, groupOrUserName: string) {
return cy.runOccCommand(`groupfolders:permissions ${groupFolderId} --manage-remove ${groupOrUserName}`)
}
export function setACLPermissions(
groupFolderId: string,
path: string,
aclPermissions: string[],
groupId?: string,
userId?: string,
) {
const target = groupId !== undefined ? `--group ${groupId}` : `--user ${userId}`
return cy.runOccCommand(`groupfolders:permissions ${groupFolderId} ${path} ${target} -- ${aclPermissions.join(' ')}`)
}
export function deleteGroupFolder(groupFolderId: string) {
return cy.runOccCommand(`groupfolders:delete ${groupFolderId}`)
}
export function enableEncryptionModule() {
return cy.runOccCommand('app:enable encryption')
}
export function disableEncryptionModule() {
return cy.runOccCommand('app:disable encryption')
}
export function enableEncryption() {
return cy.runOccCommand('config:app:set --value=yes core encryption_enabled')
}
export function disableEncryption() {
return cy.runOccCommand('config:app:delete core encryption_enabled')
}
export function enableHomeStorageEncryption() {
// Default value is enabled
return cy.runOccCommand('config:app:delete encryption encryptHomeStorage')
}
export function disableHomeStorageEncryption() {
return cy.runOccCommand('config:app:set --value=0 encryption encryptHomeStorage')
}
export function enableGroupfoldersEncryption() {
return cy.runOccCommand('config:app:set --value=true groupfolders enable_encryption')
}
export function disableGroupfoldersEncryption() {
return cy.runOccCommand('config:app:delete groupfolders enable_encryption')
}
export function fileOrFolderExists(name: string) {
// Make sure file list is loaded first
cy.get('[data-cy-files-list-tfoot],[data-cy-files-content-empty]').should('be.visible')
getRowForFile(name).should('be.visible')
}
export function fileOrFolderDoesNotExist(name: string) {
// Make sure file list is loaded first
cy.get('[data-cy-files-list-tfoot],[data-cy-files-content-empty]').should('be.visible')
getRowForFile(name).should('not.exist')
}
export function fileOrFolderExistsInTrashbin(name: string) {
// Make sure file list is loaded first
cy.get('[data-cy-files-list-tfoot],[data-cy-files-content-empty]').should('be.visible')
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"]`).should('be.visible')
}
export function fileOrFolderDoesNotExistInTrashbin(name: string) {
// Make sure file list is loaded first
cy.get('[data-cy-files-list-tfoot],[data-cy-files-content-empty]').should('be.visible')
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"]`).should('not.exist')
}
export function enterFolder(name: string) {
cy.intercept({ times: 1, method: 'PROPFIND', url: `**/dav/files/**/${name}` }).as('propFindFolder')
getRowForFile(name).should('be.visible').find('[data-cy-files-list-row-name-link]').click({ force: true })
cy.wait('@propFindFolder')
}
export function enterFolderInTrashbin(name: string) {
cy.intercept({ times: 1, method: 'PROPFIND', url: `**/dav/trashbin/**/${name}.d*` }).as('propFindFolder')
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"]`).should('be.visible').find('[data-cy-files-list-row-name-link]').click({ force: true })
cy.wait('@propFindFolder')
}
export function deleteFolder(name: string) {
cy.intercept({ times: 1, method: 'DELETE', url: `**/dav/files/**/${name}` }).as('delete')
triggerActionForFile(name, 'delete')
cy.wait('@delete').its('response.statusCode').should('eq', 204)
}
export function deleteFolderFromTrashbin(name: string) {
cy.intercept({ times: 1, method: 'DELETE', url: `**/dav/trashbin/**/${name}.d*` }).as('delete')
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"] [data-cy-files-list-row-actions]`).findByRole('button', { name: 'Actions' }).click()
// Getting the last button to avoid the one from popup fading out
cy.get(`[data-cy-files-list-row-action="${CSS.escape('delete')}"] > button`).last().should('exist').click()
cy.wait('@delete').its('response.statusCode').should('eq', 204)
}
export function deleteFile(name: string) {
cy.intercept({ times: 1, method: 'DELETE', url: `**/dav/files/**/${name}` }).as('delete')
// For files wait for preview to load and release lock
getRowForFile(name).get('.files-list__row-icon img')
.should('be.visible')
.and(($img) => {
// "naturalWidth" and "naturalHeight" are set when the image loads
expect($img[0].naturalWidth, 'image has natural width').to.be.greaterThan(0)
})
triggerActionForFile(name, 'delete')
cy.wait('@delete').its('response.statusCode').should('eq', 204)
}
export function deleteFileFromTrashbin(name: string) {
cy.intercept({ times: 1, method: 'DELETE', url: `**/dav/trashbin/**/${name}.d*` }).as('delete')
// For files wait for preview to load and release lock
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"]`).get('.files-list__row-icon img')
.should('be.visible')
.and(($img) => {
// "naturalWidth" and "naturalHeight" are set when the image loads
expect($img[0].naturalWidth, 'image has natural width').to.be.greaterThan(0)
})
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"] [data-cy-files-list-row-actions]`).findByRole('button', { name: 'Actions' }).click()
// Getting the last button to avoid the one from popup fading out
cy.get(`[data-cy-files-list-row-action="${CSS.escape('delete')}"] > button`).last().should('exist').click()
cy.wait('@delete').its('response.statusCode').should('eq', 204)
}
export function restoreFile(name: string) {
cy.get(`[data-cy-files-list-row-name^="${CSS.escape(`${name}.d`)}"] button[data-cy-files-list-row-action="${CSS.escape('restore')}"]`).last().should('exist').click()
}