Skip to content

Commit 24f1357

Browse files
committed
Refactor lambda test fixture creation to reduce repeat
1 parent 76d2eff commit 24f1357

8 files changed

Lines changed: 137 additions & 205 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import type {
2+
CallbackTarget,
3+
Channel,
4+
ChannelStatus,
5+
ChannelStatusSubscriptionConfiguration,
6+
ClientSubscriptionConfiguration,
7+
MessageStatus,
8+
MessageStatusSubscriptionConfiguration,
9+
SupplierStatus,
10+
} from "@nhs-notify-client-callbacks/models";
11+
12+
export const DEFAULT_TARGET_ID = "00000000-0000-4000-8000-000000000001";
13+
14+
type TargetOverrides = Partial<CallbackTarget> & {
15+
apiKey?: Partial<CallbackTarget["apiKey"]>;
16+
};
17+
18+
export const createTarget = (
19+
overrides: TargetOverrides = {},
20+
): CallbackTarget => ({
21+
targetId: DEFAULT_TARGET_ID,
22+
type: "API",
23+
invocationEndpoint: "https://example.com",
24+
invocationMethod: "POST",
25+
invocationRateLimit: 10,
26+
apiKey: {
27+
headerName: "x-api-key",
28+
headerValue: "secret",
29+
...overrides.apiKey,
30+
},
31+
...overrides,
32+
});
33+
34+
export const createMessageStatusSubscription = (
35+
statuses: MessageStatus[] = ["DELIVERED"],
36+
overrides: Partial<MessageStatusSubscriptionConfiguration> = {},
37+
): MessageStatusSubscriptionConfiguration => ({
38+
subscriptionId: "00000000-0000-0000-0000-000000000001",
39+
subscriptionType: "MessageStatus",
40+
messageStatuses: statuses,
41+
targetIds: [DEFAULT_TARGET_ID],
42+
...overrides,
43+
});
44+
45+
export const createChannelStatusSubscription = (
46+
channelStatuses: ChannelStatus[] = ["DELIVERED"],
47+
supplierStatuses: SupplierStatus[] = ["delivered"],
48+
channelType: Channel = "EMAIL",
49+
overrides: Partial<ChannelStatusSubscriptionConfiguration> = {},
50+
): ChannelStatusSubscriptionConfiguration => ({
51+
subscriptionId: "00000000-0000-0000-0000-000000000002",
52+
subscriptionType: "ChannelStatus",
53+
channelType,
54+
channelStatuses,
55+
supplierStatuses,
56+
targetIds: [DEFAULT_TARGET_ID],
57+
...overrides,
58+
});
59+
60+
export const createClientSubscriptionConfig = (
61+
clientId = "client-1",
62+
overrides: Partial<ClientSubscriptionConfiguration> = {},
63+
): ClientSubscriptionConfiguration => ({
64+
clientId,
65+
subscriptions: [],
66+
targets: [],
67+
...overrides,
68+
});
69+
70+
export const createMessageStatusConfig = (
71+
statuses: MessageStatus[] = ["DELIVERED"],
72+
clientId = "client-1",
73+
): ClientSubscriptionConfiguration =>
74+
createClientSubscriptionConfig(clientId, {
75+
subscriptions: [createMessageStatusSubscription(statuses)],
76+
targets: [createTarget()],
77+
});
78+
79+
export const createChannelStatusConfig = (
80+
channelStatuses: ChannelStatus[] = ["DELIVERED"],
81+
supplierStatuses: SupplierStatus[] = ["delivered"],
82+
clientId = "client-1",
83+
channelType: Channel = "EMAIL",
84+
): ClientSubscriptionConfiguration =>
85+
createClientSubscriptionConfig(clientId, {
86+
subscriptions: [
87+
createChannelStatusSubscription(
88+
channelStatuses,
89+
supplierStatuses,
90+
channelType,
91+
),
92+
],
93+
targets: [createTarget()],
94+
});

