123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /**
- * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- import type { User } from '@nextcloud/cypress'
- import {
- clickOnBreadcrumbs,
- copyFile,
- createFolder,
- getRowForFile,
- getRowForFileId,
- moveFile,
- navigateToFolder,
- renameFile,
- triggerActionForFile,
- triggerInlineActionForFileId,
- } from './FilesUtils'
- import { setShowHiddenFiles, setupLivePhotos } from './LivePhotosUtils'
- describe('Files: Live photos', { testIsolation: true }, () => {
- let user: User
- let randomFileName: string
- let jpgFileId: number
- let movFileId: number
- beforeEach(() => {
- setupLivePhotos()
- .then((setupInfo) => {
- user = setupInfo.user
- randomFileName = setupInfo.fileName
- jpgFileId = setupInfo.jpgFileId
- movFileId = setupInfo.movFileId
- })
- })
- it('Only renders the .jpg file', () => {
- getRowForFileId(jpgFileId).should('have.length', 1)
- getRowForFileId(movFileId).should('have.length', 0)
- })
- context("'Show hidden files' is enabled", () => {
- beforeEach(() => {
- setShowHiddenFiles(true)
- })
- it("Shows both files when 'Show hidden files' is enabled", () => {
- getRowForFileId(jpgFileId).should('have.length', 1).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}.jpg`)
- getRowForFileId(movFileId).should('have.length', 1).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}.mov`)
- })
- it('Copies both files when copying the .jpg', () => {
- copyFile(`${randomFileName}.jpg`, '.')
- clickOnBreadcrumbs('All files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- getRowForFile(`${randomFileName} (copy).jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName} (copy).mov`).should('have.length', 1)
- })
- it('Copies both files when copying the .mov', () => {
- copyFile(`${randomFileName}.mov`, '.')
- clickOnBreadcrumbs('All files')
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- getRowForFile(`${randomFileName} (copy).jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName} (copy).mov`).should('have.length', 1)
- })
- it('Keeps live photo link when copying folder', () => {
- createFolder('folder')
- moveFile(`${randomFileName}.jpg`, 'folder')
- copyFile('folder', '.')
- navigateToFolder('folder (copy)')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- setShowHiddenFiles(false)
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 0)
- })
- it('Block copying live photo in a folder containing a mov file with the same name', () => {
- createFolder('folder')
- cy.uploadContent(user, new Blob(['mov file'], { type: 'video/mov' }), 'video/mov', `/folder/${randomFileName}.mov`)
- cy.login(user)
- cy.visit('/apps/files')
- copyFile(`${randomFileName}.jpg`, 'folder')
- navigateToFolder('folder')
- cy.get('[data-cy-files-list-row-fileid]').should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 0)
- getRowForFile(`${randomFileName} (copy).jpg`).should('have.length', 0)
- })
- it('Moves files when moving the .jpg', () => {
- renameFile(`${randomFileName}.jpg`, `${randomFileName}_moved.jpg`)
- clickOnBreadcrumbs('All files')
- getRowForFileId(jpgFileId).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}_moved.jpg`)
- getRowForFileId(movFileId).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}_moved.mov`)
- })
- it('Moves files when moving the .mov', () => {
- renameFile(`${randomFileName}.mov`, `${randomFileName}_moved.mov`)
- clickOnBreadcrumbs('All files')
- getRowForFileId(jpgFileId).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}_moved.jpg`)
- getRowForFileId(movFileId).invoke('attr', 'data-cy-files-list-row-name').should('equal', `${randomFileName}_moved.mov`)
- })
- it('Deletes files when deleting the .jpg', () => {
- triggerActionForFile(`${randomFileName}.jpg`, 'delete')
- clickOnBreadcrumbs('All files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 0)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 0)
- cy.visit('/apps/files/trashbin')
- getRowForFileId(jpgFileId).invoke('attr', 'data-cy-files-list-row-name').should('to.match', new RegExp(`^${randomFileName}.jpg\\.d[0-9]+$`))
- getRowForFileId(movFileId).invoke('attr', 'data-cy-files-list-row-name').should('to.match', new RegExp(`^${randomFileName}.mov\\.d[0-9]+$`))
- })
- it('Block deletion when deleting the .mov', () => {
- triggerActionForFile(`${randomFileName}.mov`, 'delete')
- clickOnBreadcrumbs('All files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- cy.visit('/apps/files/trashbin')
- getRowForFileId(jpgFileId).should('have.length', 0)
- getRowForFileId(movFileId).should('have.length', 0)
- })
- it('Restores files when restoring the .jpg', () => {
- triggerActionForFile(`${randomFileName}.jpg`, 'delete')
- cy.visit('/apps/files/trashbin')
- triggerInlineActionForFileId(jpgFileId, 'restore')
- clickOnBreadcrumbs('Deleted files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 0)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 0)
- cy.visit('/apps/files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 1)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 1)
- })
- it('Blocks restoration when restoring the .mov', () => {
- triggerActionForFile(`${randomFileName}.jpg`, 'delete')
- cy.visit('/apps/files/trashbin')
- triggerInlineActionForFileId(movFileId, 'restore')
- clickOnBreadcrumbs('Deleted files')
- getRowForFileId(jpgFileId).should('have.length', 1)
- getRowForFileId(movFileId).should('have.length', 1)
- cy.visit('/apps/files')
- getRowForFile(`${randomFileName}.jpg`).should('have.length', 0)
- getRowForFile(`${randomFileName}.mov`).should('have.length', 0)
- })
- })
- })
|