55
66import { describe , expect , it , vi } from 'vitest'
77import { shallowMount } from '@vue/test-utils'
8+ import type { components } from '../../types/openapi/openapi'
89import RequestSigningProgress from '../../components/RequestSigningProgress.vue'
910
1011vi . mock ( '../../utils/fileStatus.js' , ( ) => ( {
1112 getStatusIcon : vi . fn ( ) ,
1213} ) )
1314
15+ type SigningProgress = components [ 'schemas' ] [ 'ProgressPayload' ]
16+
1417describe ( 'RequestSigningProgress business rules' , ( ) => {
1518 it ( 'detects in-progress status only for status 5' , async ( ) => {
1619 const wrapper = shallowMount ( RequestSigningProgress , {
@@ -59,7 +62,7 @@ describe('RequestSigningProgress business rules', () => {
5962
6063 expect ( wrapper . vm . progressPercentage ) . toBe ( 0 )
6164
62- await wrapper . setProps ( { progress : { total : 0 , signed : 0 } } )
65+ await wrapper . setProps ( { progress : { total : 0 , signed : 0 , inProgress : 0 , pending : 0 } } )
6366 await wrapper . vm . $nextTick ( )
6467 expect ( wrapper . vm . progressPercentage ) . toBe ( 0 )
6568 } )
@@ -68,12 +71,60 @@ describe('RequestSigningProgress business rules', () => {
6871 const wrapper = shallowMount ( RequestSigningProgress , {
6972 props : {
7073 status : 5 ,
71- progress : { total : 3 , signed : 2 } ,
74+ progress : { total : 3 , signed : 2 , inProgress : 1 , pending : 0 } ,
7275 } ,
7376 global : { stubs : { NcIconSvgWrapper : true } } ,
7477 } )
7578 await wrapper . vm . $nextTick ( )
7679
7780 expect ( wrapper . vm . progressPercentage ) . toBe ( 67 )
7881 } )
82+
83+ it ( 'treats OpenAPI signer records as signed only when timestamp exists' , async ( ) => {
84+ const progress : SigningProgress = {
85+ total : 2 ,
86+ signed : 1 ,
87+ inProgress : 0 ,
88+ pending : 1 ,
89+ signers : [
90+ { id : 1 , displayName : 'Alice' , signed : '2026-03-15T10:00:00Z' , status : 3 } ,
91+ { id : 2 , displayName : 'Bob' , signed : null , status : 1 } ,
92+ ] ,
93+ }
94+ const wrapper = shallowMount ( RequestSigningProgress , {
95+ props : {
96+ status : 5 ,
97+ progress,
98+ } ,
99+ global : { stubs : { NcIconSvgWrapper : true } } ,
100+ } )
101+ await wrapper . vm . $nextTick ( )
102+
103+ expect ( wrapper . vm . isProgressSignerSigned ( progress . signers ! [ 0 ] ) ) . toBe ( true )
104+ expect ( wrapper . vm . isProgressSignerSigned ( progress . signers ! [ 1 ] ) ) . toBe ( false )
105+ } )
106+
107+ it ( 'uses OpenAPI progress files with numeric ids and status text' , async ( ) => {
108+ const progress : SigningProgress = {
109+ total : 1 ,
110+ signed : 0 ,
111+ inProgress : 1 ,
112+ pending : 0 ,
113+ files : [
114+ { id : 99 , name : 'contract.pdf' , status : 5 , statusText : 'Signing in progress' } ,
115+ ] ,
116+ }
117+ const wrapper = shallowMount ( RequestSigningProgress , {
118+ props : {
119+ status : 5 ,
120+ progress,
121+ } ,
122+ global : { stubs : { NcIconSvgWrapper : true } } ,
123+ } )
124+ await wrapper . vm . $nextTick ( )
125+
126+ expect ( wrapper . find ( '.signing-progress__file-name' ) . text ( ) ) . toBe ( 'contract.pdf' )
127+ expect ( wrapper . find ( '.signing-progress__file-progress' ) . text ( ) ) . toBe ( 'Signing in progress' )
128+ expect ( wrapper . vm . isProgressFileSigned ( progress . files ! [ 0 ] ) ) . toBe ( false )
129+ } )
79130} )
0 commit comments