Skip to content

Commit ac18a61

Browse files
committed
CCM-11496: unit test
1 parent 3dca95b commit ac18a61

File tree

2 files changed

+107
-12
lines changed

2 files changed

+107
-12
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import type { CascadeItem } from 'nhs-notify-backend-client';
2+
import { getCascadeTemplateIds } from '../../domain/get-cascade-template-ids';
3+
4+
describe('getCascadeTemplateIds', () => {
5+
it('should return empty array when cascade is empty', () => {
6+
const cascade: CascadeItem[] = [];
7+
const result = getCascadeTemplateIds(cascade);
8+
expect(result).toEqual([]);
9+
});
10+
11+
it('should return default template id when cascade item has only default template', () => {
12+
const cascade: CascadeItem[] = [
13+
{
14+
defaultTemplateId: 'template-1',
15+
} as CascadeItem,
16+
];
17+
const result = getCascadeTemplateIds(cascade);
18+
expect(result).toEqual(['template-1']);
19+
});
20+
21+
it('should return conditional template ids when cascade item has conditional templates', () => {
22+
const cascade: CascadeItem[] = [
23+
{
24+
conditionalTemplates: [
25+
{ templateId: 'template-1' },
26+
{ templateId: 'template-2' },
27+
],
28+
} as CascadeItem,
29+
];
30+
const result = getCascadeTemplateIds(cascade);
31+
expect(result).toEqual(['template-1', 'template-2']);
32+
});
33+
34+
it('should return both default and conditional template ids from multiple cascade items', () => {
35+
const cascade: CascadeItem[] = [
36+
{
37+
defaultTemplateId: 'template-1',
38+
} as CascadeItem,
39+
{
40+
conditionalTemplates: [
41+
{ templateId: 'template-2' },
42+
{ templateId: 'template-3' },
43+
],
44+
} as CascadeItem,
45+
];
46+
const result = getCascadeTemplateIds(cascade);
47+
expect(result).toEqual(['template-1', 'template-2', 'template-3']);
48+
});
49+
50+
it('should remove duplicate template ids', () => {
51+
const cascade: CascadeItem[] = [
52+
{
53+
defaultTemplateId: 'template-1',
54+
} as CascadeItem,
55+
{
56+
conditionalTemplates: [
57+
{ templateId: 'template-1' },
58+
{ templateId: 'template-2' },
59+
],
60+
} as CascadeItem,
61+
];
62+
const result = getCascadeTemplateIds(cascade);
63+
expect(result).toEqual(['template-1', 'template-2']);
64+
});
65+
66+
it('should filter out null default template ids', () => {
67+
const cascade: CascadeItem[] = [
68+
{
69+
defaultTemplateId: null,
70+
} as CascadeItem,
71+
{
72+
defaultTemplateId: 'template-1',
73+
} as CascadeItem,
74+
];
75+
const result = getCascadeTemplateIds(cascade);
76+
expect(result).toEqual(['template-1']);
77+
});
78+
79+
it('should handle cascade items with both conditional and default templates', () => {
80+
const cascade: CascadeItem[] = [
81+
{
82+
defaultTemplateId: 'template-1',
83+
conditionalTemplates: [{ templateId: 'template-2' }],
84+
} as CascadeItem,
85+
];
86+
const result = getCascadeTemplateIds(cascade);
87+
expect(result).toEqual(['template-1', 'template-2']);
88+
});
89+
});
Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
import type { CascadeItem } from 'nhs-notify-backend-client';
22

33
export function getCascadeTemplateIds(cascade: CascadeItem[]): string[] {
4-
return cascade
5-
.flatMap((cascadeItem) => {
6-
if (cascadeItem.conditionalTemplates) {
7-
return cascadeItem.conditionalTemplates.map(
8-
(template) => template.templateId
9-
);
4+
const templateIds: string[] = [];
5+
6+
for (const item of cascade) {
7+
// Add default template id if it exists and is not null
8+
if (item.defaultTemplateId) {
9+
templateIds.push(item.defaultTemplateId);
10+
}
11+
12+
// Add conditional template ids if they exist
13+
if (item.conditionalTemplates) {
14+
for (const conditionalTemplate of item.conditionalTemplates) {
15+
if (conditionalTemplate.templateId) {
16+
templateIds.push(conditionalTemplate.templateId);
17+
}
1018
}
19+
}
20+
}
1121

12-
return cascadeItem.defaultTemplateId;
13-
})
14-
.filter(
15-
(templateId, i, list): templateId is string =>
16-
typeof templateId === 'string' && list.indexOf(templateId) === i
17-
);
22+
// Remove duplicates and return
23+
return [...new Set(templateIds)];
1824
}

0 commit comments

Comments
 (0)