@@ -44,7 +44,7 @@ jest.mock('../pageControllers/index.ts', () => {
4444} )
4545
4646jest . mock ( '../helpers.ts' , ( ) => ( {
47- __esModule : true ,
47+ ... jest . requireActual ( '../helpers.ts' ) ,
4848 getCacheService : ( ...args : unknown [ ] ) => mockGetCacheService ( ...args ) ,
4949 checkEmailAddressForLiveFormSubmission : ( ...args : unknown [ ] ) =>
5050 mockCheckEmailAddressForLiveFormSubmission ( ...args )
@@ -134,10 +134,17 @@ describe('getFormModel helper', () => {
134134 class CustomController extends PageController { }
135135 const controllers = { CustomController }
136136 const metadata = {
137- id : 'form-meta-123' ,
138- versions : [ { versionNumber : 17 } ]
137+ id : 'form-meta-123'
138+ }
139+ const definition = {
140+ pages : [ { path : '/start' } ] ,
141+ metadata : {
142+ $$__formVersion : {
143+ versionNumber : 17 ,
144+ createdAt : new Date ( '2024-10-15T10:00:00Z' )
145+ }
146+ }
139147 }
140- const definition = { pages : [ { path : '/start' } ] }
141148 let formsService : FormsService
142149 let services : Services
143150 let formModelInstance : { id : string }
@@ -176,7 +183,7 @@ describe('getFormModel helper', () => {
176183 definition ,
177184 {
178185 basePath : slug ,
179- versionNumber : metadata . versions [ 0 ] . versionNumber ,
186+ versionNumber : 17 ,
180187 ordnanceSurveyApiKey : undefined ,
181188 formId : metadata . id
182189 } ,
@@ -195,6 +202,29 @@ describe('getFormModel helper', () => {
195202 )
196203 } )
197204
205+ test ( 'prefers $$__formVersion from definition metadata over metadata.versions' , async ( ) => {
206+ const definitionWithFormVersion = {
207+ ...definition ,
208+ metadata : {
209+ $$__formVersion : { versionNumber : 42 }
210+ }
211+ }
212+ formsService . getFormDefinition = jest
213+ . fn ( )
214+ . mockResolvedValue ( definitionWithFormVersion )
215+
216+ await getFormModel ( slug , state , { services, controllers } )
217+
218+ expect ( FormModel ) . toHaveBeenCalledWith (
219+ definitionWithFormVersion ,
220+ expect . objectContaining ( {
221+ versionNumber : 42
222+ } ) ,
223+ services ,
224+ controllers
225+ )
226+ } )
227+
198228 test ( 'throws when no form definition is available' , async ( ) => {
199229 jest . mocked ( formsService . getFormDefinition ) . mockResolvedValue ( undefined )
200230
@@ -210,11 +240,18 @@ describe('getFormModel helper', () => {
210240
211241describe ( 'resolveFormModel helper' , ( ) => {
212242 const slug = 'tb-origin'
213- const definition = { pages : [ ] }
243+ const definition = {
244+ pages : [ ] ,
245+ metadata : {
246+ $$__formVersion : {
247+ versionNumber : 9 ,
248+ createdAt : new Date ( '2024-10-15T10:00:00Z' )
249+ }
250+ }
251+ }
214252 const metadata = {
215253 id : 'metadata-123' ,
216254 live : { updatedAt : new Date ( '2024-10-15T10:00:00Z' ) } ,
217- versions : [ { versionNumber : 9 } ] ,
218255 notificationEmail : 'enrique.chase@defra.gov.uk'
219256 }
220257 let server : Request [ 'server' ]
@@ -274,7 +311,7 @@ describe('resolveFormModel helper', () => {
274311 definition ,
275312 expect . objectContaining ( {
276313 basePath : 'forms/preview/live/tb-origin' ,
277- versionNumber : metadata . versions [ 0 ] . versionNumber ,
314+ versionNumber : 9 ,
278315 ordnanceSurveyApiKey : 'os-api-key' ,
279316 formId : metadata . id
280317 } ) ,
@@ -283,6 +320,29 @@ describe('resolveFormModel helper', () => {
283320 )
284321 } )
285322
323+ test ( 'prefers $$__formVersion from definition metadata over metadata.versions' , async ( ) => {
324+ const definitionWithFormVersion = {
325+ ...definition ,
326+ metadata : {
327+ $$__formVersion : { versionNumber : 55 }
328+ }
329+ }
330+ mockFormsService . getFormDefinition = jest
331+ . fn ( )
332+ . mockResolvedValue ( definitionWithFormVersion )
333+
334+ await resolveFormModel ( server , slug , FormStatus . Live )
335+
336+ expect ( FormModel ) . toHaveBeenCalledWith (
337+ definitionWithFormVersion ,
338+ expect . objectContaining ( {
339+ versionNumber : 55
340+ } ) ,
341+ mockServices ,
342+ undefined
343+ )
344+ } )
345+
286346 test ( 'throws when requested form state does not exist on metadata' , async ( ) => {
287347 mockFormsService . getFormMetadata . mockResolvedValue ( {
288348 id : 'metadata-123' ,
0 commit comments