@@ -246,4 +246,147 @@ test.describe('letter file validation', () => {
246246 ) ;
247247 } ) . toPass ( { timeout : 10_000 } ) ;
248248 } ) ;
249+
250+ test ( 'validation fails if pdf parameters and test data parameters do not match' , async ( {
251+ page,
252+ } ) => {
253+ const createTemplatePage = new TemplateMgmtCreateLetterPage ( page ) ;
254+
255+ await createTemplatePage . loadPage ( ) ;
256+
257+ await createTemplatePage . nameInput . fill ( 'Wrong test data params' ) ;
258+
259+ await createTemplatePage . setPdfFile (
260+ pdfUploadFixtures . withPersonalisation . pdf . filepath
261+ ) ;
262+
263+ await createTemplatePage . setCsvFile (
264+ pdfUploadFixtures . withPersonalisation . csvWrongParams . filepath
265+ ) ;
266+
267+ await createTemplatePage . clickSaveAndPreviewButton ( ) ;
268+
269+ await expect ( page ) . toHaveURL ( TemplateMgmtPreviewLetterPage . urlRegexp ) ;
270+
271+ const maybeTemplateId = TemplateMgmtPreviewLetterPage . getTemplateId (
272+ page . url ( )
273+ ) ;
274+
275+ expect ( maybeTemplateId ) . not . toBeUndefined ( ) ;
276+
277+ const templateId = maybeTemplateId as string ;
278+
279+ const key = {
280+ id : templateId ,
281+ owner : user . userId ,
282+ } ;
283+
284+ templateStorageHelper . addAdHocTemplateKey ( key ) ;
285+
286+ await expect ( async ( ) => {
287+ const template = await templateStorageHelper . getTemplate ( {
288+ id : templateId ,
289+ owner : user . userId ,
290+ } ) ;
291+
292+ expect ( template . files ?. pdfTemplate ?. virusScanStatus ) . toBe ( 'PASSED' ) ;
293+ expect ( template . files ?. testDataCsv ?. virusScanStatus ) . toBe ( 'PASSED' ) ;
294+ expect ( template . templateStatus ) . toBe ( 'VALIDATION_FAILED' ) ;
295+ expect ( template . personalisationParameters ) . toBeUndefined ( ) ;
296+ expect ( template . csvHeaders ) . toBeUndefined ( ) ;
297+ } ) . toPass ( { timeout : 10_000 } ) ;
298+ } ) ;
299+
300+ test ( 'validation fails if unexpected csv is uploaded' , async ( { page } ) => {
301+ const createTemplatePage = new TemplateMgmtCreateLetterPage ( page ) ;
302+
303+ await createTemplatePage . loadPage ( ) ;
304+
305+ await createTemplatePage . nameInput . fill ( 'With unexpected CSV' ) ;
306+
307+ await createTemplatePage . setPdfFile (
308+ pdfUploadFixtures . noCustomPersonalisation . pdf . filepath
309+ ) ;
310+
311+ await createTemplatePage . setCsvFile (
312+ pdfUploadFixtures . withPersonalisation . csv . filepath
313+ ) ;
314+
315+ await createTemplatePage . clickSaveAndPreviewButton ( ) ;
316+
317+ await expect ( page ) . toHaveURL ( TemplateMgmtPreviewLetterPage . urlRegexp ) ;
318+
319+ const maybeTemplateId = TemplateMgmtPreviewLetterPage . getTemplateId (
320+ page . url ( )
321+ ) ;
322+
323+ expect ( maybeTemplateId ) . not . toBeUndefined ( ) ;
324+
325+ const templateId = maybeTemplateId as string ;
326+
327+ const key = {
328+ id : templateId ,
329+ owner : user . userId ,
330+ } ;
331+
332+ templateStorageHelper . addAdHocTemplateKey ( key ) ;
333+
334+ await expect ( async ( ) => {
335+ const template = await templateStorageHelper . getTemplate ( {
336+ id : templateId ,
337+ owner : user . userId ,
338+ } ) ;
339+
340+ expect ( template . files ?. pdfTemplate ?. virusScanStatus ) . toBe ( 'PASSED' ) ;
341+ expect ( template . files ?. testDataCsv ?. virusScanStatus ) . toBe ( 'PASSED' ) ;
342+ expect ( template . templateStatus ) . toBe ( 'VALIDATION_FAILED' ) ;
343+ expect ( template . personalisationParameters ) . toBeUndefined ( ) ;
344+ expect ( template . csvHeaders ) . toBeUndefined ( ) ;
345+ } ) . toPass ( { timeout : 10_000 } ) ;
346+ } ) ;
347+
348+ test ( 'validation fails if expected csv is not uploaded' , async ( { page } ) => {
349+ const createTemplatePage = new TemplateMgmtCreateLetterPage ( page ) ;
350+
351+ await createTemplatePage . loadPage ( ) ;
352+
353+ await createTemplatePage . nameInput . fill ( 'Missing CSV' ) ;
354+
355+ await createTemplatePage . setPdfFile (
356+ pdfUploadFixtures . withPersonalisation . pdf . filepath
357+ ) ;
358+
359+ await createTemplatePage . clickSaveAndPreviewButton ( ) ;
360+
361+ await expect ( page ) . toHaveURL ( TemplateMgmtPreviewLetterPage . urlRegexp ) ;
362+
363+ const maybeTemplateId = TemplateMgmtPreviewLetterPage . getTemplateId (
364+ page . url ( )
365+ ) ;
366+
367+ expect ( maybeTemplateId ) . not . toBeUndefined ( ) ;
368+
369+ const templateId = maybeTemplateId as string ;
370+
371+ const key = {
372+ id : templateId ,
373+ owner : user . userId ,
374+ } ;
375+
376+ templateStorageHelper . addAdHocTemplateKey ( key ) ;
377+
378+ await expect ( async ( ) => {
379+ const template = await templateStorageHelper . getTemplate ( {
380+ id : templateId ,
381+ owner : user . userId ,
382+ } ) ;
383+
384+ expect ( template . files ?. pdfTemplate ?. virusScanStatus ) . toBe ( 'PASSED' ) ;
385+ expect ( template . templateStatus ) . toBe ( 'VALIDATION_FAILED' ) ;
386+ expect ( template . personalisationParameters ) . toBeUndefined ( ) ;
387+ expect ( template . csvHeaders ) . toBeUndefined ( ) ;
388+ } ) . toPass ( { timeout : 10_000 } ) ;
389+ } ) ;
249390} ) ;
391+
392+ // TODO: Add test for parameter formatting in pdf
0 commit comments