1- import { setFeature } from "@aws-sdk/core" ;
21import { HttpRequest } from "@smithy/protocol-http" ;
32import { BuildHandlerArguments } from "@smithy/types" ;
43import { afterEach , beforeEach , describe , expect , test as it , vi } from "vitest" ;
@@ -9,6 +8,7 @@ import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware";
98import { getChecksumAlgorithmForRequest } from "./getChecksumAlgorithmForRequest" ;
109import { getChecksumLocationName } from "./getChecksumLocationName" ;
1110import { hasHeader } from "./hasHeader" ;
11+ import { hasHeaderWithPrefix } from "./hasHeaderWithPrefix" ;
1212import { isStreaming } from "./isStreaming" ;
1313import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction" ;
1414import { stringHasher } from "./stringHasher" ;
@@ -18,6 +18,7 @@ vi.mock("@smithy/protocol-http");
1818vi . mock ( "./getChecksumAlgorithmForRequest" ) ;
1919vi . mock ( "./getChecksumLocationName" ) ;
2020vi . mock ( "./hasHeader" ) ;
21+ vi . mock ( "./hasHeaderWithPrefix" ) ;
2122vi . mock ( "./isStreaming" ) ;
2223vi . mock ( "./selectChecksumAlgorithmFunction" ) ;
2324vi . mock ( "./stringHasher" ) ;
@@ -43,11 +44,11 @@ describe(flexibleChecksumsMiddleware.name, () => {
4344
4445 beforeEach ( ( ) => {
4546 mockNext . mockResolvedValueOnce ( mockResult ) ;
46- const { isInstance } = HttpRequest ;
47- ( isInstance as unknown as any ) . mockReturnValue ( true ) ;
47+ vi . mocked ( HttpRequest . isInstance ) . mockReturnValue ( true ) ;
4848 vi . mocked ( getChecksumAlgorithmForRequest ) . mockReturnValue ( ChecksumAlgorithm . CRC32 ) ;
4949 vi . mocked ( getChecksumLocationName ) . mockReturnValue ( mockChecksumLocationName ) ;
5050 vi . mocked ( hasHeader ) . mockReturnValue ( true ) ;
51+ vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( false ) ;
5152 vi . mocked ( isStreaming ) . mockReturnValue ( false ) ;
5253 vi . mocked ( selectChecksumAlgorithmFunction ) . mockReturnValue ( mockChecksumAlgorithmFunction ) ;
5354 } ) ;
@@ -59,8 +60,7 @@ describe(flexibleChecksumsMiddleware.name, () => {
5960
6061 describe ( "skips" , ( ) => {
6162 it ( "if not an instance of HttpRequest" , async ( ) => {
62- const { isInstance } = HttpRequest ;
63- ( isInstance as unknown as any ) . mockReturnValue ( false ) ;
63+ vi . mocked ( HttpRequest . isInstance ) . mockReturnValue ( false ) ;
6464 const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
6565 await handler ( mockArgs ) ;
6666 expect ( getChecksumAlgorithmForRequest ) . not . toHaveBeenCalled ( ) ;
@@ -71,35 +71,32 @@ describe(flexibleChecksumsMiddleware.name, () => {
7171 vi . mocked ( getChecksumAlgorithmForRequest ) . mockReturnValue ( undefined ) ;
7272 const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
7373 await handler ( mockArgs ) ;
74+ expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
7475 expect ( getChecksumLocationName ) . not . toHaveBeenCalled ( ) ;
7576 expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
7677 expect ( selectChecksumAlgorithmFunction ) . not . toHaveBeenCalled ( ) ;
7778 expect ( getChecksumAlgorithmForRequest ) . toHaveBeenCalledTimes ( 1 ) ;
7879 } ) ;
7980
80- it . each ( [
81- ...Object . values ( ChecksumAlgorithm ) . map ( ( val ) => `x-amz-checksum-${ val . toLowerCase ( ) } ` ) , // all current checksum locations
82- ...Object . values ( ChecksumAlgorithm ) . map ( ( val ) => `X-AMZ-CHECKSUM-${ val } ` ) , // all current checksum locations in uppercase
83- `x-amz-checksum-emoji` , // any checksum post prefix
84- `X-AMZ-CHECKSUM-EMOJI` , // any checksum post prefix in uppercase
85- ] ) ( "skip if header '%s' is already present" , async ( headerName ) => {
81+ it ( "skip if header is already present" , async ( ) => {
8682 const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
87- const mockHeadersWithChecksumHeader = { ...mockHeaders , [ headerName ] : "mockHeaderValue" } ;
88- const mockArgsWithChecksumHeader = {
89- ...mockArgs ,
90- request : { ...mockRequest , headers : mockHeadersWithChecksumHeader } ,
91- } ;
92- await handler ( mockArgsWithChecksumHeader ) ;
83+ vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( true ) ;
84+
85+ await handler ( mockArgs ) ;
86+
87+ expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
9388 expect ( getChecksumLocationName ) . not . toHaveBeenCalled ( ) ;
9489 expect ( selectChecksumAlgorithmFunction ) . not . toHaveBeenCalled ( ) ;
9590 expect ( hasHeader ) . not . toHaveBeenCalled ( ) ;
96- expect ( mockNext ) . toHaveBeenCalledWith ( mockArgsWithChecksumHeader ) ;
91+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
9792 } ) ;
9893 } ) ;
9994 } ) ;
10095
10196 describe ( "adds checksum in the request header" , ( ) => {
10297 afterEach ( ( ) => {
98+ expect ( HttpRequest . isInstance ) . toHaveBeenCalledTimes ( 1 ) ;
99+ expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
103100 expect ( getChecksumAlgorithmForRequest ) . toHaveBeenCalledTimes ( 1 ) ;
104101 expect ( getChecksumLocationName ) . toHaveBeenCalledTimes ( 1 ) ;
105102 expect ( selectChecksumAlgorithmFunction ) . toHaveBeenCalledTimes ( 1 ) ;
0 commit comments