From 7e4b0d2894239990d5f241d8d5a9fd773042c84f Mon Sep 17 00:00:00 2001 From: fenn-cs Date: Wed, 31 Jul 2024 10:24:14 +0100 Subject: [PATCH] fix: Adjust tests for editLocallyAction Signed-off-by: fenn-cs --- .../src/actions/editLocallyAction.spec.ts | 43 ++++++++++++++----- apps/files/src/actions/editLocallyAction.ts | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/apps/files/src/actions/editLocallyAction.spec.ts b/apps/files/src/actions/editLocallyAction.spec.ts index 9b5d21a7f3c..3d32930c273 100644 --- a/apps/files/src/actions/editLocallyAction.spec.ts +++ b/apps/files/src/actions/editLocallyAction.spec.ts @@ -22,9 +22,23 @@ 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/') }) }) diff --git a/apps/files/src/actions/editLocallyAction.ts b/apps/files/src/actions/editLocallyAction.ts index e6e847e2fec..38393b919d5 100644 --- a/apps/files/src/actions/editLocallyAction.ts +++ b/apps/files/src/actions/editLocallyAction.ts @@ -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) } }) } -- 2.39.5