Skip to content

Commit 6f38420

Browse files
committed
test(validation): cover validation file contract
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 4e22791 commit 6f38420

1 file changed

Lines changed: 50 additions & 49 deletions

File tree

src/tests/components/validation/FileStatusList.spec.ts

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,16 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'
77
import type { MockedFunction } from 'vitest'
88
import { mount } from '@vue/test-utils'
99
import type { VueWrapper } from '@vue/test-utils'
10+
import type { ValidationFileRecord } from '../../../types'
1011

1112
type TranslationFn = (app: string, text: string) => string
1213

1314
type FileStatusListComponent = typeof import('../../../components/validation/FileStatusList.vue').default
1415
type FileStatusModule = typeof import('../../../utils/fileStatus.js')
1516
type FileStatusConstants = typeof import('../../../constants.js').FILE_STATUS
1617

17-
type FileStatusResponse = {
18-
id: number
19-
name: string
20-
status: number
21-
size: number
22-
signed?: string
23-
}
24-
2518
type FileStatusListVm = {
26-
files: FileStatusResponse[]
19+
files: ValidationFileRecord[]
2720
updateTimer: ReturnType<typeof setInterval> | null
2821
$nextTick: () => Promise<void>
2922
loadFiles: () => Promise<void>
@@ -43,9 +36,27 @@ type FileStatusListWrapper = VueWrapper<any> & {
4336
}
4437

4538
type AxiosMock = {
46-
get: MockedFunction<(url: string) => Promise<{ data: { ocs: { data: FileStatusResponse } } }>>
39+
get: MockedFunction<(url: string) => Promise<{ data: { ocs: { data: ValidationFileRecord } } }>>
4740
}
4841

42+
const createValidationFile = (overrides: Partial<ValidationFileRecord> = {}): ValidationFileRecord => ({
43+
id: 1,
44+
uuid: 'file-uuid',
45+
name: 'stub.pdf',
46+
status: 0,
47+
statusText: 'Draft',
48+
nodeId: 1,
49+
nodeType: 'file',
50+
signatureFlow: 0,
51+
docmdpLevel: 0,
52+
totalPages: 1,
53+
size: 0,
54+
pdfVersion: '1.7',
55+
created_at: '2024-01-01 00:00:00',
56+
requested_by: { userId: 'user', displayName: 'User' },
57+
...overrides,
58+
})
59+
4960
let FileStatusList: FileStatusListComponent
5061
let fileStatus: FileStatusModule
5162
let FILE_STATUS: FileStatusConstants
@@ -142,7 +153,7 @@ describe('FileStatusList', () => {
142153
mockAxios.get.mockResolvedValue({
143154
data: {
144155
ocs: {
145-
data: { id: 1, name: 'stub.pdf', size: 0, status: FILE_STATUS.DRAFT },
156+
data: createValidationFile(),
146157
},
147158
},
148159
})
@@ -170,7 +181,7 @@ describe('FileStatusList', () => {
170181
mockAxios.get.mockResolvedValueOnce({
171182
data: {
172183
ocs: {
173-
data: { id: 1, name: 'file1.pdf', size: 0, status: FILE_STATUS.DRAFT },
184+
data: createValidationFile({ name: 'file1.pdf', status: FILE_STATUS.DRAFT }),
174185
},
175186
},
176187
})
@@ -186,14 +197,14 @@ describe('FileStatusList', () => {
186197
.mockResolvedValueOnce({
187198
data: {
188199
ocs: {
189-
data: { id: 1, name: 'test.pdf', size: 1024, status: FILE_STATUS.SIGNED },
200+
data: createValidationFile({ name: 'test.pdf', size: 1024, status: FILE_STATUS.SIGNED, statusText: 'Signed' }),
190201
},
191202
},
192203
})
193204
.mockResolvedValueOnce({
194205
data: {
195206
ocs: {
196-
data: { id: 1, name: 'test.pdf', size: 1024, status: FILE_STATUS.SIGNED },
207+
data: createValidationFile({ name: 'test.pdf', size: 1024, status: FILE_STATUS.SIGNED, statusText: 'Signed' }),
197208
},
198209
},
199210
})
@@ -210,28 +221,28 @@ describe('FileStatusList', () => {
210221
.mockResolvedValueOnce({
211222
data: {
212223
ocs: {
213-
data: { id: 1, name: 'file1.pdf', size: 0, status: FILE_STATUS.DRAFT },
224+
data: createValidationFile({ id: 1, name: 'file1.pdf', status: FILE_STATUS.DRAFT }),
214225
},
215226
},
216227
})
217228
.mockResolvedValueOnce({
218229
data: {
219230
ocs: {
220-
data: { id: 2, name: 'file2.pdf', size: 0, status: FILE_STATUS.SIGNED },
231+
data: createValidationFile({ id: 2, uuid: 'file-uuid-2', name: 'file2.pdf', status: FILE_STATUS.SIGNED, statusText: 'Signed', nodeId: 2 }),
221232
},
222233
},
223234
})
224235
.mockResolvedValueOnce({
225236
data: {
226237
ocs: {
227-
data: { id: 1, name: 'file1.pdf', size: 0, status: FILE_STATUS.DRAFT },
238+
data: createValidationFile({ id: 1, name: 'file1.pdf', status: FILE_STATUS.DRAFT }),
228239
},
229240
},
230241
})
231242
.mockResolvedValueOnce({
232243
data: {
233244
ocs: {
234-
data: { id: 2, name: 'file2.pdf', size: 0, status: FILE_STATUS.SIGNED },
245+
data: createValidationFile({ id: 2, uuid: 'file-uuid-2', name: 'file2.pdf', status: FILE_STATUS.SIGNED, statusText: 'Signed', nodeId: 2 }),
235246
},
236247
},
237248
})
@@ -246,7 +257,7 @@ describe('FileStatusList', () => {
246257
mockAxios.get.mockResolvedValueOnce({
247258
data: {
248259
ocs: {
249-
data: { id: 1, name: 'test.pdf', size: 0, status: FILE_STATUS.DRAFT },
260+
data: createValidationFile({ name: 'test.pdf', status: FILE_STATUS.DRAFT }),
250261
},
251262
},
252263
})
@@ -390,7 +401,7 @@ describe('FileStatusList', () => {
390401
wrapper = createWrapper({ fileIds: [1] })
391402

392403
mockAxios.get.mockResolvedValue({
393-
data: { ocs: { data: { id: 1, name: 'test.pdf', size: 0, status: FILE_STATUS.DRAFT } } },
404+
data: { ocs: { data: createValidationFile({ name: 'test.pdf', status: FILE_STATUS.DRAFT }) } },
394405
})
395406

396407
wrapper.vm.startUpdatePolling()
@@ -433,7 +444,7 @@ describe('FileStatusList', () => {
433444
wrapper = localWrapper
434445

435446
mockAxios.get.mockResolvedValue({
436-
data: { ocs: { data: { id: 1, name: 'test.pdf', size: 0, status: FILE_STATUS.DRAFT } } },
447+
data: { ocs: { data: createValidationFile({ name: 'test.pdf', status: FILE_STATUS.DRAFT }) } },
437448
})
438449

439450
await localWrapper.setProps({ fileIds: [1] })
@@ -456,7 +467,7 @@ describe('FileStatusList', () => {
456467
wrapper = localWrapper
457468

458469
mockAxios.get.mockResolvedValue({
459-
data: { ocs: { data: { id: 2, name: 'file2.pdf', size: 0, status: FILE_STATUS.SIGNED } } },
470+
data: { ocs: { data: createValidationFile({ id: 2, uuid: 'file-uuid-2', name: 'file2.pdf', status: FILE_STATUS.SIGNED, statusText: 'Signed', nodeId: 2 }) } },
460471
})
461472

462473
await localWrapper.setProps({ fileIds: [] })
@@ -469,7 +480,7 @@ describe('FileStatusList', () => {
469480
describe('RULE: mounted lifecycle initializes data loading', () => {
470481
it('loads files on mount when fileIds provided', async () => {
471482
mockAxios.get.mockResolvedValue({
472-
data: { ocs: { data: { id: 1, name: 'test.pdf', size: 0, status: FILE_STATUS.DRAFT } } },
483+
data: { ocs: { data: createValidationFile({ name: 'test.pdf', status: FILE_STATUS.DRAFT }) } },
473484
})
474485

475486
wrapper = createWrapper({ fileIds: [1] })
@@ -510,12 +521,7 @@ describe('FileStatusList', () => {
510521
mockAxios.get.mockResolvedValue({
511522
data: {
512523
ocs: {
513-
data: {
514-
id: 1,
515-
name: 'document.pdf',
516-
size: 2048,
517-
status: FILE_STATUS.SIGNED,
518-
},
524+
data: createValidationFile({ name: 'document.pdf', size: 2048, status: FILE_STATUS.SIGNED, statusText: 'Signed' }),
519525
},
520526
},
521527
})
@@ -528,63 +534,58 @@ describe('FileStatusList', () => {
528534
})
529535
})
530536

531-
describe('RULE: signed date displays when available', () => {
532-
it('shows formatted date when signed property exists', async () => {
537+
describe('RULE: status changed date displays when available', () => {
538+
it('shows formatted date when metadata status_changed_at exists', async () => {
533539
mockAxios.get.mockResolvedValue({
534540
data: {
535541
ocs: {
536-
data: {
537-
id: 1,
542+
data: createValidationFile({
543+
uuid: 'signed-uuid',
538544
name: 'signed.pdf',
539-
size: 0,
540-
signed: '2024-06-01T12:00:00',
541545
status: FILE_STATUS.SIGNED,
542-
},
546+
statusText: 'Signed',
547+
metadata: { extension: 'pdf', p: 1, status_changed_at: '2024-06-01T12:00:00' },
548+
}),
543549
},
544550
},
545551
})
546552

547553
wrapper = createWrapper({ fileIds: [1] })
548554
await wrapper.vm.loadFiles()
549555

550-
expect(wrapper.vm.files[0].signed).toBe('2024-06-01T12:00:00')
556+
expect(wrapper.vm.files[0].metadata?.status_changed_at).toBe('2024-06-01T12:00:00')
551557
})
552558

553-
it('handles missing signed date', async () => {
559+
it('handles missing status changed date', async () => {
554560
mockAxios.get.mockResolvedValue({
555561
data: {
556562
ocs: {
557-
data: {
558-
id: 1,
559-
name: 'unsigned.pdf',
560-
size: 0,
561-
status: FILE_STATUS.DRAFT,
562-
},
563+
data: createValidationFile({ uuid: 'unsigned-uuid', name: 'unsigned.pdf', status: FILE_STATUS.DRAFT, statusText: 'Draft' }),
563564
},
564565
},
565566
})
566567

567568
wrapper = createWrapper({ fileIds: [1] })
568569
await wrapper.vm.loadFiles()
569570

570-
expect(wrapper.vm.files[0].signed).toBeUndefined()
571+
expect(wrapper.vm.files[0].metadata?.status_changed_at).toBeUndefined()
571572
})
572573
})
573574

574575
describe('RULE: multiple files display in sequence', () => {
575576
it('renders all loaded files', async () => {
576577
mockAxios.get
577578
.mockResolvedValueOnce({
578-
data: { ocs: { data: { id: 1, name: 'file1.pdf', size: 0, status: FILE_STATUS.DRAFT } } },
579+
data: { ocs: { data: createValidationFile({ id: 1, name: 'file1.pdf', status: FILE_STATUS.DRAFT }) } },
579580
})
580581
.mockResolvedValueOnce({
581-
data: { ocs: { data: { id: 2, name: 'file2.pdf', size: 0, status: FILE_STATUS.SIGNED } } },
582+
data: { ocs: { data: createValidationFile({ id: 2, uuid: 'file-uuid-2', name: 'file2.pdf', status: FILE_STATUS.SIGNED, statusText: 'Signed', nodeId: 2 }) } },
582583
})
583584
.mockResolvedValueOnce({
584-
data: { ocs: { data: { id: 1, name: 'file1.pdf', size: 0, status: FILE_STATUS.DRAFT } } },
585+
data: { ocs: { data: createValidationFile({ id: 1, name: 'file1.pdf', status: FILE_STATUS.DRAFT }) } },
585586
})
586587
.mockResolvedValueOnce({
587-
data: { ocs: { data: { id: 2, name: 'file2.pdf', size: 0, status: FILE_STATUS.SIGNED } } },
588+
data: { ocs: { data: createValidationFile({ id: 2, uuid: 'file-uuid-2', name: 'file2.pdf', status: FILE_STATUS.SIGNED, statusText: 'Signed', nodeId: 2 }) } },
588589
})
589590

590591
wrapper = createWrapper({ fileIds: [1, 2] })

0 commit comments

Comments
 (0)