diff --git a/src/components/ui/__tests__/VnImg.spec.js b/src/components/ui/__tests__/VnImg.spec.js new file mode 100644 index 000000000..39dd10775 --- /dev/null +++ b/src/components/ui/__tests__/VnImg.spec.js @@ -0,0 +1,89 @@ +import { vi, describe, expect, it, beforeEach, afterEach } from 'vitest'; +import { createWrapper } from 'app/test/vitest/helper'; +import VnImg from 'src/components/ui/VnImg.vue'; + +let wrapper; +let vm; +const isEmployeeMock = vi.fn(); + +function generateWrapper(storage = 'images') { + wrapper = createWrapper(VnImg, { + props: { + id: 123, + zoomResolution: '400x400', + storage, + } + }); + wrapper = wrapper.wrapper; + vm = wrapper.vm; + vm.timeStamp = 'timestamp'; +}; + +vi.mock('src/composables/useSession', () => ({ + useSession: () => ({ + getTokenMultimedia: () => 'token', + }), +})); + +vi.mock('src/composables/useRole', () => ({ + useRole: () => ({ + isEmployee: isEmployeeMock, + }), +})); + + +describe('VnImg', () => { + beforeEach(() => { + isEmployeeMock.mockReset(); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('getUrl', () => { + it('should return /api/{storage}/{id}/downloadFile?access_token={token} when storage is dms', async () => { + isEmployeeMock.mockReturnValue(false); + generateWrapper('dms'); + await vm.$nextTick(); + const url = vm.getUrl(); + expect(url).toBe('/api/dms/123/downloadFile?access_token=token'); + }); + + it('should return /no-user.png when role is not employee and storage is not dms', async () => { + isEmployeeMock.mockReturnValue(false); + generateWrapper(); + await vm.$nextTick(); + const url = vm.getUrl(); + expect(url).toBe('/no-user.png'); + }); + + it('should return /api/{storage}/{collection}/{curResolution}/{id}/download?access_token={token}&{timeStamp} when zoom is false and role is employee and storage is not dms', async () => { + isEmployeeMock.mockReturnValue(true); + generateWrapper(); + await vm.$nextTick(); + const url = vm.getUrl(); + expect(url).toBe('/api/images/catalog/200x200/123/download?access_token=token×tamp'); + }); + + it('should return /api/{storage}/{collection}/{curResolution}/{id}/download?access_token={token}&{timeStamp} when zoom is true and role is employee and storage is not dms', async () => { + isEmployeeMock.mockReturnValue(true); + generateWrapper(); + await vm.$nextTick(); + const url = vm.getUrl(true); + expect(url).toBe('/api/images/catalog/400x400/123/download?access_token=token×tamp'); + }); + }); + + describe('reload', () => { + it('should update the timestamp', async () => { + generateWrapper(); + const initialTimestamp = wrapper.vm.timeStamp; + + wrapper.vm.reload(); + const newTimestamp = wrapper.vm.timeStamp; + + expect(initialTimestamp).not.toEqual(newTimestamp); + }); + }); +}); \ No newline at end of file