126 lines
3.5 KiB
JavaScript
126 lines
3.5 KiB
JavaScript
import { describe, expect, it, beforeEach, afterEach, vi } from 'vitest';
|
|
import { default as axios } from 'axios';
|
|
import { useArrayData } from 'composables/useArrayData';
|
|
import { useRouter } from 'vue-router';
|
|
import * as vueRouter from 'vue-router';
|
|
import { setActivePinia, createPinia } from 'pinia';
|
|
import { defineComponent, h } from 'vue';
|
|
import { mount } from '@vue/test-utils';
|
|
|
|
describe('useArrayData', () => {
|
|
const filter = '{"limit":20,"skip":0}';
|
|
const params = { supplierFk: 2 };
|
|
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia());
|
|
|
|
// Mock route
|
|
vi.spyOn(vueRouter, 'useRoute').mockReturnValue({
|
|
path: 'mockSection/list',
|
|
matched: [],
|
|
query: {},
|
|
params: {},
|
|
meta: { moduleName: 'mockName' },
|
|
});
|
|
|
|
// Mock router
|
|
vi.spyOn(vueRouter, 'useRouter').mockReturnValue({
|
|
push: vi.fn(),
|
|
replace: vi.fn(),
|
|
currentRoute: {
|
|
value: {
|
|
path: 'mockSection/list',
|
|
params: { id: 1 },
|
|
meta: { moduleName: 'mockName' },
|
|
matched: [{ path: 'mockName/:id' }],
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('should fetch and replace url with new params', async () => {
|
|
vi.spyOn(axios, 'get').mockResolvedValueOnce({ data: [] });
|
|
|
|
const arrayData = mountArrayData('ArrayData', {
|
|
url: 'mockUrl',
|
|
searchUrl: 'params',
|
|
});
|
|
|
|
arrayData.store.userParams = params;
|
|
await arrayData.fetch({});
|
|
|
|
const routerReplace = useRouter().replace.mock.calls[0][0];
|
|
|
|
expect(axios.get).toHaveBeenCalledWith('mockUrl', {
|
|
signal: expect.any(Object),
|
|
params: {
|
|
filter,
|
|
supplierFk: 2,
|
|
},
|
|
});
|
|
|
|
expect(routerReplace.path).toBe('mockSection/list');
|
|
expect(JSON.parse(routerReplace.query.params)).toEqual(
|
|
expect.objectContaining(params),
|
|
);
|
|
});
|
|
|
|
it('should redirect to detail when single record is returned with navigation', async () => {
|
|
vi.spyOn(axios, 'get').mockResolvedValueOnce({
|
|
data: [{ id: 1 }],
|
|
});
|
|
|
|
const arrayData = mountArrayData('ArrayData', {
|
|
url: 'mockUrl',
|
|
navigate: {},
|
|
});
|
|
|
|
arrayData.store.userParams = params;
|
|
await arrayData.fetch({});
|
|
|
|
const routerPush = useRouter().push.mock.calls[0][0];
|
|
|
|
expect(routerPush.path).toBe('mockName/1');
|
|
expect(routerPush.query).toBeUndefined();
|
|
});
|
|
|
|
it('should return one record when oneRecord is true', async () => {
|
|
vi.spyOn(axios, 'get').mockResolvedValueOnce({
|
|
data: [
|
|
{ id: 1, name: 'Entity 1' },
|
|
{ id: 2, name: 'Entity 2' },
|
|
],
|
|
});
|
|
|
|
const arrayData = mountArrayData('ArrayData', {
|
|
url: 'mockUrl',
|
|
oneRecord: true,
|
|
});
|
|
|
|
await arrayData.fetch({});
|
|
|
|
expect(arrayData.store.data).toEqual({
|
|
id: 1,
|
|
name: 'Entity 1',
|
|
});
|
|
});
|
|
});
|
|
|
|
function mountArrayData(...args) {
|
|
let arrayData;
|
|
|
|
const TestComponent = defineComponent({
|
|
setup() {
|
|
arrayData = useArrayData(...args);
|
|
return () => h('div');
|
|
},
|
|
});
|
|
|
|
const asd = mount(TestComponent);
|
|
return arrayData;
|
|
}
|