Skip to content

Commit f08a2cd

Browse files
VIA-206 MD Added code to call the eligibility API - SSM tests are failing
1 parent 107972c commit f08a2cd

File tree

12 files changed

+142
-28
lines changed

12 files changed

+142
-28
lines changed

src/_lambda/content-cache-hydrator/content-fetcher.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { VaccineTypes } from "@src/models/vaccine";
2-
import { vaccineTypeToPath } from "@src/services/content-api/constants";
2+
import {
3+
VaccineContentPaths,
4+
vaccineTypeToPath,
5+
} from "@src/services/content-api/constants";
36
import { AppConfig, configProvider } from "@src/utils/config";
47
import { logger } from "@src/utils/logger";
58
import axios, { AxiosResponse } from "axios";
@@ -12,11 +15,11 @@ const fetchContentForVaccine = async (
1215
): Promise<string> => {
1316
const config: AppConfig = await configProvider();
1417

15-
const apiEndpoint = config.CONTENT_API_ENDPOINT;
16-
const vaccinePath = vaccineTypeToPath[vaccine];
17-
const apiKey = config.CONTENT_API_KEY;
18+
const apiEndpoint: string = config.CONTENT_API_ENDPOINT;
19+
const vaccinePath: VaccineContentPaths = vaccineTypeToPath[vaccine];
20+
const apiKey: string = config.CONTENT_API_KEY;
1821

19-
const uri = `${apiEndpoint}${CONTENT_API_PATH_PREFIX}${vaccinePath}`;
22+
const uri: string = `${apiEndpoint}${CONTENT_API_PATH_PREFIX}${vaccinePath}`;
2023
let response: AxiosResponse;
2124
try {
2225
log.info("Fetching content from %s", uri);

src/app/_components/vaccine/Vaccine.test.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
import { render, screen } from "@testing-library/react";
99
import { ContentErrorTypes } from "@src/services/content-api/types";
1010
import { EligibilityStatus } from "@src/services/eligibility-api/types";
11-
import { getEligibilityForPerson } from "@src/services/eligibility-api/gateway/eligibility-reader-service";
11+
import { getEligibilityContentForPerson } from "@src/services/eligibility-api/gateway/eligibility-reader-service";
1212
import { mockStyledEligibility } from "@test-data/eligibility-api/data";
1313

1414
jest.mock("@src/services/content-api/gateway/content-reader-service");
@@ -31,7 +31,7 @@ describe("Any vaccine page", () => {
3131
(getContentForVaccine as jest.Mock).mockResolvedValue({
3232
styledVaccineContent: mockStyledContent,
3333
});
34-
(getEligibilityForPerson as jest.Mock).mockResolvedValue({
34+
(getEligibilityContentForPerson as jest.Mock).mockResolvedValue({
3535
styledEligibilityContent: mockStyledEligibility,
3636
});
3737
});
@@ -182,7 +182,7 @@ describe("Any vaccine page", () => {
182182

183183
describe("when eligible", () => {
184184
beforeEach(() => {
185-
(getEligibilityForPerson as jest.Mock).mockResolvedValue({
185+
(getEligibilityContentForPerson as jest.Mock).mockResolvedValue({
186186
eligibilityStatus: EligibilityStatus.ELIGIBLE_BOOKABLE,
187187
styledEligibilityContent: mockStyledEligibility,
188188
});
@@ -198,7 +198,7 @@ describe("Any vaccine page", () => {
198198

199199
describe("when not eligible", () => {
200200
beforeEach(() => {
201-
(getEligibilityForPerson as jest.Mock).mockResolvedValue({
201+
(getEligibilityContentForPerson as jest.Mock).mockResolvedValue({
202202
eligibilityStatus: EligibilityStatus.NOT_ELIGIBLE,
203203
styledEligibilityContent: mockStyledEligibility,
204204
});
@@ -265,7 +265,7 @@ describe("Any vaccine page", () => {
265265
(getContentForVaccine as jest.Mock).mockResolvedValue({
266266
styledVaccineContent: mockStyledContent,
267267
});
268-
(getEligibilityForPerson as jest.Mock).mockResolvedValue({
268+
(getEligibilityContentForPerson as jest.Mock).mockResolvedValue({
269269
styledEligibilityContent: mockStyledEligibility,
270270
});
271271
});

src/app/vaccines/6-in-1/page.test.tsx

Whitespace-only changes.

src/app/vaccines/covid-19/page.test.tsx

Whitespace-only changes.

src/app/vaccines/flu/page.test.tsx

Whitespace-only changes.

src/app/vaccines/menacwy/page.test.tsx

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { getEligibilityContentForPerson } from "@src/services/eligibility-api/gateway/eligibility-reader-service";
2+
import { VaccineTypes } from "@src/models/vaccine";
3+
import {
4+
EligibilityStatus,
5+
GetEligibilityForPersonResponse,
6+
} from "@src/services/eligibility-api/types";
7+
import { expect } from "@playwright/test";
8+
import { mockEligibilityResponse } from "@test-data/eligibility-api/data";
9+
10+
describe("getEligibilityContentForPerson", () => {
11+
it("return eligibility content for elderly person and RSV vaccine", async () => {
12+
const {
13+
eligibilityStatus,
14+
styledEligibilityContent,
15+
eligibilityError,
16+
}: GetEligibilityForPersonResponse = await getEligibilityContentForPerson(
17+
"5000000014",
18+
VaccineTypes.RSV,
19+
);
20+
21+
expect(eligibilityStatus).toEqual(EligibilityStatus.NOT_ELIGIBLE);
22+
expect(styledEligibilityContent).toEqual(mockEligibilityResponse);
23+
expect(eligibilityError).toBeUndefined();
24+
});
25+
});
Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,47 @@
11
import { VaccineTypes } from "@src/models/vaccine";
2-
import {
3-
EligibilityStatus,
4-
GetEligibilityForPersonResponse,
5-
} from "@src/services/eligibility-api/types";
2+
import { GetEligibilityForPersonResponse } from "@src/services/eligibility-api/types";
3+
import { AppConfig, configProvider } from "@src/utils/config";
4+
import axios, { AxiosResponse } from "axios";
5+
import { logger } from "@src/utils/logger";
66

7-
const getEligibilityForPerson = async (
7+
const log = logger.child({ module: "content-fetcher" });
8+
const ELIGIBILITY_API_PATH_PREFIX = "/patient-check/";
9+
10+
const getEligibilityContentForPerson = async (
811
nhsNumber: string, // eslint-disable-line @typescript-eslint/no-unused-vars
912
vaccineType: VaccineTypes, // eslint-disable-line @typescript-eslint/no-unused-vars
1013
): Promise<GetEligibilityForPersonResponse> => {
11-
const styledEligibilityContent = {
12-
heading: "dummy heading",
13-
content: "dummy content",
14-
};
14+
const config: AppConfig = await configProvider();
15+
16+
const apiEndpoint: string = config.ELIGIBILITY_API_ENDPOINT;
17+
const apiKey: string = config.ELIGIBILITY_API_KEY;
1518

16-
return {
17-
eligibilityStatus: EligibilityStatus.NOT_ELIGIBLE,
18-
styledEligibilityContent,
19-
eligibilityError: undefined,
20-
};
19+
const uri: string = `${apiEndpoint}${ELIGIBILITY_API_PATH_PREFIX}/${nhsNumber}`;
20+
let response: AxiosResponse;
21+
try {
22+
log.info("Fetching content from %s", uri);
23+
response = await axios.get(uri, {
24+
headers: {
25+
accept: "application/json",
26+
apikey: apiKey,
27+
},
28+
});
29+
log.info("Successfully fetched content from %s", uri);
30+
return response.data;
31+
} catch (error) {
32+
log.error(`Error in fetching ${uri}: ${error}`);
33+
throw error;
34+
}
35+
// const styledEligibilityContent = {
36+
// heading: "dummy heading",
37+
// content: "dummy content",
38+
// };
39+
//
40+
// return {
41+
// eligibilityStatus: EligibilityStatus.NOT_ELIGIBLE,
42+
// styledEligibilityContent,
43+
// eligibilityError: undefined,
44+
// };
2145
};
2246

23-
export { getEligibilityForPerson };
47+
export { getEligibilityContentForPerson };

src/services/eligibility-api/types.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,29 @@ export type StyledEligibilityContent = {
2222
heading: string;
2323
content: string;
2424
};
25+
26+
// Downstream API
27+
export type EligibilityApiResponse = {
28+
responseId: string;
29+
meta: LastUpdated;
30+
processedSuggestions: ProcessedSuggestion[];
31+
};
32+
33+
type LastUpdated = {
34+
lastUpdated: string;
35+
};
36+
37+
type ProcessedSuggestion = {
38+
condition: string;
39+
status: Status;
40+
statusText: string;
41+
eligibilityCohorts: EligibilityCohort[];
42+
};
43+
44+
type Status = "NotEligible" | "NotActionable" | "Actionable";
45+
46+
type EligibilityCohort = {
47+
cohortCode: string;
48+
cohortText: string;
49+
cohortStatus: string;
50+
};

src/utils/config.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { configProvider } from "./config";
1+
import { AppConfig, configProvider } from "./config";
22
import getSSMParam from "@src/utils/get-ssm-param";
33

44
jest.mock("@src/utils/get-ssm-param");
@@ -19,7 +19,7 @@ describe("configProvider", () => {
1919
"api-key",
2020
);
2121

22-
const config = await configProvider();
22+
const config: AppConfig = await configProvider();
2323

2424
expect(config).toMatchObject({
2525
CONTENT_API_ENDPOINT: "api-endpoint",

0 commit comments

Comments
 (0)