import { createWrapper, axios } from 'app/test/vitest/helper';
import VnDmsList from 'src/components/common/VnDmsList.vue';
import { vi, afterEach, beforeAll, describe, expect, it } from 'vitest';

describe('VnDmsList', () => {
    let vm;
    const dms = { 
        userFk: 1, 
        name: 'DMS 1' 
    };
    
    beforeAll(() => {
        vi.spyOn(axios, 'get').mockResolvedValue({ data: [] });
        vm = createWrapper(VnDmsList, {
            props: {
                model: 'WorkerDms/1110/filter',
                defaultDmsCode: 'hhrrData',
                filter: 'wd.workerFk',
                updateModel: 'Workers',
                deleteModel: 'WorkerDms',
                downloadModel: 'WorkerDms' 
            }
        }).vm;
    });

    afterEach(() => {
        vi.clearAllMocks();
    });

    describe('setData()', () => {
        const data = [
            { 
                userFk: 1, 
                name: 'Jessica',
                lastName: 'Jones',
                file: '4.jpg',
                created: '2021-07-28 21:00:00'
            },
            { 
                userFk: 2, 
                name: 'Bruce',
                lastName: 'Banner',
                created: '2022-07-28 21:00:00',
                dms: {
                    userFk: 2, 
                    name: 'Bruce',
                    lastName: 'BannerDMS',
                    created: '2022-07-28 21:00:00',
                    file: '4.jpg',
                } 
            },
            {
                userFk: 3,
                name: 'Natasha',
                lastName: 'Romanoff',
                file: '4.jpg',
                created: '2021-10-28 21:00:00'
            }  
        ]

        it('Should replace objects that contain the "dms" property with the value of the same and sort by creation date', () => {
            vm.setData(data);
            expect([vm.rows][0][0].lastName).toEqual('BannerDMS');
            expect([vm.rows][0][1].lastName).toEqual('Romanoff');

        });
    });

    describe('parseDms()', () => {
        const resultDms = { ...dms, userId:1};
        
        it('Should add properties that end with "Fk" by changing the suffix to "Id"', () => {
            const parsedDms = vm.parseDms(dms);
            expect(parsedDms).toEqual(resultDms);
        });
    });

    describe('showFormDialog()', () => {
        const resultDms = { ...dms, userId:1};
        
        it('should call fn parseDms() and set show true if dms is defined', () => {
            vm.showFormDialog(dms);
            expect(vm.formDialog.show).toEqual(true);
            expect(vm.formDialog.dms).toEqual(resultDms);
        });
    });
});	