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) }, + }); + }); +});