diff --git a/src/components/ui/__tests__/CardSummary.spec.js b/src/components/ui/__tests__/CardSummary.spec.js index 4a32e92e5..7a979c2ea 100644 --- a/src/components/ui/__tests__/CardSummary.spec.js +++ b/src/components/ui/__tests__/CardSummary.spec.js @@ -1,48 +1,63 @@ -import { vi, describe, expect, it, beforeAll, afterEach } from 'vitest'; +import { vi, describe, expect, it, beforeAll, afterEach, beforeEach } from 'vitest'; import { createWrapper, axios } from 'app/test/vitest/helper'; import CardSummary from 'src/components/ui/CardSummary.vue'; describe('CardSummary', () => { let vm; let wrapper; - + beforeAll(() => { - const mockApiResponse = { - data: { - data: [], - total: 0, - } - }; - - vi.spyOn(axios, 'get').mockResolvedValue(mockApiResponse); + vi.spyOn(axios, 'get').mockResolvedValue({ data: [] }); + }); + beforeEach(() => { wrapper = createWrapper(CardSummary, { - global: { - stubs: [ - 'arrayData', - 'useArrayData', - ], - mocks: { - validate: vi.fn(), - }, - }, propsData: { dataKey: 'cardSummaryKey', url: 'cardSummaryUrl', + filter: 'cardFilter', }, }); - vm = wrapper.vm; wrapper = wrapper.wrapper; - }); - + afterEach(() => { vi.clearAllMocks(); }); - it('should fetch data', async () => { - expect(wrapper.emitted('fetch')); + it('should fetch data correctly', async () => { + const fetchSpy = vi + .spyOn(vm.arrayData, 'fetch') + .mockResolvedValue({ data: [{ id: 1, name: 'Test Entity' }] }); + await vm.fetch(); + + expect(fetchSpy).toHaveBeenCalledWith({ append: false, updateRouter: false }); + expect(wrapper.emitted('onFetch')).toBeTruthy(); + expect(vm.isLoading).toBe(false); + }); + + it('should set correct props to the store', () => { + expect(vm.store.url).toEqual('cardSummaryUrl'); + expect(vm.store.filter).toEqual('cardFilter'); + }); + + it('should compute entity correctly from store data', () => { + vm.store.data = [{ id: 1, name: 'Entity 1' }]; + expect(vm.entity).toEqual({ id: 1, name: 'Entity 1' }); + }); + + it('should handle empty data gracefully', () => { + vm.store.data = []; + expect(vm.entity).toBeUndefined(); + }); + + it('should respond to prop changes and refetch data', async () => { + const fetchSpy = vi.spyOn(vm.arrayData, 'fetch'); + await wrapper.setProps({ url: 'newUrl', filter: { key: 'newValue' } }); + + expect(fetchSpy).toHaveBeenCalled(); + expect(vm.store.url).toBe('newUrl'); + expect(vm.store.filter).toEqual({ key: 'newValue' }); }); - }); \ No newline at end of file