Skip to content

Commit

Permalink
test(middleware-flexible-checksums): flexibleChecksumsResponseMiddlew…
Browse files Browse the repository at this point in the history
…are.spec.ts (#5342)
  • Loading branch information
trivikr authored Oct 10, 2023
1 parent bde7d54 commit e1db7b1
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { HttpRequest } from "@smithy/protocol-http";
import { BuildHandlerArguments, DeserializeHandlerArguments } from "@smithy/types";
import { BuildHandlerArguments } from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { ChecksumAlgorithm } from "./constants";
import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware";
import { flexibleChecksumsResponseMiddleware } from "./flexibleChecksumsResponseMiddleware";
import { getChecksumAlgorithmForRequest } from "./getChecksumAlgorithmForRequest";
import { getChecksumLocationName } from "./getChecksumLocationName";
import { hasHeader } from "./hasHeader";
import { isStreaming } from "./isStreaming";
import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction";
import { stringHasher } from "./stringHasher";
import { validateChecksumFromResponse } from "./validateChecksumFromResponse";

jest.mock("@smithy/protocol-http");
jest.mock("./getChecksumAlgorithmForRequest");
Expand All @@ -20,7 +18,6 @@ jest.mock("./hasHeader");
jest.mock("./isStreaming");
jest.mock("./selectChecksumAlgorithmFunction");
jest.mock("./stringHasher");
jest.mock("./validateChecksumFromResponse");

describe(flexibleChecksumsMiddleware.name, () => {
const mockNext = jest.fn();
Expand Down Expand Up @@ -92,24 +89,6 @@ describe(flexibleChecksumsMiddleware.name, () => {
expect(hasHeader).toHaveBeenCalledWith(mockChecksumLocationName, mockHeadersWithChecksumHeader);
});
});

describe("response validation", () => {
it("if requestValidationModeMember is not defined", async () => {
const handler = flexibleChecksumsMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
});

it("if requestValidationModeMember is not set to 'ENABLED' in input", async () => {
const mockRequestValidationModeMember = "mockRequestValidationModeMember";
const handler = flexibleChecksumsMiddleware(mockConfig, {
...mockMiddlewareConfig,
requestValidationModeMember: mockRequestValidationModeMember,
})(mockNext, {});
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
});
});
});

describe("adds checksum in the request header", () => {
Expand Down Expand Up @@ -189,23 +168,4 @@ describe(flexibleChecksumsMiddleware.name, () => {
expect(mockBase64Encoder).toHaveBeenCalledWith(mockRawChecksum);
});
});

it("validates checksum from the response header", async () => {
const mockRequestValidationModeMember = "mockRequestValidationModeMember";
const mockInput = { [mockRequestValidationModeMember]: "ENABLED" };
const mockResponseAlgorithms = ["ALGO1", "ALGO2"];

const responseHandler = flexibleChecksumsResponseMiddleware(mockConfig, {
...mockMiddlewareConfig,
input: mockInput,
requestValidationModeMember: mockRequestValidationModeMember,
responseAlgorithms: mockResponseAlgorithms,
})(mockNext, {});

await responseHandler({ ...mockArgs, input: mockInput } as DeserializeHandlerArguments<any>);
expect(validateChecksumFromResponse).toHaveBeenCalledWith(mockResult.response, {
config: mockConfig,
responseAlgorithms: mockResponseAlgorithms,
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { HttpRequest } from "@smithy/protocol-http";
import { DeserializeHandlerArguments } from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { flexibleChecksumsResponseMiddleware } from "./flexibleChecksumsResponseMiddleware";
import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
import { isStreaming } from "./isStreaming";
import { validateChecksumFromResponse } from "./validateChecksumFromResponse";

jest.mock("@smithy/protocol-http");
jest.mock("./isStreaming");
jest.mock("./validateChecksumFromResponse");

describe(flexibleChecksumsResponseMiddleware.name, () => {
const mockNext = jest.fn();

const mockInput = {};
const mockConfig = {} as PreviouslyResolved;
const mockRequestValidationModeMember = "ChecksumEnabled";
const mockMiddlewareConfig = {
input: mockInput,
requestChecksumRequired: false,
requestValidationModeMember: mockRequestValidationModeMember,
};

const mockRequest = {};
const mockArgs = { input: mockInput, request: mockRequest } as DeserializeHandlerArguments<any>;
const mockResult = { response: { body: "mockResponsebody" } };

beforeEach(() => {
mockNext.mockResolvedValueOnce(mockResult);
const { isInstance } = HttpRequest;
(isInstance as unknown as jest.Mock).mockReturnValue(true);
(isStreaming as jest.Mock).mockReturnValue(false);
});

afterEach(() => {
expect(mockNext).toHaveBeenCalledTimes(1);
jest.clearAllMocks();
});

describe("skips", () => {
it("if not an instance of HttpRequest", async () => {
const { isInstance } = HttpRequest;
(isInstance as unknown as jest.Mock).mockReturnValue(false);
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
});

describe("response checksum", () => {
it("if requestValidationModeMember is not defined", async () => {
const mockMwConfig = Object.assign({}, mockMiddlewareConfig) as FlexibleChecksumsMiddlewareConfig;
delete mockMwConfig.requestValidationModeMember;
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMwConfig)(mockNext, {});
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
});

it("if requestValidationModeMember is not enabled in input", async () => {
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
});
});
});

it("validates checksum from the response header", async () => {
const mockInput = { [mockRequestValidationModeMember]: "ENABLED" };
const mockResponseAlgorithms = ["ALGO1", "ALGO2"];

const handler = flexibleChecksumsResponseMiddleware(mockConfig, {
...mockMiddlewareConfig,
input: mockInput,
responseAlgorithms: mockResponseAlgorithms,
})(mockNext, {});

await handler({ ...mockArgs, input: mockInput });
expect(validateChecksumFromResponse).toHaveBeenCalledWith(mockResult.response, {
config: mockConfig,
responseAlgorithms: mockResponseAlgorithms,
});
});
});

0 comments on commit e1db7b1

Please sign in to comment.