@@ -2,17 +2,20 @@ import { setFeature } from "@aws-sdk/core";
22import { afterEach , describe , expect , test as it , vi } from "vitest" ;
33
44import { PreviouslyResolved } from "./configuration" ;
5- import { ResponseChecksumValidation } from "./constants" ;
5+ import { DEFAULT_CHECKSUM_ALGORITHM , RequestChecksumCalculation , ResponseChecksumValidation } from "./constants" ;
66import { flexibleChecksumsInputMiddleware } from "./flexibleChecksumsInputMiddleware" ;
77
88vi . mock ( "@aws-sdk/core" ) ;
99
1010describe ( flexibleChecksumsInputMiddleware . name , ( ) => {
1111 const mockNext = vi . fn ( ) ;
12- const mockMiddlewareConfig = {
13- requestValidationModeMember : "requestValidationModeMember" ,
14- } ;
12+
13+ const mockRequestAlgorithmMember = "mockRequestAlgorithmMember" ;
14+ const mockRequestValidationModeMember = "mockRequestValidationModeMember" ;
15+ const mockMiddlewareConfig = { requestChecksumRequired : false } ;
16+
1517 const mockConfig = {
18+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_SUPPORTED ) ,
1619 responseChecksumValidation : ( ) => Promise . resolve ( ResponseChecksumValidation . WHEN_SUPPORTED ) ,
1720 } as PreviouslyResolved ;
1821
@@ -21,32 +24,100 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
2124 vi . clearAllMocks ( ) ;
2225 } ) ;
2326
27+ describe ( "sets input.requestAlgorithmMember" , ( ) => {
28+ describe ( "input[requestAlgorithmMember] is not defined and" , ( ) => {
29+ const mockMiddlewareConfigWithRequestAlgorithmMember = {
30+ ...mockMiddlewareConfig ,
31+ requestAlgorithmMember : mockRequestAlgorithmMember ,
32+ } ;
33+
34+ it ( "requestChecksumCalculation is supported" , async ( ) => {
35+ const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfigWithRequestAlgorithmMember ) (
36+ mockNext ,
37+ { }
38+ ) ;
39+ await handler ( { input : { } } ) ;
40+ expect ( mockNext ) . toHaveBeenCalledWith ( { input : { [ mockRequestAlgorithmMember ] : DEFAULT_CHECKSUM_ALGORITHM } } ) ;
41+ } ) ;
42+
43+ it ( "requestChecksumRequired is set to true" , async ( ) => {
44+ const mockConfigWithReqChecksumCalculationWhenRequired = {
45+ ...mockConfig ,
46+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_REQUIRED ) ,
47+ } ;
48+
49+ const handler = flexibleChecksumsInputMiddleware ( mockConfigWithReqChecksumCalculationWhenRequired , {
50+ ...mockMiddlewareConfigWithRequestAlgorithmMember ,
51+ requestChecksumRequired : true ,
52+ } ) ( mockNext , { } ) ;
53+
54+ await handler ( { input : { } } ) ;
55+ expect ( mockNext ) . toHaveBeenCalledWith ( { input : { [ mockRequestAlgorithmMember ] : DEFAULT_CHECKSUM_ALGORITHM } } ) ;
56+ } ) ;
57+ } ) ;
58+ } ) ;
59+
60+ describe ( "leaves input.requestAlgorithmMember" , ( ) => {
61+ const mockMiddlewareConfigWithRequestAlgorithmMember = {
62+ ...mockMiddlewareConfig ,
63+ requestAlgorithmMember : mockRequestAlgorithmMember ,
64+ } ;
65+
66+ it ( "when input[requestAlgorithmMember] is defined" , async ( ) => {
67+ const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfigWithRequestAlgorithmMember ) (
68+ mockNext ,
69+ { }
70+ ) ;
71+ await handler ( { input : { [ mockRequestAlgorithmMember ] : "SHA256" } } ) ;
72+ expect ( mockNext ) . toHaveBeenCalledWith ( { input : { [ mockRequestAlgorithmMember ] : "SHA256" } } ) ;
73+ } ) ;
74+
75+ it ( "if requestChecksumCalculation is required and requestChecksumRequired is false" , async ( ) => {
76+ const mockConfigReqChecksumCalculationWhenRequired = {
77+ ...mockConfig ,
78+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_REQUIRED ) ,
79+ } as PreviouslyResolved ;
80+
81+ const handler = flexibleChecksumsInputMiddleware (
82+ mockConfigReqChecksumCalculationWhenRequired ,
83+ mockMiddlewareConfigWithRequestAlgorithmMember
84+ ) ( mockNext , { } ) ;
85+ await handler ( { input : { } } ) ;
86+ expect ( mockNext ) . toHaveBeenCalledWith ( { input : { } } ) ;
87+ } ) ;
88+ } ) ;
89+
2490 describe ( "sets input.requestValidationModeMember" , ( ) => {
2591 it ( "when requestValidationModeMember is defined and responseChecksumValidation is supported" , async ( ) => {
26- const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
92+ const mockMiddlewareConfigWithMockRequestValidationModeMember = {
93+ ...mockMiddlewareConfig ,
94+ requestValidationModeMember : mockRequestValidationModeMember ,
95+ } ;
96+ const handler = flexibleChecksumsInputMiddleware (
97+ mockConfig ,
98+ mockMiddlewareConfigWithMockRequestValidationModeMember
99+ ) ( mockNext , { } ) ;
27100 await handler ( { input : { } } ) ;
28- expect ( mockNext ) . toHaveBeenCalledWith ( { input : { requestValidationModeMember : "ENABLED" } } ) ;
101+ expect ( mockNext ) . toHaveBeenCalledWith ( { input : { [ mockRequestValidationModeMember ] : "ENABLED" } } ) ;
29102 } ) ;
30103 } ) ;
31104
32105 describe ( "leaves input.requestValidationModeMember" , ( ) => {
33106 const mockArgs = { input : { } } ;
34107
35108 it ( "when requestValidationModeMember is not defined" , async ( ) => {
36- const mockMiddlewareConfig = { } ;
37-
38109 const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
39110 await handler ( mockArgs ) ;
40-
41111 expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
42112 } ) ;
43113
44114 it ( "when responseChecksumValidation is required" , async ( ) => {
45- const mockConfig = {
115+ const mockConfigResWhenRequired = {
116+ ...mockConfig ,
46117 responseChecksumValidation : ( ) => Promise . resolve ( ResponseChecksumValidation . WHEN_REQUIRED ) ,
47118 } as PreviouslyResolved ;
48119
49- const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
120+ const handler = flexibleChecksumsInputMiddleware ( mockConfigResWhenRequired , mockMiddlewareConfig ) ( mockNext , { } ) ;
50121 await handler ( mockArgs ) ;
51122
52123 expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
@@ -55,15 +126,45 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
55126
56127 describe ( "set feature" , ( ) => {
57128 it . each ( [
58- [ "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" , "c" , ResponseChecksumValidation . WHEN_REQUIRED ] ,
59- [ "FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" , "b" , ResponseChecksumValidation . WHEN_SUPPORTED ] ,
60- ] ) ( "logs %s and %s when ResponseChecksumValidation=%s" , async ( feature , value , responseChecksumValidation ) => {
61- const mockConfig = {
62- responseChecksumValidation : ( ) => Promise . resolve ( responseChecksumValidation ) ,
129+ [
130+ "FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED" ,
131+ "a" ,
132+ "requestChecksumCalculation" ,
133+ RequestChecksumCalculation . WHEN_REQUIRED ,
134+ ] ,
135+ [
136+ "FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED" ,
137+ "Z" ,
138+ "requestChecksumCalculation" ,
139+ RequestChecksumCalculation . WHEN_SUPPORTED ,
140+ ] ,
141+ [
142+ "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" ,
143+ "c" ,
144+ "responseChecksumValidation" ,
145+ ResponseChecksumValidation . WHEN_REQUIRED ,
146+ ] ,
147+ [
148+ "FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" ,
149+ "b" ,
150+ "responseChecksumValidation" ,
151+ ResponseChecksumValidation . WHEN_SUPPORTED ,
152+ ] ,
153+ ] ) ( "logs %s:%s when %s=%s" , async ( feature , value , configKey , configValue ) => {
154+ const mockConfigOverride = {
155+ ...mockConfig ,
156+ [ configKey ] : ( ) => Promise . resolve ( configValue ) ,
63157 } as PreviouslyResolved ;
64- const handler = flexibleChecksumsInputMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
158+
159+ const handler = flexibleChecksumsInputMiddleware ( mockConfigOverride , mockMiddlewareConfig ) ( mockNext , { } ) ;
65160 await handler ( { input : { } } ) ;
66- expect ( setFeature ) . toHaveBeenCalledWith ( expect . anything ( ) , feature , value ) ;
161+
162+ expect ( setFeature ) . toHaveBeenCalledTimes ( 2 ) ;
163+ if ( configKey === "requestChecksumCalculation" ) {
164+ expect ( setFeature ) . toHaveBeenNthCalledWith ( 1 , expect . anything ( ) , feature , value ) ;
165+ } else {
166+ expect ( setFeature ) . toHaveBeenNthCalledWith ( 2 , expect . anything ( ) , feature , value ) ;
167+ }
67168 } ) ;
68169 } ) ;
69170} ) ;
0 commit comments