]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Adjust tests for editLocallyAction
authorfenn-cs <fenn25.fn@gmail.com>
Wed, 31 Jul 2024 09:24:14 +0000 (10:24 +0100)
committerfenn-cs <fenn25.fn@gmail.com>
Wed, 31 Jul 2024 11:31:03 +0000 (12:31 +0100)
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
apps/files/src/actions/editLocallyAction.spec.ts
apps/files/src/actions/editLocallyAction.ts

index 9b5d21a7f3cb445b8f3e9d23794453abaac1ef15..3d32930c27306db74f21794266b799e8d871da4c 100644 (file)
 import { action } from './editLocallyAction'
 import { expect } from '@jest/globals'
 import { File, Permission, View, FileAction } from '@nextcloud/files'
-import * as ncDialogs from '@nextcloud/dialogs'
+import { DialogBuilder, showError } from '@nextcloud/dialogs'
 import axios from '@nextcloud/axios'
 
+const dialogBuilder = {
+       setName: jest.fn().mockReturnThis(),
+       setText: jest.fn().mockReturnThis(),
+       setButtons: jest.fn().mockReturnThis(),
+       build: jest.fn().mockReturnValue({
+               show: jest.fn().mockResolvedValue(true),
+       }),
+} as unknown as DialogBuilder
+
+jest.mock('@nextcloud/dialogs', () => ({
+       DialogBuilder: jest.fn(() => dialogBuilder),
+       showError: jest.fn(),
+}))
+
 const view = {
        id: 'files',
        name: 'Files',
@@ -33,7 +47,8 @@ const view = {
 // Mock webroot variable
 beforeAll(() => {
        // eslint-disable-next-line @typescript-eslint/no-explicit-any
-       (window as any)._oc_webroot = ''
+       (window as any)._oc_webroot = '';
+       (window as any).OCA = { Viewer: { open: jest.fn() } }
 })
 
 describe('Edit locally action conditions tests', () => {
@@ -61,7 +76,7 @@ describe('Edit locally action enabled tests', () => {
                expect(action.enabled!([file], view)).toBe(true)
        })
 
-       test('Disabled for non-dav ressources', () => {
+       test('Disabled for non-dav resources', () => {
                const file = new File({
                        id: 1,
                        source: 'https://domain.com/data/foobar.txt',
@@ -121,8 +136,11 @@ describe('Edit locally action enabled tests', () => {
 
 describe('Edit locally action execute tests', () => {
        test('Edit locally opens proper URL', async () => {
-               jest.spyOn(axios, 'post').mockImplementation(async () => ({ data: { ocs: { data: { token: 'foobar' } } } }))
-               jest.spyOn(ncDialogs, 'showError')
+               jest.spyOn(axios, 'post').mockImplementation(async () => ({
+                       data: { ocs: { data: { token: 'foobar' } } }
+               }))
+               const mockedShowError = jest.mocked(showError)
+               const spyDialogBuilder = jest.spyOn(dialogBuilder, 'build')
 
                const file = new File({
                        id: 1,
@@ -134,17 +152,20 @@ describe('Edit locally action execute tests', () => {
 
                const exec = await action.exec(file, view, '/')
 
+               expect(spyDialogBuilder).toBeCalled()
+
                // Silent action
                expect(exec).toBe(null)
                expect(axios.post).toBeCalledTimes(1)
                expect(axios.post).toBeCalledWith('http://localhost/ocs/v2.php/apps/files/api/v1/openlocaleditor?format=json', { path: '/foobar.txt' })
-               expect(ncDialogs.showError).toBeCalledTimes(0)
+               expect(mockedShowError).toBeCalledTimes(0)
                expect(window.location.href).toBe('nc://open/test@localhost/foobar.txt?token=foobar')
        })
 
-       test('Edit locally fails and show error', async () => {
+       test('Edit locally fails and shows error', async () => {
                jest.spyOn(axios, 'post').mockImplementation(async () => ({}))
-               jest.spyOn(ncDialogs, 'showError')
+               const mockedShowError = jest.mocked(showError)
+               const spyDialogBuilder = jest.spyOn(dialogBuilder, 'build')
 
                const file = new File({
                        id: 1,
@@ -156,12 +177,14 @@ describe('Edit locally action execute tests', () => {
 
                const exec = await action.exec(file, view, '/')
 
+               expect(spyDialogBuilder).toBeCalled()
+
                // Silent action
                expect(exec).toBe(null)
                expect(axios.post).toBeCalledTimes(1)
                expect(axios.post).toBeCalledWith('http://localhost/ocs/v2.php/apps/files/api/v1/openlocaleditor?format=json', { path: '/foobar.txt' })
-               expect(ncDialogs.showError).toBeCalledTimes(1)
-               expect(ncDialogs.showError).toBeCalledWith('Failed to redirect to client')
+               expect(mockedShowError).toBeCalledTimes(1)
+               expect(mockedShowError).toBeCalledWith('Failed to redirect to client')
                expect(window.location.href).toBe('http://localhost/')
        })
 })
index e6e847e2fece89340caac09036bf2c33d4ea41f2..38393b919d57a3b3871e330667be4ecb351445a1 100644 (file)
@@ -62,7 +62,7 @@ const confirmLocalEditDialog = (
                .then(() => {
                        // Ensure the callback is called even if the dialog is dismissed in other ways
                        if (!callbackCalled) {
-                               localEditCallback(true)
+                               localEditCallback(false)
                        }
                })
 }