176 lines
7.1 KiB
TypeScript
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()
|
|
}
|