Skip to content

Commit a1e4aa3

Browse files
VIA-629 SB $ EO Pass vaccine type to the NBS SSO redirector, because we need to be able to set the NBS campaign depending on type.
1 parent b0aa4ef commit a1e4aa3

23 files changed

+98
-73
lines changed

src/_lambda/content-cache-hydrator/handler.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ jest.mock("@src/_lambda/content-cache-hydrator/content-change-detector");
2222
jest.mock("@src/_lambda/content-cache-hydrator/invalidate-cache");
2323
jest.mock("@src/services/content-api/parsers/content-filter-service");
2424
jest.mock("@src/services/content-api/parsers/content-styling-service");
25-
jest.mock("@src/services/nbs/nbs-service", () => ({
26-
buildNbsUrlWithQueryParams: jest.fn(),
27-
}));
25+
jest.mock("@src/services/nbs/nbs-service", () => ({}));
2826

2927
jest.mock("@src/utils/requestContext", () => ({
3028
asyncLocalStorage: {

src/app/_components/eligibility/Eligibility.test.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Eligibility } from "@src/app/_components/eligibility/Eligibility";
2+
import { VaccineType } from "@src/models/vaccine";
23
import { Cohort, Heading, Introduction } from "@src/services/eligibility-api/types";
34
import { eligibilityContentBuilder, summaryContentBuilder } from "@test-data/eligibility-api/builders";
45
import { render, screen } from "@testing-library/react";
@@ -16,6 +17,7 @@ describe("Eligibility", () => {
1617
it("should show the care card if content summary is present", async () => {
1718
render(
1819
Eligibility({
20+
vaccineType: VaccineType.RSV,
1921
eligibilityContent: eligibilityContentBuilder().build(),
2022
}),
2123
);
@@ -27,6 +29,7 @@ describe("Eligibility", () => {
2729
it("should not show the care card if content summary is undefined", async () => {
2830
render(
2931
Eligibility({
32+
vaccineType: VaccineType.RSV,
3033
eligibilityContent: eligibilityContentBuilder().withSummary(undefined).build(),
3134
}),
3235
);
@@ -40,6 +43,7 @@ describe("Eligibility", () => {
4043
it("should show the care card", async () => {
4144
render(
4245
Eligibility({
46+
vaccineType: VaccineType.RSV,
4347
eligibilityContent: eligibilityContentBuilder().build(),
4448
}),
4549
);
@@ -56,6 +60,7 @@ describe("Eligibility", () => {
5660

5761
render(
5862
Eligibility({
63+
vaccineType: VaccineType.RSV,
5964
eligibilityContent: eligibilityContent,
6065
}),
6166
);
@@ -72,6 +77,7 @@ describe("Eligibility", () => {
7277

7378
render(
7479
Eligibility({
80+
vaccineType: VaccineType.RSV,
7581
eligibilityContent: eligibilityContent,
7682
}),
7783
);
@@ -88,6 +94,7 @@ describe("Eligibility", () => {
8894

8995
render(
9096
Eligibility({
97+
vaccineType: VaccineType.RSV,
9198
eligibilityContent: eligibilityContent,
9299
}),
93100
);
@@ -102,6 +109,7 @@ describe("Eligibility", () => {
102109
it("should not show the care card if summary is undefined", async () => {
103110
render(
104111
Eligibility({
112+
vaccineType: VaccineType.RSV,
105113
eligibilityContent: eligibilityContentBuilder().withSummary(undefined).build(),
106114
}),
107115
);
@@ -111,14 +119,24 @@ describe("Eligibility", () => {
111119
});
112120

113121
it("should display EligibilityActions component", () => {
114-
render(Eligibility({ eligibilityContent: eligibilityContentBuilder().build() }));
122+
render(
123+
Eligibility({
124+
vaccineType: VaccineType.RSV,
125+
eligibilityContent: eligibilityContentBuilder().build(),
126+
}),
127+
);
115128
const actions: HTMLElement = screen.getByText("Test Eligibility Actions Component");
116129

117130
expect(actions).toBeVisible();
118131
});
119132

120133
it("should display SuitabilityRules component", () => {
121-
render(Eligibility({ eligibilityContent: eligibilityContentBuilder().build() }));
134+
render(
135+
Eligibility({
136+
vaccineType: VaccineType.RSV,
137+
eligibilityContent: eligibilityContentBuilder().build(),
138+
}),
139+
);
122140
const actions = screen.getByText("Test Eligibility SuitabilityRules Component");
123141

124142
expect(actions).toBeVisible();

src/app/_components/eligibility/Eligibility.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { EligibilityActions } from "@src/app/_components/eligibility/EligibilityActions";
22
import { SuitabilityRules } from "@src/app/_components/eligibility/SuitabilityRules";
33
import NonUrgentCareCard from "@src/app/_components/nhs-frontend/NonUrgentCareCard";
4+
import { VaccineType } from "@src/models/vaccine";
45
import { EligibilityContent } from "@src/services/eligibility-api/types";
56
import React, { JSX } from "react";
67

78
interface EligibilityProps {
89
eligibilityContent: EligibilityContent;
10+
vaccineType: VaccineType;
911
}
1012

11-
const Eligibility = ({ eligibilityContent }: EligibilityProps): JSX.Element => {
13+
const Eligibility = ({ eligibilityContent, vaccineType }: EligibilityProps): JSX.Element => {
1214
return (
1315
<div data-testid="Eligibility">
1416
{eligibilityContent?.summary && (
@@ -27,7 +29,7 @@ const Eligibility = ({ eligibilityContent }: EligibilityProps): JSX.Element => {
2729
/>
2830
)}
2931
<SuitabilityRules suitabilityRules={eligibilityContent.suitabilityRules} />
30-
<EligibilityActions actions={eligibilityContent.actions} />
32+
<EligibilityActions actions={eligibilityContent.actions} vaccineType={vaccineType} />
3133
</div>
3234
);
3335
};

src/app/_components/eligibility/EligibilityActions.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { VaccineType } from "@src/models/vaccine";
12
import { ActionDisplayType, ButtonUrl, Label } from "@src/services/eligibility-api/types";
23
import { actionBuilder, buttonBuilder } from "@test-data/eligibility-api/builders";
34
import { render, screen, within } from "@testing-library/react";
@@ -21,6 +22,7 @@ describe("EligibilityActions", () => {
2122
render(
2223
EligibilityActions({
2324
actions: [actionBuilder().withType(ActionDisplayType.infotext).andContent("Test Content").build()],
25+
vaccineType: VaccineType.RSV,
2426
}),
2527
);
2628

@@ -34,6 +36,7 @@ describe("EligibilityActions", () => {
3436
actionBuilder().withType(ActionDisplayType.infotext).andContent("Test Content 1").build(),
3537
actionBuilder().withType(ActionDisplayType.infotext).andContent("Test Content 2").build(),
3638
],
39+
vaccineType: VaccineType.RSV,
3740
}),
3841
);
3942

@@ -55,6 +58,7 @@ describe("EligibilityActions", () => {
5558
.andDelineator(false)
5659
.build(),
5760
],
61+
vaccineType: VaccineType.RSV,
5862
}),
5963
);
6064

@@ -71,6 +75,7 @@ describe("EligibilityActions", () => {
7175
render(
7276
EligibilityActions({
7377
actions: [actionBuilder().withType(ActionDisplayType.card).andContent("Test Content").build()],
78+
vaccineType: VaccineType.RSV,
7479
}),
7580
);
7681

@@ -84,6 +89,7 @@ describe("EligibilityActions", () => {
8489
actionBuilder().withType(ActionDisplayType.card).andContent("Test Content 1").build(),
8590
actionBuilder().withType(ActionDisplayType.card).andContent("Test Content 2").build(),
8691
],
92+
vaccineType: VaccineType.RSV,
8793
}),
8894
);
8995

@@ -101,6 +107,7 @@ describe("EligibilityActions", () => {
101107
.build(),
102108
actionBuilder().withType(ActionDisplayType.card).andContent("Test Content 2").andDelineator(true).build(),
103109
],
110+
vaccineType: VaccineType.RSV,
104111
}),
105112
);
106113

@@ -119,6 +126,7 @@ describe("EligibilityActions", () => {
119126
actions: [
120127
actionBuilder().withType(ActionDisplayType.buttonWithCard).andContent("Test Auth Action Content").build(),
121128
],
129+
vaccineType: VaccineType.RSV,
122130
}),
123131
);
124132

@@ -129,6 +137,7 @@ describe("EligibilityActions", () => {
129137
render(
130138
EligibilityActions({
131139
actions: [actionBuilder().withType(ActionDisplayType.buttonWithCard).andContent("Test Content").build()],
140+
vaccineType: VaccineType.RSV,
132141
}),
133142
);
134143

@@ -144,6 +153,7 @@ describe("EligibilityActions", () => {
144153
actionBuilder().withType(ActionDisplayType.buttonWithCard).andContent("Test Content 1").build(),
145154
actionBuilder().withType(ActionDisplayType.buttonWithCard).andContent("Test Content 2").build(),
146155
],
156+
vaccineType: VaccineType.RSV,
147157
}),
148158
);
149159

@@ -154,6 +164,7 @@ describe("EligibilityActions", () => {
154164
render(
155165
EligibilityActions({
156166
actions: [actionBuilder().withType(ActionDisplayType.buttonWithCard).andContent("").build()],
167+
vaccineType: VaccineType.RSV,
157168
}),
158169
);
159170

@@ -179,6 +190,7 @@ describe("EligibilityActions", () => {
179190
.andDelineator(false)
180191
.build(),
181192
],
193+
vaccineType: VaccineType.RSV,
182194
}),
183195
);
184196

@@ -194,6 +206,7 @@ describe("EligibilityActions", () => {
194206
actions: [
195207
actionBuilder().withType(ActionDisplayType.buttonWithInfo).andContent("Test Auth Action Content").build(),
196208
],
209+
vaccineType: VaccineType.RSV,
197210
}),
198211
);
199212

@@ -204,6 +217,7 @@ describe("EligibilityActions", () => {
204217
render(
205218
EligibilityActions({
206219
actions: [actionBuilder().withType(ActionDisplayType.buttonWithInfo).andContent("Test Content").build()],
220+
vaccineType: VaccineType.RSV,
207221
}),
208222
);
209223

@@ -219,6 +233,7 @@ describe("EligibilityActions", () => {
219233
actionBuilder().withType(ActionDisplayType.buttonWithInfo).andContent("Test Content 1").build(),
220234
actionBuilder().withType(ActionDisplayType.buttonWithInfo).andContent("Test Content 2").build(),
221235
],
236+
vaccineType: VaccineType.RSV,
222237
}),
223238
);
224239

@@ -229,6 +244,7 @@ describe("EligibilityActions", () => {
229244
render(
230245
EligibilityActions({
231246
actions: [actionBuilder().withType(ActionDisplayType.buttonWithInfo).andContent("").build()],
247+
vaccineType: VaccineType.RSV,
232248
}),
233249
);
234250

@@ -254,6 +270,7 @@ describe("EligibilityActions", () => {
254270
.andDelineator(false)
255271
.build(),
256272
],
273+
vaccineType: VaccineType.RSV,
257274
}),
258275
);
259276

@@ -272,6 +289,7 @@ describe("EligibilityActions", () => {
272289
.andContent("Test Auth Action Content")
273290
.build(),
274291
],
292+
vaccineType: VaccineType.RSV,
275293
}),
276294
);
277295

@@ -293,6 +311,7 @@ describe("EligibilityActions", () => {
293311
)
294312
.build(),
295313
],
314+
vaccineType: VaccineType.RSV,
296315
}),
297316
);
298317

@@ -308,6 +327,7 @@ describe("EligibilityActions", () => {
308327
actionBuilder().withType(ActionDisplayType.actionLinkWithInfo).andContent("Test Content 1").build(),
309328
actionBuilder().withType(ActionDisplayType.actionLinkWithInfo).andContent("Test Content 2").build(),
310329
],
330+
vaccineType: VaccineType.RSV,
311331
}),
312332
);
313333

@@ -318,6 +338,7 @@ describe("EligibilityActions", () => {
318338
render(
319339
EligibilityActions({
320340
actions: [actionBuilder().withType(ActionDisplayType.actionLinkWithInfo).andContent("").build()],
341+
vaccineType: VaccineType.RSV,
321342
}),
322343
);
323344

@@ -343,6 +364,7 @@ describe("EligibilityActions", () => {
343364
.andDelineator(false)
344365
.build(),
345366
],
367+
vaccineType: VaccineType.RSV,
346368
}),
347369
);
348370

src/app/_components/eligibility/EligibilityActions.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import { MarkdownWithStyling } from "@src/app/_components/markdown/MarkdownWithStyling";
22
import { NBSBookingActionForBaseUrl } from "@src/app/_components/nbs/NBSBookingAction";
33
import { BasicCard } from "@src/app/_components/nhs-frontend/BasicCard";
4+
import { VaccineType } from "@src/models/vaccine";
45
import { Action, ActionDisplayType, ButtonUrl, Content, Label } from "@src/services/eligibility-api/types";
56
import { ActionLink } from "nhsuk-react-components";
67
import React, { JSX } from "react";
78

89
interface EligibilityActionProps {
910
actions: Action[];
11+
vaccineType: VaccineType;
1012
}
1113

12-
const EligibilityActions = ({ actions }: EligibilityActionProps): (JSX.Element | undefined)[] => {
14+
const EligibilityActions = ({ actions, vaccineType }: EligibilityActionProps): (JSX.Element | undefined)[] => {
1315
return actions.map((action: Action) => {
1416
switch (action.type) {
1517
case ActionDisplayType.infotext: {
@@ -22,6 +24,7 @@ const EligibilityActions = ({ actions }: EligibilityActionProps): (JSX.Element |
2224
const card = action.content && <BasicCard content={action.content} delineator={false} />;
2325
const button = action.button && (
2426
<Button
27+
vaccineType={vaccineType}
2528
url={action.button.url}
2629
label={action.button.label}
2730
renderAs={"button"}
@@ -40,6 +43,7 @@ const EligibilityActions = ({ actions }: EligibilityActionProps): (JSX.Element |
4043
const info = action.content && <InfoText content={action.content} delineator={false} />;
4144
const button = action.button && (
4245
<Button
46+
vaccineType={vaccineType}
4347
url={action.button.url}
4448
label={action.button.label}
4549
renderAs={"button"}
@@ -106,15 +110,17 @@ const Card = ({ content, delineator }: CardProps): JSX.Element => {
106110
};
107111

108112
type ButtonProps = {
113+
vaccineType: VaccineType;
109114
url: ButtonUrl;
110115
label: Label;
111116
renderAs: "anchor" | "button" | "actionLink";
112117
delineator: boolean;
113118
};
114119

115-
const Button = ({ url, label, renderAs, delineator }: ButtonProps): JSX.Element => {
120+
const Button = ({ vaccineType, url, label, renderAs, delineator }: ButtonProps): JSX.Element => {
116121
return (
117122
<NBSBookingActionForBaseUrl
123+
vaccineType={vaccineType}
118124
url={url.href}
119125
displayText={label}
120126
renderAs={renderAs}

src/app/_components/eligibility/EligibilityVaccinePageContent.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ const EligibilityVaccinePageContent = (props: {
1515
!props.eligibilityForPerson.eligibilityError &&
1616
props.eligibilityForPerson.eligibility?.content &&
1717
props.eligibilityForPerson.eligibility?.status && (
18-
<EligibilityComponent eligibilityContent={props.eligibilityForPerson.eligibility.content} />
18+
<EligibilityComponent
19+
eligibilityContent={props.eligibilityForPerson.eligibility.content}
20+
vaccineType={props.vaccineType}
21+
/>
1922
)}
2023
{/* Fallback eligibility section for RSV */}
2124
{props.vaccineType === VaccineType.RSV && props.eligibilityForPerson.eligibilityError && (

src/app/_components/nbs/NBSBookingAction.test.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ describe("NBSBookingAction", () => {
7878
const renderAndClick = (renderAs: "anchor" | "button" | "actionLink", whichElement: number) => {
7979
render(
8080
<NBSBookingActionForBaseUrl
81+
vaccineType={VaccineType.COVID_19}
8182
url={url.href}
8283
displayText="test"
8384
renderAs={renderAs}
@@ -98,7 +99,10 @@ describe("NBSBookingAction", () => {
9899
renderAndClick(type, index);
99100

100101
if (shouldCall) {
101-
expect(window.open).toHaveBeenCalledWith(`/api/sso-to-nbs?redirectTarget=${url.href}`, expectedTarget);
102+
expect(window.open).toHaveBeenCalledWith(
103+
`/api/sso-to-nbs?redirectTarget=${url.href}&vaccine=covid-19-vaccine`,
104+
expectedTarget,
105+
);
102106
} else {
103107
expect(window.open).not.toHaveBeenCalled();
104108
}

0 commit comments

Comments
 (0)