Skip to content

Commit

Permalink
Add more cypress tests, as skipped for now because failing
Browse files Browse the repository at this point in the history
Signed-off-by: Côme Chilliet <[email protected]>
  • Loading branch information
come-nc committed Dec 4, 2023
1 parent aa055cb commit 99c7c08
Show file tree
Hide file tree
Showing 2 changed files with 189 additions and 57 deletions.
208 changes: 151 additions & 57 deletions cypress/e2e/groupfolders.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,15 @@ import {
createGroup,
createGroupFolder,
deleteGroupFolder,
deleteFile,
enableACLPermissions,
enterFolder,
enterFolderInTrashbin,
fileOrFolderExists,
fileOrFolderDoesNotExist,
fileOrFolderExistsInTrashbin,
fileOrFolderDoesNotExistInTrashbin,
restoreFile,
setACLPermissions,
PERMISSION_DELETE,
PERMISSION_READ,
Expand All @@ -44,7 +52,10 @@ describe('Groupfolders ACLs and trashbin behavior', () => {
let groupName: string
let groupFolderName: string

before(() => {
beforeEach(() => {
if (groupFolderId) {
deleteGroupFolder(groupFolderId)
}
groupName = `test_group_${randHash()}`
groupFolderName = `test_group_folder_${randHash()}`

Expand All @@ -68,102 +79,185 @@ describe('Groupfolders ACLs and trashbin behavior', () => {
createGroupFolder(groupFolderName, groupName, [PERMISSION_READ, PERMISSION_WRITE, PERMISSION_DELETE])
.then(_groupFolderId => {
groupFolderId = _groupFolderId
enableACLPermissions(groupFolderId)
addACLManagerUser(groupFolderId,managerUser.userId)
})
})
})
})

after(() => {
if (groupFolderId) {
deleteGroupFolder(groupFolderId)
}
})
it('ACL, delete and restore', () => {
// Create two subfolders and two files as manager
cy.login(managerUser)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1`)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1/subfolder2`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/file1.txt`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/subfolder2/file2.txt`)

it('Configure ACL manager', () => {
enableACLPermissions(groupFolderId)
addACLManagerUser(groupFolderId,managerUser.userId)
})
// Set ACL permissions
setACLPermissions(groupFolderId, '/subfolder1', [`+${PERMISSION_READ}`,`-${PERMISSION_WRITE}`], undefined, user1.userId)
setACLPermissions(groupFolderId, '/subfolder1', [`-${PERMISSION_READ}`], undefined, user2.userId)

it('Visit the group folder as user1', () => {
// User1 has access
cy.login(user1)
cy.visit('/apps/files')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).should('be.visible')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).click()
})
enterFolder(groupFolderName)
enterFolder('subfolder1')
fileOrFolderExists('file1.txt')
enterFolder('subfolder2')
fileOrFolderExists('file2.txt')

// User2 has no access
cy.login(user2)
cy.visit('/apps/files')
enterFolder(groupFolderName)
fileOrFolderDoesNotExist('subfolder1')

it('Create two subfolders and a file as manager', () => {
// Delete files
cy.login(managerUser)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1`)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1/subfolder2`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/subfolder2/file.txt`)
})
cy.visit('/apps/files')
enterFolder(groupFolderName)
enterFolder('subfolder1')
deleteFile('file1.txt')
deleteFile('subfolder2')

it('Set ACL permissions', () => {
setACLPermissions(groupFolderId, '/subfolder1', [`+${PERMISSION_READ}`,`-${PERMISSION_WRITE}`], undefined, user1.userId)
setACLPermissions(groupFolderId, '/subfolder1', [`-${PERMISSION_READ}`], undefined, user2.userId)
})
// User1 sees it in trash
cy.login(user1)
cy.visit('/apps/files/trashbin')
fileOrFolderExistsInTrashbin('file1.txt')
enterFolderInTrashbin('subfolder2')
fileOrFolderExists('file2.txt')

// User2 does not
cy.login(user2)
cy.visit('/apps/files/trashbin')
fileOrFolderDoesNotExistInTrashbin('file1.txt')
fileOrFolderDoesNotExistInTrashbin('subfolder2')

it('User1 has access', () => {
// Restore files
cy.login(managerUser)
cy.visit('/apps/files/trashbin')
fileOrFolderExistsInTrashbin('file1.txt')
fileOrFolderExistsInTrashbin('subfolder2')
restoreFile('file1.txt')
restoreFile('subfolder2')

// User1 has access
cy.login(user1)
cy.visit('/apps/files')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"]`).should('be.visible')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder2"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="file.txt"]`).should('be.visible')
})
enterFolder(groupFolderName)
fileOrFolderExists('subfolder1')
enterFolder('subfolder1')
fileOrFolderExists('file1.txt')
enterFolder('subfolder2')
fileOrFolderExists('file2.txt')

it('User2 has no access', () => {
// User2 has no access
cy.login(user2)
cy.visit('/apps/files')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"]`).should('not.exist')
enterFolder(groupFolderName)
fileOrFolderDoesNotExist('subfolder1')
})

it('Delete file.txt', () => {
it.skip('ACL directly on deleted folder', () => {
// Create a subfolders and a file as manager
cy.login(managerUser)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/file1.txt`)

// Set ACL permissions on subfolder
setACLPermissions(groupFolderId, '/subfolder1', [`+${PERMISSION_READ}`,`-${PERMISSION_WRITE}`], undefined, user1.userId)
setACLPermissions(groupFolderId, '/subfolder1', [`-${PERMISSION_READ}`], undefined, user2.userId)

// Delete subfolder
cy.login(managerUser)
cy.visit('/apps/files')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder2"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="file.txt"] [data-cy-files-list-row-actions]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="delete"]`).scrollIntoView()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="delete"]`).click()
})
enterFolder(groupFolderName)
deleteFile('subfolder1')

it('User1 sees it in trash', () => {
// User1 sees it in trash
cy.login(user1)
cy.visit('/apps/files/trashbin')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="file.txt.d"]`).should('be.visible')
})
fileOrFolderExistsInTrashbin('subfolder1')
enterFolderInTrashbin('subfolder1')
fileOrFolderExists('file1.txt')

