diff options
author | Maksim Sukharev <antreesy.web@gmail.com> | 2023-07-10 23:47:39 +0200 |
---|---|---|
committer | Maksim Sukharev <antreesy.web@gmail.com> | 2023-08-02 21:58:11 +0200 |
commit | 9f5baa599b289a016dc6de7c35fef1a273f9997c (patch) | |
tree | 2c8dc2fd19dd6f501b9b6529879c81d496d75013 | |
parent | 47ca6c4b87279289ec54cdac0f5347f9373e0a32 (diff) |
adjust tests, remove redundant jest mock library
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
-rw-r--r-- | jest.config.js | 2 | ||||
-rw-r--r-- | package-lock.json | 35 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | src/__mocks__/axios.js | 4 | ||||
-rw-r--r-- | src/components/LeftSidebar/ConversationsList/Conversation.spec.js | 8 | ||||
-rw-r--r-- | src/services/conversationsService.spec.js | 10 | ||||
-rw-r--r-- | src/services/filesSharingServices.spec.js | 10 | ||||
-rw-r--r-- | src/services/messagesService.spec.js | 40 | ||||
-rw-r--r-- | src/views/RoomSelector.spec.js | 45 |
9 files changed, 63 insertions, 92 deletions
diff --git a/jest.config.js b/jest.config.js index 3c5803c2f..043b7df10 100644 --- a/jest.config.js +++ b/jest.config.js @@ -82,6 +82,8 @@ module.exports = { moduleNameMapper: { '\\.(css|scss)$': 'jest-transform-stub', 'vendor/tflite/(.*).wasm$': '<rootDir>/src/utils/media/effects/virtual-background/vendor/tflite/$1.js', + // Axios using ESM since v1.0.0, so we need to replace it with CJS for tests + axios: '<rootDir>/node_modules/@nextcloud/axios/node_modules/axios/dist/node/axios.cjs', }, transform: { diff --git a/package-lock.json b/package-lock.json index a3ae10cf3..18167ff57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,7 +71,6 @@ "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "jest-localstorage-mock": "^2.4.26", - "jest-mock-axios": "^4.7.2", "jest-mock-console": "^2.0.0", "jest-transform-stub": "^2.0.0", "regenerator-runtime": "^0.13.11", @@ -11081,17 +11080,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock-axios": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/jest-mock-axios/-/jest-mock-axios-4.7.2.tgz", - "integrity": "sha512-8xrkCuEsscOLSw4Noi40Pq5tQMlKg3tbDZ0XNkf3Mv0Yq+z6+qS2tToimNs/3RIsEzoPXHTf2+mcySaNaYXIyw==", - "dev": true, - "dependencies": { - "@jest/globals": "^29.5.0", - "jest": "~29.5.0", - "synchronous-promise": "^2.0.17" - } - }, "node_modules/jest-mock-console": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-mock-console/-/jest-mock-console-2.0.0.tgz", @@ -16124,12 +16112,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true - }, "node_modules/tabbable": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.0.1.tgz", @@ -26332,17 +26314,6 @@ "jest-util": "^29.5.0" } }, - "jest-mock-axios": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/jest-mock-axios/-/jest-mock-axios-4.7.2.tgz", - "integrity": "sha512-8xrkCuEsscOLSw4Noi40Pq5tQMlKg3tbDZ0XNkf3Mv0Yq+z6+qS2tToimNs/3RIsEzoPXHTf2+mcySaNaYXIyw==", - "dev": true, - "requires": { - "@jest/globals": "^29.5.0", - "jest": "~29.5.0", - "synchronous-promise": "^2.0.17" - } - }, "jest-mock-console": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-mock-console/-/jest-mock-console-2.0.0.tgz", @@ -30096,12 +30067,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true - }, "tabbable": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.0.1.tgz", diff --git a/package.json b/package.json index 2d4f31653..50e21256f 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,6 @@ "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "jest-localstorage-mock": "^2.4.26", - "jest-mock-axios": "^4.7.2", "jest-mock-console": "^2.0.0", "jest-transform-stub": "^2.0.0", "regenerator-runtime": "^0.13.11", diff --git a/src/__mocks__/axios.js b/src/__mocks__/axios.js deleted file mode 100644 index a5a828b30..000000000 --- a/src/__mocks__/axios.js +++ /dev/null @@ -1,4 +0,0 @@ -// eslint-disable-next-line n/no-unpublished-import -import mockAxios from 'jest-mock-axios' - -export default mockAxios diff --git a/src/components/LeftSidebar/ConversationsList/Conversation.spec.js b/src/components/LeftSidebar/ConversationsList/Conversation.spec.js index 1222bd90f..5ae85985c 100644 --- a/src/components/LeftSidebar/ConversationsList/Conversation.spec.js +++ b/src/components/LeftSidebar/ConversationsList/Conversation.spec.js @@ -13,6 +13,7 @@ import Conversation from './Conversation.vue' import router from '../../../__mocks__/router.js' import { CONVERSATION, PARTICIPANT, ATTENDEE } from '../../../constants.js' +import { leaveConversation } from '../../../services/participantsService.js' import storeConfig from '../../../store/storeConfig.js' jest.mock('@nextcloud/dialogs', () => ({ @@ -20,6 +21,10 @@ jest.mock('@nextcloud/dialogs', () => ({ showError: jest.fn(), })) +jest.mock('../../../services/participantsService', () => ({ + leaveConversation: jest.fn(), +})) + // TODO fix after RouterLinkStub can support slots https://github.com/vuejs/vue-test-utils/issues/1803 const RouterLinkStub = true @@ -357,11 +362,12 @@ describe('Conversation.vue', () => { test('leaves conversation', async () => { const actionHandler = jest.fn() testStoreConfig.modules.participantsStore.actions.removeCurrentUserFromConversation = actionHandler - + leaveConversation.mockResolvedValue() const action = shallowMountAndGetAction('Leave conversation') expect(action.exists()).toBe(true) await action.find('button').trigger('click') + await flushPromises() expect(actionHandler).toHaveBeenCalledWith(expect.anything(), { token: TOKEN }) }) diff --git a/src/services/conversationsService.spec.js b/src/services/conversationsService.spec.js index 007646a69..8290ab1ad 100644 --- a/src/services/conversationsService.spec.js +++ b/src/services/conversationsService.spec.js @@ -1,10 +1,14 @@ +import axios from '@nextcloud/axios' import { loadState } from '@nextcloud/initial-state' import { generateOcsUrl } from '@nextcloud/router' -import mockAxios from '../__mocks__/axios.js' import { SHARE } from '../constants.js' import { searchPossibleConversations } from './conversationsService.js' +jest.mock('@nextcloud/axios', () => ({ + get: jest.fn(), +})) + jest.mock('@nextcloud/initial-state', () => ({ loadState: jest.fn(), })) @@ -27,7 +31,7 @@ describe('conversationsService', () => { afterEach(() => { // cleaning up the mess left behind the previous test - mockAxios.reset() + jest.clearAllMocks() }) /** @@ -46,7 +50,7 @@ describe('conversationsService', () => { dummyOption: true, } ) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('core/autocomplete/get'), { dummyOption: true, diff --git a/src/services/filesSharingServices.spec.js b/src/services/filesSharingServices.spec.js index d41e77b8b..b06f7633b 100644 --- a/src/services/filesSharingServices.spec.js +++ b/src/services/filesSharingServices.spec.js @@ -1,18 +1,22 @@ +import axios from '@nextcloud/axios' import { generateOcsUrl } from '@nextcloud/router' -import mockAxios from '../__mocks__/axios.js' import { shareFile } from './filesSharingServices.js' +jest.mock('@nextcloud/axios', () => ({ + post: jest.fn(), +})) + describe('filesSharingServices', () => { afterEach(() => { // cleaning up the mess left behind the previous test - mockAxios.reset() + jest.clearAllMocks() }) test('shareFile calls the sharing API endpoint', () => { shareFile('path/to/file', 'XXTOKENXX', 'the-reference-id') - expect(mockAxios.post).toHaveBeenCalledWith( + expect(axios.post).toHaveBeenCalledWith( generateOcsUrl('apps/files_sharing/api/v1/shares'), { shareType: 10, diff --git a/src/services/messagesService.spec.js b/src/services/messagesService.spec.js index 2828e0d07..d21695c1c 100644 --- a/src/services/messagesService.spec.js +++ b/src/services/messagesService.spec.js @@ -1,6 +1,6 @@ +import axios from '@nextcloud/axios' import { generateOcsUrl } from '@nextcloud/router' -import mockAxios from '../__mocks__/axios.js' import { fetchMessages, lookForNewMessages, @@ -10,10 +10,16 @@ import { updateLastReadMessage, } from './messagesService.js' +jest.mock('@nextcloud/axios', () => ({ + get: jest.fn(), + post: jest.fn(), + delete: jest.fn(), +})) + describe('messagesService', () => { afterEach(() => { // cleaning up the mess left behind the previous test - mockAxios.reset() + jest.clearAllMocks() }) test('fetchMessages calls the chat API endpoint excluding last known', () => { @@ -25,7 +31,7 @@ describe('messagesService', () => { dummyOption: true, }) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX'), { dummyOption: true, @@ -49,7 +55,7 @@ describe('messagesService', () => { dummyOption: true, }) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX'), { dummyOption: true, @@ -72,7 +78,7 @@ describe('messagesService', () => { dummyOption: true, }) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX'), { dummyOption: true, @@ -97,7 +103,7 @@ describe('messagesService', () => { dummyOption: true, }) - expect(mockAxios.post).toHaveBeenCalledWith( + expect(axios.post).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX'), { message: 'hello world!', @@ -117,7 +123,7 @@ describe('messagesService', () => { id: 1234, }) - expect(mockAxios.delete).toHaveBeenCalledWith( + expect(axios.delete).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX/1234'), ) }) @@ -130,7 +136,7 @@ describe('messagesService', () => { referenceId: 'reference-id', }) - expect(mockAxios.post).toHaveBeenCalledWith( + expect(axios.post).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX/share'), { objectType: 'deck', @@ -148,19 +154,21 @@ describe('messagesService', () => { metaData: '{"x":1}', }) - const lastReq = mockAxios.lastReqGet() - expect(lastReq.url) - .toBe(generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX/share')) - expect(lastReq.data.objectType).toBe('deck') - expect(lastReq.data.objectId).toBe(999) - expect(lastReq.data.metaData).toBe('{"x":1}') - expect(lastReq.data.referenceId).toEqual(expect.stringMatching(/^[a-z0-9]{64}$/)) + expect(axios.post).toHaveBeenCalledWith( + generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX/share'), + { + objectType: 'deck', + objectId: 999, + metaData: '{"x":1}', + referenceId: expect.stringMatching(/^[a-z0-9]{64}$/), + } + ) }) test('updateLastReadMessage calls the chat API endpoint', () => { updateLastReadMessage('XXTOKENXX', 1234) - expect(mockAxios.post).toHaveBeenCalledWith( + expect(axios.post).toHaveBeenCalledWith( generateOcsUrl('apps/spreed/api/v1/chat/XXTOKENXX/read'), { lastReadMessage: 1234, diff --git a/src/views/RoomSelector.spec.js b/src/views/RoomSelector.spec.js index fd9960058..e1124d445 100644 --- a/src/views/RoomSelector.spec.js +++ b/src/views/RoomSelector.spec.js @@ -1,14 +1,18 @@ import { shallowMount } from '@vue/test-utils' +import axios from '@nextcloud/axios' import { generateOcsUrl } from '@nextcloud/router' import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' import RoomSelector from './RoomSelector.vue' -import mockAxios from '../__mocks__/axios.js' import { CONVERSATION } from '../constants.js' +jest.mock('@nextcloud/axios', () => ({ + get: jest.fn(), +})) + describe('RoomSelector.vue', () => { let conversations @@ -64,27 +68,26 @@ describe('RoomSelector.vue', () => { }, }, } + + axios.get.mockResolvedValue({ + data: { + ocs: { + data: conversations, + }, + }, + }) }) afterEach(() => { - mockAxios.reset() jest.clearAllMocks() }) test('renders sorted conversation list fetched from server', async () => { const wrapper = shallowMount(RoomSelector) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('/apps/spreed/api/v4/room') ) - mockAxios.mockResponse({ - data: { - ocs: { - data: conversations, - }, - }, - }) - // need to wait for re-render, otherwise the list is not rendered yet await wrapper.vm.$nextTick() @@ -101,18 +104,10 @@ describe('RoomSelector.vue', () => { }, }) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('/apps/spreed/api/v4/room') ) - mockAxios.mockResponse({ - data: { - ocs: { - data: conversations, - }, - }, - }) - // need to wait for re-render, otherwise the list is not rendered yet await wrapper.vm.$nextTick() @@ -124,18 +119,10 @@ describe('RoomSelector.vue', () => { test('emits select event on select', async () => { const wrapper = shallowMount(RoomSelector) - expect(mockAxios.get).toHaveBeenCalledWith( + expect(axios.get).toHaveBeenCalledWith( generateOcsUrl('/apps/spreed/api/v4/room') ) - mockAxios.mockResponse({ - data: { - ocs: { - data: conversations, - }, - }, - }) - await wrapper.vm.$nextTick() const eventHandler = jest.fn() |