2023-09-19 08:21:24 +00:00
|
|
|
import { createWrapper } from 'app/test/vitest/helper';
|
2023-08-17 13:32:56 +00:00
|
|
|
import CrudModel from 'components/CrudModel.vue';
|
2023-08-25 10:33:38 +00:00
|
|
|
import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest';
|
2023-08-17 13:32:56 +00:00
|
|
|
|
2023-08-25 11:47:56 +00:00
|
|
|
describe('CrudModel', () => {
|
2023-08-17 13:32:56 +00:00
|
|
|
let vm;
|
|
|
|
beforeAll(() => {
|
|
|
|
vm = createWrapper(CrudModel, {
|
|
|
|
global: {
|
2023-08-24 13:05:31 +00:00
|
|
|
stubs: [
|
|
|
|
'vnPaginate',
|
|
|
|
'useState',
|
|
|
|
'arrayData',
|
|
|
|
'useStateStore',
|
2023-08-25 08:56:03 +00:00
|
|
|
'vue-i18n',
|
2023-08-24 13:05:31 +00:00
|
|
|
],
|
2023-08-21 13:14:19 +00:00
|
|
|
mocks: {
|
2023-08-24 13:05:31 +00:00
|
|
|
validate: vi.fn(),
|
2023-08-21 13:14:19 +00:00
|
|
|
},
|
2023-08-17 13:32:56 +00:00
|
|
|
},
|
|
|
|
propsData: {
|
|
|
|
dataRequired: {
|
2023-08-25 10:33:38 +00:00
|
|
|
fk: 1,
|
2023-08-17 13:32:56 +00:00
|
|
|
},
|
2023-08-21 13:14:19 +00:00
|
|
|
dataKey: 'crudModelKey',
|
2023-08-25 08:56:03 +00:00
|
|
|
model: 'crudModel',
|
2023-08-21 13:14:19 +00:00
|
|
|
url: 'crudModelUrl',
|
|
|
|
},
|
2023-08-17 13:32:56 +00:00
|
|
|
}).vm;
|
|
|
|
});
|
|
|
|
|
2023-08-25 10:33:38 +00:00
|
|
|
beforeEach(() => {
|
2023-09-25 10:06:49 +00:00
|
|
|
vm.fetch([]);
|
2023-08-25 10:33:38 +00:00
|
|
|
});
|
|
|
|
|
2023-08-17 13:32:56 +00:00
|
|
|
afterEach(() => {
|
|
|
|
vi.clearAllMocks();
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('insert()', () => {
|
2023-08-21 13:14:19 +00:00
|
|
|
it('should new element in list with index 0 if formData not has data', () => {
|
2023-08-17 13:32:56 +00:00
|
|
|
vm.insert();
|
|
|
|
|
2023-08-21 13:14:19 +00:00
|
|
|
expect(vm.formData.length).toEqual(1);
|
2023-08-25 10:33:38 +00:00
|
|
|
expect(vm.formData[0].fk).toEqual(1);
|
2023-08-21 13:14:19 +00:00
|
|
|
expect(vm.formData[0].$index).toEqual(0);
|
2023-08-17 13:32:56 +00:00
|
|
|
});
|
|
|
|
});
|
2023-08-25 10:33:38 +00:00
|
|
|
|
|
|
|
describe('getChanges()', () => {
|
|
|
|
it('should return correct updates and creates', async () => {
|
2023-09-25 10:06:49 +00:00
|
|
|
vm.fetch([
|
|
|
|
{ id: 1, name: 'New name one' },
|
|
|
|
{ id: 2, name: 'New name two' },
|
|
|
|
{ id: 3, name: 'Bruce Wayne' },
|
|
|
|
]);
|
|
|
|
|
2023-08-25 10:33:38 +00:00
|
|
|
vm.originalData = [
|
2023-09-25 10:06:49 +00:00
|
|
|
{ id: 1, name: 'Tony Starks' },
|
|
|
|
{ id: 2, name: 'Jessica Jones' },
|
|
|
|
{ id: 3, name: 'Bruce Wayne' },
|
2023-08-25 10:33:38 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
vm.insert();
|
|
|
|
const result = vm.getChanges();
|
|
|
|
|
|
|
|
const expected = {
|
|
|
|
creates: [
|
|
|
|
{
|
2023-09-25 10:06:49 +00:00
|
|
|
$index: 3,
|
2023-08-25 10:33:38 +00:00
|
|
|
fk: 1,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
updates: [
|
|
|
|
{
|
|
|
|
data: {
|
|
|
|
name: 'New name one',
|
|
|
|
},
|
|
|
|
where: {
|
|
|
|
id: 1,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
data: {
|
|
|
|
name: 'New name two',
|
|
|
|
},
|
|
|
|
where: {
|
|
|
|
id: 2,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
};
|
|
|
|
|
|
|
|
expect(result).toEqual(expected);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('getDifferences()', () => {
|
|
|
|
it('should return the differences between two objects', async () => {
|
|
|
|
const obj1 = {
|
|
|
|
a: 1,
|
|
|
|
b: 2,
|
|
|
|
c: 3,
|
|
|
|
};
|
|
|
|
const obj2 = {
|
2023-09-18 12:56:14 +00:00
|
|
|
a: null,
|
2023-08-25 10:33:38 +00:00
|
|
|
b: 4,
|
|
|
|
d: 5,
|
|
|
|
};
|
|
|
|
|
|
|
|
const result = vm.getDifferences(obj1, obj2);
|
|
|
|
|
|
|
|
expect(result).toEqual({
|
2023-09-18 12:56:14 +00:00
|
|
|
a: null,
|
2023-08-25 10:33:38 +00:00
|
|
|
b: 4,
|
|
|
|
d: 5,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2023-08-17 13:32:56 +00:00
|
|
|
});
|