From efb0162f9ca7a565dcd0654465da70edc852f8b4 Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 20 Jan 2025 10:58:49 +0100 Subject: [PATCH 1/3] feat: refs #7068 created VnVisibleColumns unit test --- .../__tests__/VnVisibleColumns.spec.js | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/components/VnTable/__tests__/VnVisibleColumns.spec.js diff --git a/src/components/VnTable/__tests__/VnVisibleColumns.spec.js b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js new file mode 100644 index 000000000..3589ca676 --- /dev/null +++ b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js @@ -0,0 +1,119 @@ +import { describe, expect, it, beforeEach, vi } from 'vitest'; +import { createWrapper } from 'app/test/vitest/helper'; +import VnVisibleColumn from '../VnVisibleColumn.vue'; +import { axios } from 'app/test/vitest/helper'; + +describe('VnVisibleColumns', () => { + let wrapper; + let vm; + let columnsMock = []; + beforeEach(() => { + wrapper = createWrapper(VnVisibleColumn, { + propsData: { + tableCode: 'testTable', + skip: ['skippedColumn'], + }, + }); + vm = wrapper.vm; + }); + + describe('setUserConfigViewData()', () => { + it('should initialize localColumns with visible configuration', () => { + columnsMock = [ + { name: 'columnMockName', label: undefined }, + { name: 'columnMockAddress', label: undefined }, + { name: 'columnMockId', label: undefined }, + ]; + vm.columns = columnsMock; + const configuration = { + columnMockName: true, + columnMockAddress: false, + columnMockId: true, + }; + + vm.setUserConfigViewData(configuration, false); + + expect(vm.localColumns).toEqual([ + { name: 'columnMockName', label: undefined, visible: true }, + { name: 'columnMockAddress', label: undefined, visible: false }, + { name: 'columnMockId', label: undefined, visible: true }, + ]); + }); + + it('should skip columns based on props', () => { + columnsMock = [ + { name: 'columnMockName', label: undefined }, + { name: 'columnMockId', label: undefined }, + { name: 'skippedColumn', label: 'Skipped Column' }, + ]; + const configuration = { + columnMockName: true, + skippedColumn: false, + columnMockId: true, + }; + vm.columns = columnsMock; + + vm.setUserConfigViewData(configuration, false); + + expect(vm.localColumns).toEqual([ + { name: 'columnMockName', label: undefined, visible: true }, + { name: 'columnMockId', label: undefined, visible: true }, + ]); + }); + }); + + describe('toggleMarkAll()', () => { + it('should set all localColumns to visible=true', () => { + vm.localColumns = [ + { name: 'columnMockName', visible: false }, + { name: 'columnMockId', visible: false }, + ]; + + vm.toggleMarkAll(true); + + expect(vm.localColumns.every((col) => col.visible)).toBe(true); + }); + + it('should set all localColumns to visible=false', () => { + vm.localColumns = [ + { name: 'columnMockName', visible: true }, + { name: 'columnMockId', visible: true }, + ]; + + vm.toggleMarkAll(false); + + expect(vm.localColumns.every((col) => col.visible)).toBe(false); + }); + }); + + describe('saveConfig()', () => { + it('should call setUserConfigViewData and axios.post with correct params', async () => { + const mockAxiosPost = vi.spyOn(axios, 'post').mockResolvedValue({ + data: [{ id: 1 }], + }); + + vm.localColumns = [ + { name: 'columnMockName', visible: true }, + { name: 'columnMockId', visible: false }, + ]; + + await vm.saveConfig(); + + expect(mockAxiosPost).toHaveBeenCalledWith('UserConfigViews/crud', { + creates: [ + { + userFk: vm.user.id, + tableCode: vm.tableCode, + tableConfig: vm.tableCode, + configuration: { + columnMockName: true, + columnMockId: false, + }, + }, + ], + }); + + mockAxiosPost.mockRestore(); + }); + }); +}); From b36c53119c9970d9d16971de4915389e242a7b19 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 21 Jan 2025 09:06:53 +0100 Subject: [PATCH 2/3] refactor: refs #7068 requested changes --- src/components/VnTable/__tests__/VnVisibleColumns.spec.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/VnTable/__tests__/VnVisibleColumns.spec.js b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js index 3589ca676..a9578126c 100644 --- a/src/components/VnTable/__tests__/VnVisibleColumns.spec.js +++ b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js @@ -1,4 +1,4 @@ -import { describe, expect, it, beforeEach, vi } from 'vitest'; +import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest'; import { createWrapper } from 'app/test/vitest/helper'; import VnVisibleColumn from '../VnVisibleColumn.vue'; import { axios } from 'app/test/vitest/helper'; @@ -17,6 +17,10 @@ describe('VnVisibleColumns', () => { vm = wrapper.vm; }); + afterEach(() => { + vi.clearAllMocks(); + }); + describe('setUserConfigViewData()', () => { it('should initialize localColumns with visible configuration', () => { columnsMock = [ @@ -112,8 +116,6 @@ describe('VnVisibleColumns', () => { }, ], }); - - mockAxiosPost.mockRestore(); }); }); }); From 28db9256455459c7d488795a7c3bfcb09daa67d6 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 21 Jan 2025 11:05:24 +0100 Subject: [PATCH 3/3] refactor: refs #7068 adjust variables --- .../__tests__/VnVisibleColumns.spec.js | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/VnTable/__tests__/VnVisibleColumns.spec.js b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js index a9578126c..bf767688b 100644 --- a/src/components/VnTable/__tests__/VnVisibleColumns.spec.js +++ b/src/components/VnTable/__tests__/VnVisibleColumns.spec.js @@ -6,7 +6,7 @@ import { axios } from 'app/test/vitest/helper'; describe('VnVisibleColumns', () => { let wrapper; let vm; - let columnsMock = []; + beforeEach(() => { wrapper = createWrapper(VnVisibleColumn, { propsData: { @@ -23,29 +23,29 @@ describe('VnVisibleColumns', () => { describe('setUserConfigViewData()', () => { it('should initialize localColumns with visible configuration', () => { - columnsMock = [ + vm.columns = [ { name: 'columnMockName', label: undefined }, { name: 'columnMockAddress', label: undefined }, { name: 'columnMockId', label: undefined }, ]; - vm.columns = columnsMock; const configuration = { columnMockName: true, columnMockAddress: false, columnMockId: true, }; - - vm.setUserConfigViewData(configuration, false); - - expect(vm.localColumns).toEqual([ + const expectedColumns = [ { name: 'columnMockName', label: undefined, visible: true }, { name: 'columnMockAddress', label: undefined, visible: false }, { name: 'columnMockId', label: undefined, visible: true }, - ]); + ]; + + vm.setUserConfigViewData(configuration, false); + + expect(vm.localColumns).toEqual(expectedColumns); }); it('should skip columns based on props', () => { - columnsMock = [ + vm.columns = [ { name: 'columnMockName', label: undefined }, { name: 'columnMockId', label: undefined }, { name: 'skippedColumn', label: 'Skipped Column' }, @@ -55,14 +55,14 @@ describe('VnVisibleColumns', () => { skippedColumn: false, columnMockId: true, }; - vm.columns = columnsMock; + const expectedColumns = [ + { name: 'columnMockName', label: undefined, visible: true }, + { name: 'columnMockId', label: undefined, visible: true }, + ]; vm.setUserConfigViewData(configuration, false); - expect(vm.localColumns).toEqual([ - { name: 'columnMockName', label: undefined, visible: true }, - { name: 'columnMockId', label: undefined, visible: true }, - ]); + expect(vm.localColumns).toEqual(expectedColumns); }); });