it('User2 does not', () => {
// User2 does not
cy.login(user2)
cy.visit('/apps/files/trashbin')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="file.txt.d"]`).should('not.exist')
fileOrFolderDoesNotExistInTrashbin('subfolder1')
})

it('Rename subfolder2', () => {
it.skip('Delete, rename parent and restore', () => {
// Create a subfolders and a file as manager
cy.login(managerUser)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/file1.txt`)

// Delete file
cy.login(managerUser)
cy.visit('/apps/files')
enterFolder(groupFolderName)
enterFolder('subfolder1')
deleteFile('file1.txt')

// Rename subfolder1
cy.visit('/apps/files')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${groupFolderName}"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder2"] [data-cy-files-list-row-actions]`).click()
enterFolder(groupFolderName)
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"] [data-cy-files-list-row-actions]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="rename"]`).scrollIntoView()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="rename"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder2"] [class="files-list__row-rename"] [class="input-field__input"]`).type('subfolder2renamed{enter}')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder2renamed"]`).should('be.visible')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"] [class="files-list__row-rename"] [class="input-field__input"]`).type('subfolder1renamed{enter}')
fileOrFolderExists('subfolder1renamed')

// Restore from trash
cy.visit('/apps/files/trashbin')
restoreFile('file1.txt')

// File should be restored in renamed folder
cy.login(managerUser)
cy.visit('/apps/files')
enterFolder(groupFolderName)
fileOrFolderExists('subfolder1renamed')
fileOrFolderDoesNotExist('file1.txt')
enterFolder('subfolder1renamed')
fileOrFolderExists('file1.txt')
})

it('User1 still sees it in trash', () => {
it.skip('Delete, rename parent and check ACL', () => {
// Create a subfolders and a file as manager
cy.login(managerUser)
cy.mkdir(managerUser, `/${groupFolderName}/subfolder1`)
cy.uploadContent(managerUser, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/subfolder1/file1.txt`)

// Set ACL permissions
setACLPermissions(groupFolderId, '/subfolder1', [`+${PERMISSION_READ}`,`-${PERMISSION_WRITE}`], undefined, user1.userId)
setACLPermissions(groupFolderId, '/subfolder1', [`-${PERMISSION_READ}`], undefined, user2.userId)

// Delete file
cy.login(managerUser)
cy.visit('/apps/files')
enterFolder(groupFolderName)
enterFolder('subfolder1')
deleteFile('file1.txt')

// Rename subfolder1
cy.visit('/apps/files')
enterFolder(groupFolderName)
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"] [data-cy-files-list-row-actions]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="rename"]`).scrollIntoView()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="rename"]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="subfolder1"] [class="files-list__row-rename"] [class="input-field__input"]`).type('subfolder1renamed{enter}')
fileOrFolderExists('subfolder1renamed')

// User1 sees it in trash
cy.login(user1)
cy.visit('/apps/files/trashbin')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="file.txt.d"]`).should('be.visible')
})
fileOrFolderExistsInTrashbin('file1.txt')

it('User2 still does not', () => {
// User2 does not
cy.login(user2)
cy.visit('/apps/files/trashbin')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="file.txt.d"]`).should('not.exist')
fileOrFolderDoesNotExistInTrashbin('file1.txt')
})
})
38 changes: 38 additions & 0 deletions cypress/e2e/groupfoldersUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,41 @@ export function setACLPermissions(
export function deleteGroupFolder(groupFolderId: string) {
return cy.runOccCommand(`groupfolders:delete ${groupFolderId}`)
}

export function fileOrFolderExists(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${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')
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${name}"]`).should('not.exist')
}

export function fileOrFolderExistsInTrashbin(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="${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] [data-cy-files-list-row-name^="${name}.d"]`).should('not.exist')
}

export function enterFolder(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${name}"]`).click()
}

export function enterFolderInTrashbin(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="${name}.d"]`).click()
}

export function deleteFile(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name="${name}"] [data-cy-files-list-row-actions]`).click()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="delete"]`).scrollIntoView()
cy.get(`[data-cy-files-list] [data-cy-files-list-row-action="delete"]`).click()
}

export function restoreFile(name: string) {
cy.get(`[data-cy-files-list] [data-cy-files-list-row-name^="${name}.d"] [data-cy-files-list-row-action="restore"]`).click()
}

0 comments on commit 99c7c08

Please sign in to comment.