Browse Source
feat: add sidebar action testing
feat: add sidebar action testing
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>pull/38806/head
No known key found for this signature in database
GPG Key ID: 60C25B8C072916CF
6 changed files with 177 additions and 14 deletions
-
144apps/files/src/actions/sidebarAction.spec.ts
-
24apps/files/src/actions/sidebarAction.ts
-
10apps/files/src/services/FileAction.ts
-
10package-lock.json
-
1package.json
-
2tsconfig.json
@ -0,0 +1,144 @@ |
|||
/** |
|||
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com> |
|||
* |
|||
* @author John Molakvoæ <skjnldsv@protonmail.com> |
|||
* |
|||
* @license AGPL-3.0-or-later |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
import { action } from './sidebarAction' |
|||
import { expect } from '@jest/globals' |
|||
import { File } from '@nextcloud/files' |
|||
import { FileAction } from '../services/FileAction' |
|||
import type { Navigation } from '../services/Navigation' |
|||
import logger from '../logger' |
|||
|
|||
const view = { |
|||
id: 'files', |
|||
name: 'Files', |
|||
} as Navigation |
|||
|
|||
describe('Open sidebar action conditions tests', () => { |
|||
test('Default values', () => { |
|||
expect(action).toBeInstanceOf(FileAction) |
|||
expect(action.id).toBe('details') |
|||
expect(action.displayName([], view)).toBe('Details') |
|||
expect(action.iconSvgInline([], view)).toBe('SvgMock') |
|||
expect(action.default).toBe(true) |
|||
expect(action.order).toBe(-50) |
|||
}) |
|||
}) |
|||
|
|||
describe('Open folder action enabled tests', () => { |
|||
test('Enabled for ressources within user root folder', () => { |
|||
window.OCA = { Files: { Sidebar: {} } } |
|||
|
|||
const file = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
expect(action.enabled).toBeDefined() |
|||
expect(action.enabled!([file], view)).toBe(true) |
|||
}) |
|||
|
|||
test('Disabled if more than one node', () => { |
|||
window.OCA = { Files: { Sidebar: {} } } |
|||
|
|||
const file1 = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foo.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
const file2 = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/bar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
expect(action.enabled).toBeDefined() |
|||
expect(action.enabled!([file1, file2], view)).toBe(false) |
|||
}) |
|||
|
|||
test('Disabled if no Sidebar', () => { |
|||
window.OCA = {} |
|||
|
|||
const file = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
expect(action.enabled).toBeDefined() |
|||
expect(action.enabled!([file], view)).toBe(false) |
|||
}) |
|||
|
|||
test('Disabled for non-dav ressources', () => { |
|||
window.OCA = { Files: { Sidebar: {} } } |
|||
|
|||
const file = new File({ |
|||
id: 1, |
|||
source: 'https://domain.com/documents/admin/foobar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
expect(action.enabled).toBeDefined() |
|||
expect(action.enabled!([file], view)).toBe(false) |
|||
}) |
|||
}) |
|||
|
|||
describe('Open sidebar action exec tests', () => { |
|||
test('Open sidebar', async () => { |
|||
const openMock = jest.fn() |
|||
window.OCA = { Files: { Sidebar: { open: openMock } } } |
|||
|
|||
const file = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
const exec = await action.exec(file, view, '/') |
|||
// Silent action
|
|||
expect(exec).toBe(null) |
|||
expect(openMock).toBeCalledWith('/foobar.txt') |
|||
}) |
|||
|
|||
test('Open sidebar fails', async () => { |
|||
const openMock = jest.fn(() => { throw new Error('Mock error') }) |
|||
logger.error = jest.fn() |
|||
window.OCA = { Files: { Sidebar: { open: openMock } } } |
|||
|
|||
const file = new File({ |
|||
id: 1, |
|||
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt', |
|||
owner: 'admin', |
|||
mime: 'text/plain', |
|||
}) |
|||
|
|||
const exec = await action.exec(file, view, '/') |
|||
expect(exec).toBe(false) |
|||
expect(openMock).toBeCalledTimes(1) |
|||
expect(logger.error).toBeCalledTimes(1) |
|||
}) |
|||
}) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue