From b26d1f7945f684380cf09d825bafe0b155679c76 Mon Sep 17 00:00:00 2001 From: jtubau Date: Fri, 10 Jan 2025 14:59:29 +0100 Subject: [PATCH 1/5] test: refs #7073 add unit tests for VnDms component --- src/components/common/__tests__/VnDms.spec.js | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/components/common/__tests__/VnDms.spec.js diff --git a/src/components/common/__tests__/VnDms.spec.js b/src/components/common/__tests__/VnDms.spec.js new file mode 100644 index 000000000..cdb273fbb --- /dev/null +++ b/src/components/common/__tests__/VnDms.spec.js @@ -0,0 +1,130 @@ +import { createWrapper, axios, flushPromises } from 'app/test/vitest/helper'; +import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest'; +import VnDms from 'src/components/common/VnDms.vue'; + +class MockFormData { + constructor() { + this.entries = {}; + } + + append(key, value) { + if (!key) { + throw new Error('Key is required for FormData.append'); + } + this.entries[key] = value; + } + + get(key) { + return this.entries[key] || null; + } + + getAll() { + return this.entries; + } +} + +global.FormData = MockFormData; + +describe('VnDms', () => { + let wrapper; + let vm; + let postMock; + + const postResponseMock = { data: { success: true } }; + + const data = { + hasFile: true, + hasFileAttached: true, + reference: 'DMS-test', + warehouseFk: 1, + companyFk: 2, + dmsTypeFk: 3, + description: 'This is a test description', + files: { name: 'example.txt', content: new Blob(['file content'], { type: 'text/plain' })}, + }; + + const expectedBody = { + hasFile: true, + hasFileAttached: true, + reference: 'DMS-test', + warehouseId: 1, + companyId: 2, + dmsTypeId: 3, + description: 'This is a test description', + }; + + beforeAll(() => { + wrapper = createWrapper(VnDms, { + propsData: { + url: '/test', + formInitialData: { id: 1, reference: 'test' }, + model: 'Worker', + } + }); + wrapper = wrapper.wrapper; + vm = wrapper.vm; + vi.spyOn(vm, '$emit'); + }); + + beforeEach(() => { + postMock = vi.spyOn(axios, 'post').mockResolvedValue(postResponseMock); + vm.dms = data; + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('mapperDms', () => { + it('should map DMS data correctly and add file to FormData', () => { + const [formData, params] = vm.mapperDms(data); + + expect(formData.get('example.txt')).toBe(data.files); + expect(expectedBody).toEqual(params.params); + }); + + it('should map DMS data correctly without file', () => { + delete data.files; + + const [formData, params] = vm.mapperDms(data); + + expect(formData.getAll()).toEqual({}); + expect(expectedBody).toEqual(params.params); + }); + }); + + describe('getUrl', () => { + it('should returns prop url when is set', async () => { + expect(vm.getUrl()).toBe('/test'); + }); + + it('should returns url dms/"props.formInitialData.id"/updateFile when prop url is null', async () => { + await wrapper.setProps({ url: null }); + expect(vm.getUrl()).toBe('dms/1/updateFile'); + }); + + it('should returns url "props.model"/"route.params.id"/uploadFile when formInitialData is null', async () => { + await wrapper.setProps({ formInitialData: null }); + vm.route.params.id = '123'; + expect(vm.getUrl()).toBe('Worker/123/uploadFile'); + }); + }); + + describe('save', () => { + it('should save data correctly', async () => { + await vm.save(); + expect(postMock).toHaveBeenCalledWith(vm.getUrl(), expect.any(FormData), { params: expectedBody }); + expect(wrapper.emitted('onDataSaved')).toBeTruthy(); + //expect(emitMock).toHaveBeenCalledWith('onDataSaved', expectedBody, postResponseMock); + }); + }); + + describe('defaultData', () => { + it('should set default data correctly', async () => { + await wrapper.setProps({ formInitialData: null }); + vm.defaultData(); + + expect(vm.dms.reference).toBe('123'); + }); + }); +}); \ No newline at end of file From 5b6ad1a7c01798ff28862aaf93839e56d2dfea37 Mon Sep 17 00:00:00 2001 From: jtubau Date: Mon, 13 Jan 2025 09:10:41 +0100 Subject: [PATCH 2/5] test: refs #7073 add test to defaultData if formInitialData has value --- src/components/common/__tests__/VnDms.spec.js | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/components/common/__tests__/VnDms.spec.js b/src/components/common/__tests__/VnDms.spec.js index cdb273fbb..03028aee7 100644 --- a/src/components/common/__tests__/VnDms.spec.js +++ b/src/components/common/__tests__/VnDms.spec.js @@ -1,4 +1,4 @@ -import { createWrapper, axios, flushPromises } from 'app/test/vitest/helper'; +import { createWrapper, axios } from 'app/test/vitest/helper'; import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest'; import VnDms from 'src/components/common/VnDms.vue'; @@ -115,16 +115,32 @@ describe('VnDms', () => { await vm.save(); expect(postMock).toHaveBeenCalledWith(vm.getUrl(), expect.any(FormData), { params: expectedBody }); expect(wrapper.emitted('onDataSaved')).toBeTruthy(); - //expect(emitMock).toHaveBeenCalledWith('onDataSaved', expectedBody, postResponseMock); }); }); describe('defaultData', () => { - it('should set default data correctly', async () => { - await wrapper.setProps({ formInitialData: null }); + it('should set dms with formInitialData', async () => { + const testData = { + hasFile: false, + hasFileAttached: false, + reference: 'defaultData-test', + warehouseFk: 2, + companyFk: 3, + dmsTypeFk: 2, + description: 'This is a test description' + } + await wrapper.setProps({ formInitialData: testData }); vm.defaultData(); - expect(vm.dms.reference).toBe('123'); + expect(vm.dms).toEqual(testData); + }); + + it('should add reference with "route.params.id" to dms if formInitialData is null', async () => { + await wrapper.setProps({ formInitialData: null }); + vm.route.params.id= '111'; + vm.defaultData(); + + expect(vm.dms.reference).toBe('111'); }); }); }); \ No newline at end of file From 764eef13c39b9429f7cb38dfb938853db826783c Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 15 Jan 2025 12:32:46 +0100 Subject: [PATCH 3/5] feat: refs #8398 moveTicketsFuture --- src/pages/Ticket/TicketAdvance.vue | 3 ++- src/pages/Ticket/TicketFuture.vue | 17 ++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue index 1d88ae3f8..12e94d197 100644 --- a/src/pages/Ticket/TicketAdvance.vue +++ b/src/pages/Ticket/TicketAdvance.vue @@ -254,12 +254,13 @@ const moveTicketsAdvance = async () => { } continue; } + console.log('ticket: ', ticket); ticketsToMove.push({ originId: ticket.futureId, destinationId: ticket.id, originShipped: ticket.futureShipped, destinationShipped: ticket.shipped, - workerFk: ticket.workerFk, + salesPersonFk: ticket.client.salesPersonFk, }); } diff --git a/src/pages/Ticket/TicketFuture.vue b/src/pages/Ticket/TicketFuture.vue index 74c0d3202..41a53aae8 100644 --- a/src/pages/Ticket/TicketFuture.vue +++ b/src/pages/Ticket/TicketFuture.vue @@ -244,13 +244,16 @@ const totalPriceColor = (totalWithVat) => isLessThan50(totalWithVat) ? 'warning' : 'transparent'; const moveTicketsFuture = async () => { - const ticketsToMove = selectedTickets.value.map((ticket) => ({ - originId: ticket.id, - destinationId: ticket.futureId, - originShipped: ticket.shipped, - destinationShipped: ticket.futureShipped, - workerFk: ticket.workerFk, - })); + const ticketsToMove = selectedTickets.value.map((ticket) => { + console.log('salesPersonFk: ', ticket.client); + return { + originId: ticket.id, + destinationId: ticket.futureId, + originShipped: ticket.shipped, + destinationShipped: ticket.futureShipped, + salesPersonFk: ticket.client.salesPersonFk, + }; + }); let params = { tickets: ticketsToMove }; await axios.post('Tickets/merge', params); From 8182bf7b91a12de1740a2bec79ce57de3b637d0a Mon Sep 17 00:00:00 2001 From: robert Date: Thu, 16 Jan 2025 07:29:37 +0100 Subject: [PATCH 4/5] feat: refs #8398 modify previous changes --- src/pages/Ticket/TicketAdvance.vue | 4 +--- src/pages/Ticket/TicketFuture.vue | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue index 12e94d197..05bd14075 100644 --- a/src/pages/Ticket/TicketAdvance.vue +++ b/src/pages/Ticket/TicketAdvance.vue @@ -254,16 +254,14 @@ const moveTicketsAdvance = async () => { } continue; } - console.log('ticket: ', ticket); ticketsToMove.push({ originId: ticket.futureId, destinationId: ticket.id, originShipped: ticket.futureShipped, destinationShipped: ticket.shipped, - salesPersonFk: ticket.client.salesPersonFk, + salesPersonFk: ticket.workerFk, }); } - const params = { tickets: ticketsToMove }; await axios.post('Tickets/merge', params); vnTableRef.value.reload(); diff --git a/src/pages/Ticket/TicketFuture.vue b/src/pages/Ticket/TicketFuture.vue index 41a53aae8..0d216bed4 100644 --- a/src/pages/Ticket/TicketFuture.vue +++ b/src/pages/Ticket/TicketFuture.vue @@ -245,13 +245,12 @@ const totalPriceColor = (totalWithVat) => const moveTicketsFuture = async () => { const ticketsToMove = selectedTickets.value.map((ticket) => { - console.log('salesPersonFk: ', ticket.client); return { originId: ticket.id, destinationId: ticket.futureId, originShipped: ticket.shipped, destinationShipped: ticket.futureShipped, - salesPersonFk: ticket.client.salesPersonFk, + salesPersonFk: ticket.salesPersonFk, }; }); From 81718c0c4db08fa81eb43dfa0d2116e0f40c056e Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 22 Jan 2025 16:35:13 +0100 Subject: [PATCH 5/5] feat: refs #7184 added myTeam filter at WorkerFilter --- src/pages/Worker/WorkerFilter.vue | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pages/Worker/WorkerFilter.vue b/src/pages/Worker/WorkerFilter.vue index dfb5659fe..8210ba0e3 100644 --- a/src/pages/Worker/WorkerFilter.vue +++ b/src/pages/Worker/WorkerFilter.vue @@ -98,6 +98,15 @@ const getLocale = (label) => { /> + + + + +