@@ -6,13 +6,17 @@ import {
66 getRemainingAccessibleFormats ,
77 getRemainingLanguages ,
88 updateCascadeGroupOverrides ,
9+ buildCascadeGroupsForItem ,
10+ getConditionalTemplatesForItem ,
911 type ConditionalTemplate ,
12+ type MessagePlanTemplates ,
1013} from '@utils/routing-utils' ;
1114import type {
1215 CascadeItem ,
1316 Language ,
1417 LetterType ,
1518 RoutingConfig ,
19+ TemplateDto ,
1620} from 'nhs-notify-backend-client' ;
1721
1822const baseConfig : RoutingConfig = {
@@ -257,10 +261,41 @@ describe('removeTemplatesFromCascadeItem', () => {
257261 removeTemplatesFromCascadeItem ( cascadeItem , [ 'template-1' , 'template-2' ] ) ;
258262
259263 expect ( cascadeItem . defaultTemplateId ) . toBe ( originalDefaultId ) ;
260- expect ( cascadeItem . conditionalTemplates ?. length ) . toBe (
261- originalConditionalLength
264+ expect ( cascadeItem . conditionalTemplates ) . toHaveLength (
265+ originalConditionalLength !
262266 ) ;
263267 } ) ;
268+
269+ it ( 'should update cascadeGroups when removing all conditional templates' , ( ) => {
270+ const cascadeItem : CascadeItem = {
271+ cascadeGroups : [ 'standard' , 'translations' ] ,
272+ channel : 'LETTER' ,
273+ channelType : 'primary' ,
274+ defaultTemplateId : 'standard-template' ,
275+ conditionalTemplates : [ { templateId : 'template-1' , language : 'fr' } ] ,
276+ } ;
277+
278+ const result = removeTemplatesFromCascadeItem ( cascadeItem , [ 'template-1' ] ) ;
279+
280+ expect ( result . cascadeGroups ) . toEqual ( [ 'standard' ] ) ;
281+ } ) ;
282+
283+ it ( 'should update cascadeGroups when removing some but not all conditional templates' , ( ) => {
284+ const cascadeItem : CascadeItem = {
285+ cascadeGroups : [ 'standard' , 'accessible' , 'translations' ] ,
286+ channel : 'LETTER' ,
287+ channelType : 'primary' ,
288+ defaultTemplateId : 'standard-template' ,
289+ conditionalTemplates : [
290+ { templateId : 'template-1' , language : 'fr' } ,
291+ { templateId : 'template-2' , accessibleFormat : 'q4' } ,
292+ ] ,
293+ } ;
294+
295+ const result = removeTemplatesFromCascadeItem ( cascadeItem , [ 'template-1' ] ) ;
296+
297+ expect ( result . cascadeGroups ) . toEqual ( [ 'standard' , 'accessible' ] ) ;
298+ } ) ;
264299} ) ;
265300
266301describe ( 'getConditionalTemplatesForItem' , ( ) => {
@@ -377,6 +412,100 @@ describe('getConditionalTemplatesForItem', () => {
377412 } ) ;
378413} ) ;
379414
415+ describe ( 'buildCascadeGroupsForItem' , ( ) => {
416+ it ( 'should return only standard group when no conditional templates' , ( ) => {
417+ const cascadeItem : CascadeItem = {
418+ cascadeGroups : [ 'standard' ] ,
419+ channel : 'EMAIL' ,
420+ channelType : 'primary' ,
421+ defaultTemplateId : 'template-1' ,
422+ } ;
423+
424+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [ 'standard' ] ) ;
425+ } ) ;
426+
427+ it ( 'should return standard and accessible groups when accessible format present' , ( ) => {
428+ const cascadeItem : CascadeItem = {
429+ cascadeGroups : [ 'standard' ] ,
430+ channel : 'LETTER' ,
431+ channelType : 'primary' ,
432+ defaultTemplateId : 'template-1' ,
433+ conditionalTemplates : [
434+ { templateId : 'template-2' , accessibleFormat : 'q4' } ,
435+ ] ,
436+ } ;
437+
438+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [
439+ 'standard' ,
440+ 'accessible' ,
441+ ] ) ;
442+ } ) ;
443+
444+ it ( 'should return standard and translations groups when language present' , ( ) => {
445+ const cascadeItem : CascadeItem = {
446+ cascadeGroups : [ 'standard' ] ,
447+ channel : 'LETTER' ,
448+ channelType : 'primary' ,
449+ defaultTemplateId : 'template-1' ,
450+ conditionalTemplates : [ { templateId : 'template-2' , language : 'fr' } ] ,
451+ } ;
452+
453+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [
454+ 'standard' ,
455+ 'translations' ,
456+ ] ) ;
457+ } ) ;
458+
459+ it ( 'should return all groups when both accessible format and language present' , ( ) => {
460+ const cascadeItem : CascadeItem = {
461+ cascadeGroups : [ 'standard' ] ,
462+ channel : 'LETTER' ,
463+ channelType : 'primary' ,
464+ defaultTemplateId : 'template-1' ,
465+ conditionalTemplates : [
466+ { templateId : 'template-2' , accessibleFormat : 'q4' } ,
467+ { templateId : 'template-3' , language : 'fr' } ,
468+ ] ,
469+ } ;
470+
471+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [
472+ 'standard' ,
473+ 'accessible' ,
474+ 'translations' ,
475+ ] ) ;
476+ } ) ;
477+
478+ it ( 'should return only standard group when conditional templates have missing templateIds' , ( ) => {
479+ const cascadeItem : CascadeItem = {
480+ cascadeGroups : [ 'standard' ] ,
481+ channel : 'LETTER' ,
482+ channelType : 'primary' ,
483+ defaultTemplateId : 'template-1' ,
484+ conditionalTemplates : [
485+ { templateId : null , accessibleFormat : 'q4' } ,
486+ { templateId : 'template-2' , language : 'fr' } ,
487+ ] ,
488+ } ;
489+
490+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [
491+ 'standard' ,
492+ 'translations' ,
493+ ] ) ;
494+ } ) ;
495+
496+ it ( 'should return only standard when conditional templates array is empty' , ( ) => {
497+ const cascadeItem : CascadeItem = {
498+ cascadeGroups : [ 'standard' ] ,
499+ channel : 'LETTER' ,
500+ channelType : 'primary' ,
501+ defaultTemplateId : 'template-1' ,
502+ conditionalTemplates : [ ] ,
503+ } ;
504+
505+ expect ( buildCascadeGroupsForItem ( cascadeItem ) ) . toEqual ( [ 'standard' ] ) ;
506+ } ) ;
507+ } ) ;
508+
380509describe ( 'getRemainingAccessibleFormats' , ( ) => {
381510 it ( 'should collect all unique accessible format types' , ( ) => {
382511 const cascade : CascadeItem [ ] = [
0 commit comments