From 5dc14b8dc1e715f8442fe077342528b3da71cc7b Mon Sep 17 00:00:00 2001 From: provira Date: Wed, 8 Jan 2025 13:02:08 +0100 Subject: [PATCH 1/3] feat: refs #7055 created FilterItemForm test --- .../__tests__/FilterItemForm.spec.js | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/components/__tests__/FilterItemForm.spec.js diff --git a/src/components/__tests__/FilterItemForm.spec.js b/src/components/__tests__/FilterItemForm.spec.js new file mode 100644 index 000000000..f36a479d9 --- /dev/null +++ b/src/components/__tests__/FilterItemForm.spec.js @@ -0,0 +1,71 @@ +import { createWrapper, axios } from 'app/test/vitest/helper'; +import FilterItemForm from 'components/FilterItemForm.vue'; +import { vi, afterEach, beforeAll, describe, expect, it } from 'vitest'; + +describe('FilterItemForm', () => { + let vm; + let wrapper; + + beforeAll(() => { + wrapper = createWrapper(FilterItemForm, { + props: { + url: 'Items/withName', + }, + }); + vm = wrapper.vm; + wrapper = wrapper.wrapper; + + vi.spyOn(axios, 'get').mockResolvedValue({ data: [] }); + }); + + it('should set up itemFilter and itemFilterParams correctly', async () => { + wrapper.setProps({ + itemFilter: { + include: [ + { relation: 'producer', scope: { fields: ['name'] } }, + { relation: 'ink', scope: { fields: ['name'] } }, + ], + where: { name: { like: '%bolas de madera%' } }, + }, + itemFilterParams: { name: 'bolas de madera' }, + }); + + await vm.onSubmit(); + + const expectedFilter = { + include: [ + { relation: 'producer', scope: { fields: ['name'] } }, + { relation: 'ink', scope: { fields: ['name'] } }, + ], + where: { + name: { like: '%bolas de madera%' }, + size: 'large', + producerFk: 1, + typeFk: 2, + inkFk: 3, + }, + }; + + expect(axios.get).toHaveBeenCalledWith('Items/withName', { + params: { filter: JSON.stringify(expectedFilter) }, + }); + }); + + it('should handle an empty itemFilterParams correctly', async () => { + vm.itemFilterParams = {}; + + await vm.onSubmit(); + + const expectedFilter = { + include: [ + { relation: 'producer', scope: { fields: ['name'] } }, + { relation: 'ink', scope: { fields: ['name'] } }, + ], + where: {}, + }; + + expect(axios.get).toHaveBeenCalledWith('Items/withName', { + params: { filter: JSON.stringify(expectedFilter) }, + }); + }); +}); From b466dfe034e3d13632e65359b43d5b04d491c02f Mon Sep 17 00:00:00 2001 From: provira Date: Thu, 9 Jan 2025 08:25:23 +0100 Subject: [PATCH 2/3] feat: refs #7055 added new test case --- .../__tests__/FilterItemForm.spec.js | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/components/__tests__/FilterItemForm.spec.js b/src/components/__tests__/FilterItemForm.spec.js index f36a479d9..0c88bf421 100644 --- a/src/components/__tests__/FilterItemForm.spec.js +++ b/src/components/__tests__/FilterItemForm.spec.js @@ -1,6 +1,6 @@ import { createWrapper, axios } from 'app/test/vitest/helper'; import FilterItemForm from 'components/FilterItemForm.vue'; -import { vi, afterEach, beforeAll, describe, expect, it } from 'vitest'; +import { vi, beforeAll, describe, expect, it } from 'vitest'; describe('FilterItemForm', () => { let vm; @@ -15,40 +15,42 @@ describe('FilterItemForm', () => { vm = wrapper.vm; wrapper = wrapper.wrapper; - vi.spyOn(axios, 'get').mockResolvedValue({ data: [] }); + vi.spyOn(axios, 'get').mockResolvedValue({ + data: [ + { + id: 999996, + name: 'Bolas de madera', + size: 2, + inkFk: null, + producerFk: null, + }, + ], + }); }); - it('should set up itemFilter and itemFilterParams correctly', async () => { + it('should filter data and populate tableRows for table display', async () => { wrapper.setProps({ itemFilter: { - include: [ - { relation: 'producer', scope: { fields: ['name'] } }, - { relation: 'ink', scope: { fields: ['name'] } }, - ], - where: { name: { like: '%bolas de madera%' } }, + include: [ + { relation: 'producer', scope: { fields: ['name'] } }, + { relation: 'ink', scope: { fields: ['name'] } }, + ], + where: { name: { like: '%bolas de madera%' } }, }, itemFilterParams: { name: 'bolas de madera' }, - }); + }); await vm.onSubmit(); - const expectedFilter = { - include: [ - { relation: 'producer', scope: { fields: ['name'] } }, - { relation: 'ink', scope: { fields: ['name'] } }, - ], - where: { - name: { like: '%bolas de madera%' }, - size: 'large', - producerFk: 1, - typeFk: 2, - inkFk: 3, + expect(vm.tableRows).toEqual([ + { + id: 999996, + name: 'Bolas de madera', + size: 2, + inkFk: null, + producerFk: null, }, - }; - - expect(axios.get).toHaveBeenCalledWith('Items/withName', { - params: { filter: JSON.stringify(expectedFilter) }, - }); + ]); }); it('should handle an empty itemFilterParams correctly', async () => { @@ -68,4 +70,9 @@ describe('FilterItemForm', () => { params: { filter: JSON.stringify(expectedFilter) }, }); }); -}); + + it('should emit "itemSelected" with the correct id and close the form', () => { + vm.selectItem({ id: 12345 }); + expect(wrapper.emitted('itemSelected')[0]).toEqual([12345]); + }); +}); \ No newline at end of file From 50008ce7f1305b7f8a6eb2648cd79446d6a78180 Mon Sep 17 00:00:00 2001 From: provira Date: Mon, 13 Jan 2025 12:27:26 +0100 Subject: [PATCH 3/3] fix: refs #7055 #7055 #7055 fixed some tests --- .../__tests__/FilterItemForm.spec.js | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/components/__tests__/FilterItemForm.spec.js b/src/components/__tests__/FilterItemForm.spec.js index 0c88bf421..210d6bf02 100644 --- a/src/components/__tests__/FilterItemForm.spec.js +++ b/src/components/__tests__/FilterItemForm.spec.js @@ -1,5 +1,5 @@ import { createWrapper, axios } from 'app/test/vitest/helper'; -import FilterItemForm from 'components/FilterItemForm.vue'; +import FilterItemForm from 'src/components/FilterItemForm.vue'; import { vi, beforeAll, describe, expect, it } from 'vitest'; describe('FilterItemForm', () => { @@ -19,7 +19,7 @@ describe('FilterItemForm', () => { data: [ { id: 999996, - name: 'Bolas de madera', + name: 'bolas de madera', size: 2, inkFk: null, producerFk: null, @@ -29,23 +29,26 @@ describe('FilterItemForm', () => { }); it('should filter data and populate tableRows for table display', async () => { - wrapper.setProps({ - itemFilter: { - include: [ - { relation: 'producer', scope: { fields: ['name'] } }, - { relation: 'ink', scope: { fields: ['name'] } }, - ], - where: { name: { like: '%bolas de madera%' } }, - }, - itemFilterParams: { name: 'bolas de madera' }, - }); + vm.itemFilterParams.name = 'bolas de madera'; await vm.onSubmit(); + const expectedFilter = { + include: [ + { relation: 'producer', scope: { fields: ['name'] } }, + { relation: 'ink', scope: { fields: ['name'] } }, + ], + where: {"name":{"like":"%bolas de madera%"}}, + }; + + expect(axios.get).toHaveBeenCalledWith('Items/withName', { + params: { filter: JSON.stringify(expectedFilter) }, + }); + expect(vm.tableRows).toEqual([ { id: 999996, - name: 'Bolas de madera', + name: 'bolas de madera', size: 2, inkFk: null, producerFk: null, @@ -54,6 +57,7 @@ describe('FilterItemForm', () => { }); it('should handle an empty itemFilterParams correctly', async () => { + vm.itemFilterParams.name = null; vm.itemFilterParams = {}; await vm.onSubmit();