lambdas/client-transform-filter-lambda/src/__tests__/services/config-cache.test.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import type { ClientSubscriptionConfiguration } from "@nhs-notify-client-callbacks/models";
2+
import {
3+
createClientSubscriptionConfig,
4+
createMessageStatusSubscription,
5+
} from "__tests__/helpers/client-subscription-fixtures";
26
import { ConfigCache } from "services/config-cache";
37

4-
const createConfig = (): ClientSubscriptionConfiguration => ({
5-
clientId: "client-1",
6-
subscriptions: [
7-
{
8-
subscriptionId: "00000000-0000-0000-0000-000000000001",
9-
subscriptionType: "MessageStatus" as const,
10-
targetIds: [],
11-
messageStatuses: ["DELIVERED"],
12-
},
13-
],
14-
targets: [],
15-
});
8+
const createConfig = (): ClientSubscriptionConfiguration =>
9+
createClientSubscriptionConfig("client-1", {
10+
subscriptions: [
11+
createMessageStatusSubscription(["DELIVERED"], { targetIds: [] }),
12+
],
13+
});
1614

1715
describe("ConfigCache", () => {
1816
it("stores and retrieves configuration", () => {

lambdas/client-transform-filter-lambda/src/__tests__/services/config-loader.test.ts

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { GetObjectCommand, NoSuchKey, S3Client } from "@aws-sdk/client-s3";
2+
import { createMessageStatusConfig } from "__tests__/helpers/client-subscription-fixtures";
23
import { ConfigCache } from "services/config-cache";
34
import { ConfigLoader } from "services/config-loader";
45
import { ConfigValidationError } from "services/validators/config-validator";
@@ -16,27 +17,8 @@ const mockBody = (json: string) => ({
1617
transformToString: jest.fn().mockResolvedValue(json),
1718
});
1819

19-
const createValidConfig = (clientId: string) => ({
20-
clientId,
21-
subscriptions: [
22-
{
23-
subscriptionId: "00000000-0000-0000-0000-000000000001",
24-
subscriptionType: "MessageStatus",
25-
messageStatuses: ["DELIVERED"],
26-
targetIds: ["00000000-0000-4000-8000-000000000001"],
27-
},
28-
],
29-
targets: [
30-
{
31-
targetId: "00000000-0000-4000-8000-000000000001",
32-
type: "API",
33-
invocationEndpoint: "https://example.com/webhook",
34-
invocationMethod: "POST",
35-
invocationRateLimit: 10,
36-
apiKey: { headerName: "x-api-key", headerValue: "secret" },
37-
},
38-
],
39-
});
20+
const createValidConfig = (clientId: string) =>
21+
createMessageStatusConfig(["DELIVERED"], clientId);
4022

4123
const createLoader = (send: jest.Mock) =>
4224
new ConfigLoader({

lambdas/client-transform-filter-lambda/src/__tests__/services/config-update.component.test.ts

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,10 @@
11
import { S3Client } from "@aws-sdk/client-s3";
2+
import { createMessageStatusConfig } from "__tests__/helpers/client-subscription-fixtures";
23
import { ConfigCache } from "services/config-cache";
34
import { ConfigLoader } from "services/config-loader";
45

5-
const makeConfig = (messageStatuses: string[]) => ({
6-
clientId: "client-1",
7-
subscriptions: [
8-
{
9-
subscriptionId: "00000000-0000-0000-0000-000000000001",
10-
subscriptionType: "MessageStatus",
11-
messageStatuses,
12-
targetIds: ["00000000-0000-4000-8000-000000000001"],
13-
},
14-
],
15-
targets: [
16-
{
17-
targetId: "00000000-0000-4000-8000-000000000001",
18-
type: "API",
19-
invocationEndpoint: "https://example.com",
20-
invocationMethod: "POST",
21-
invocationRateLimit: 10,
22-
apiKey: { headerName: "x-api-key", headerValue: "secret" },
23-
},
24-
],
25-
});
6+
const makeConfig = (messageStatuses: string[]) =>
7+
createMessageStatusConfig(messageStatuses as never);
268

279
describe("config update component", () => {
2810
it("reloads configuration after cache expiry", async () => {

lambdas/client-transform-filter-lambda/src/__tests__/services/filters/channel-status-filter.test.ts

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import type {
2-
ChannelStatus,
32
ChannelStatusData,
4-
ClientSubscriptionConfiguration,
53
StatusPublishEvent,
6-
SupplierStatus,
74
} from "@nhs-notify-client-callbacks/models";
85
import { EventTypes } from "@nhs-notify-client-callbacks/models";
6+
import { createChannelStatusConfig } from "__tests__/helpers/client-subscription-fixtures";
97
import { matchesChannelStatusSubscription } from "services/filters/channel-status-filter";
108

119
jest.mock("services/logger", () => ({
@@ -34,34 +32,6 @@ const createBaseEvent = <T>(
3432
data: notifyData,
3533
});
3634

37-
const createChannelStatusConfig = (
38-
channelStatuses: ChannelStatus[],
39-
supplierStatuses: SupplierStatus[],
40-
clientId = "client-1",
41-
): ClientSubscriptionConfiguration => ({
42-
clientId,
43-
subscriptions: [
44-
{
45-
subscriptionId: "00000000-0000-0000-0000-000000000001",
46-
subscriptionType: "ChannelStatus",
47-
channelType: "EMAIL",
48-
channelStatuses,
49-
supplierStatuses,
50-
targetIds: ["00000000-0000-4000-8000-000000000001"],
51-
},
52-
],
53-
targets: [
54-
{
55-
targetId: "00000000-0000-4000-8000-000000000001",
56-
type: "API",
57-
invocationEndpoint: "https://example.com",
58-
invocationMethod: "POST",
59-
invocationRateLimit: 10,
60-
apiKey: { headerName: "x-api-key", headerValue: "secret" },
61-
},
62-
],
63-
});
64-
6535
const createChannelStatusData = (
6636
overrides: Partial<ChannelStatusData> = {},
6737
): ChannelStatusData => ({

lambdas/client-transform-filter-lambda/src/__tests__/services/filters/message-status-filter.test.ts

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import type {
2-
ClientSubscriptionConfiguration,
3-
MessageStatus,
42
MessageStatusData,
53
StatusPublishEvent,
64
} from "@nhs-notify-client-callbacks/models";
75
import { EventTypes } from "@nhs-notify-client-callbacks/models";
6+
import { createMessageStatusConfig } from "__tests__/helpers/client-subscription-fixtures";
87
import { matchesMessageStatusSubscription } from "services/filters/message-status-filter";
98

109
jest.mock("services/logger", () => ({
@@ -33,31 +32,6 @@ const createBaseEvent = <T>(
3332
data: notifyData,
3433
});
3534

36-
const createMessageStatusConfig = (
37-
statuses: MessageStatus[],
38-
clientId = "client-1",
39-
): ClientSubscriptionConfiguration => ({
40-
clientId,
41-
subscriptions: [
42-
{
43-
subscriptionId: "00000000-0000-0000-0000-000000000001",
44-
subscriptionType: "MessageStatus",
45-
messageStatuses: statuses,
46-
targetIds: ["00000000-0000-4000-8000-000000000001"],
47-
},
48-
],
49-
targets: [
50-
{
51-
targetId: "00000000-0000-4000-8000-000000000001",
52-
type: "API",
53-
invocationEndpoint: "https://example.com",
54-
invocationMethod: "POST",
55-
invocationRateLimit: 10,
56-
apiKey: { headerName: "x-api-key", headerValue: "secret" },
57-
},
58-
],
59-
});
60-
6135
const createMessageStatusData = (
6236
overrides: Partial<MessageStatusData> = {},
6337
): MessageStatusData => ({

0 commit comments

Comments
 (0)