45
45
"previousSystemTags" : {},
46
46
"stackTags" : {"tag1" : "abc" },
47
47
"previousStackTags" : {"tag1" : "def" },
48
+ "typeConfiguration" : sentinel .type_configuration ,
48
49
},
49
50
"stackId" : "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/e"
50
51
"722ae60-fe62-11e8-9a0e-0ae8cc519968" ,
@@ -76,7 +77,7 @@ def test_entrypoint_handler_error(resource):
76
77
77
78
78
79
def test_entrypoint_success ():
79
- resource = Resource (TYPE_NAME , Mock ())
80
+ resource = Resource (TYPE_NAME , Mock (), Mock () )
80
81
event = ProgressEvent (status = OperationStatus .SUCCESS , message = "" )
81
82
mock_handler = resource .handler (Action .CREATE )(Mock (return_value = event ))
82
83
@@ -106,7 +107,15 @@ class ResourceModel(BaseModel):
106
107
def _deserialize (cls , json_data ):
107
108
return cls ("test" )
108
109
109
- resource = Resource (Mock (), ResourceModel )
110
+ @dataclass
111
+ class TypeConfigurationModel (BaseModel ):
112
+ a_string : str
113
+
114
+ @classmethod
115
+ def _deserialize (cls , json_data ):
116
+ return cls ("test" )
117
+
118
+ resource = Resource (Mock (), ResourceModel , TypeConfigurationModel )
110
119
111
120
with patch (
112
121
"cloudformation_cli_python_lib.resource.ProviderLogHandler.setup"
@@ -132,7 +141,7 @@ def _deserialize(cls, json_data):
132
141
def test_entrypoint_non_mutating_action ():
133
142
payload = ENTRYPOINT_PAYLOAD .copy ()
134
143
payload ["action" ] = "READ"
135
- resource = Resource (TYPE_NAME , Mock ())
144
+ resource = Resource (TYPE_NAME , Mock (), Mock () )
136
145
event = ProgressEvent (status = OperationStatus .SUCCESS , message = "" )
137
146
resource .handler (Action .CREATE )(Mock (return_value = event ))
138
147
@@ -148,7 +157,7 @@ def test_entrypoint_non_mutating_action():
148
157
def test_entrypoint_with_context ():
149
158
payload = ENTRYPOINT_PAYLOAD .copy ()
150
159
payload ["callbackContext" ] = {"a" : "b" }
151
- resource = Resource (TYPE_NAME , Mock ())
160
+ resource = Resource (TYPE_NAME , Mock (), Mock () )
152
161
event = ProgressEvent (
153
162
status = OperationStatus .SUCCESS , message = "" , callbackContext = {"c" : "d" }
154
163
)
@@ -163,7 +172,7 @@ def test_entrypoint_with_context():
163
172
164
173
165
174
def test_entrypoint_success_without_caller_provider_creds ():
166
- resource = Resource (TYPE_NAME , Mock ())
175
+ resource = Resource (TYPE_NAME , Mock (), Mock () )
167
176
event = ProgressEvent (status = OperationStatus .SUCCESS , message = "" )
168
177
resource .handler (Action .CREATE )(Mock (return_value = event ))
169
178
@@ -208,7 +217,12 @@ def test__parse_request_valid_request_and__cast_resource_request():
208
217
mock_model = Mock (spec_set = ["_deserialize" ])
209
218
mock_model ._deserialize .side_effect = [sentinel .state_out1 , sentinel .state_out2 ]
210
219
211
- resource = Resource (TYPE_NAME , mock_model )
220
+ mock_type_configuration_model = Mock (spec_set = ["_deserialize" ])
221
+ mock_type_configuration_model ._deserialize .side_effect = [
222
+ sentinel .type_configuration
223
+ ]
224
+
225
+ resource = Resource (TYPE_NAME , mock_model , mock_type_configuration_model )
212
226
213
227
with patch (
214
228
"cloudformation_cli_python_lib.resource._get_boto_session"
@@ -229,6 +243,7 @@ def test__parse_request_valid_request_and__cast_resource_request():
229
243
# credentials are used when rescheduling, so can't zero them out (for now)
230
244
assert request .requestData .callerCredentials is not None
231
245
assert request .requestData .providerCredentials is not None
246
+ assert request .requestData .typeConfiguration is sentinel .type_configuration
232
247
233
248
caller_sess , provider_sess = sessions
234
249
assert caller_sess is mock_session .return_value
@@ -245,6 +260,7 @@ def test__parse_request_valid_request_and__cast_resource_request():
245
260
assert modeled_request .clientRequestToken == request .bearerToken
246
261
assert modeled_request .desiredResourceState is sentinel .state_out1
247
262
assert modeled_request .previousResourceState is sentinel .state_out2
263
+ assert modeled_request .typeConfiguration is sentinel .type_configuration
248
264
assert modeled_request .logicalResourceIdentifier == "myBucket"
249
265
assert modeled_request .nextToken is None
250
266
@@ -337,6 +353,11 @@ def test__parse_test_request_valid_request():
337
353
mock_model = Mock (spec_set = ["_deserialize" ])
338
354
mock_model ._deserialize .side_effect = [sentinel .state_out1 , sentinel .state_out2 ]
339
355
356
+ mock_type_configuration_model = Mock (spec_set = ["_deserialize" ])
357
+ mock_type_configuration_model ._deserialize .side_effect = [
358
+ sentinel .type_configuration
359
+ ]
360
+
340
361
payload = {
341
362
"credentials" : {"accessKeyId" : "" , "secretAccessKey" : "" , "sessionToken" : "" },
342
363
"action" : "CREATE" ,
@@ -345,11 +366,12 @@ def test__parse_test_request_valid_request():
345
366
"desiredResourceState" : sentinel .state_in1 ,
346
367
"previousResourceState" : sentinel .state_in2 ,
347
368
"logicalResourceIdentifier" : None ,
369
+ "typeConfiguration" : sentinel .type_configuration ,
348
370
},
349
371
"callbackContext" : None ,
350
372
}
351
373
352
- resource = Resource (TYPE_NAME , mock_model )
374
+ resource = Resource (TYPE_NAME , mock_model , mock_type_configuration_model )
353
375
354
376
with patch (
355
377
"cloudformation_cli_python_lib.resource._get_boto_session"
@@ -366,6 +388,7 @@ def test__parse_test_request_valid_request():
366
388
)
367
389
assert request .desiredResourceState is sentinel .state_out1
368
390
assert request .previousResourceState is sentinel .state_out2
391
+ assert request .typeConfiguration is sentinel .type_configuration
369
392
assert request .logicalResourceIdentifier is None
370
393
371
394
assert action == Action .CREATE
@@ -394,7 +417,10 @@ def test_test_entrypoint_success():
394
417
mock_model = Mock (spec_set = ["_deserialize" ])
395
418
mock_model ._deserialize .side_effect = [None , None ]
396
419
397
- resource = Resource (TYPE_NAME , mock_model )
420
+ mock_type_configuration_model = Mock (spec_set = ["_deserialize" ])
421
+ mock_type_configuration_model ._deserialize .side_effect = [None ]
422
+
423
+ resource = Resource (TYPE_NAME , mock_model , mock_type_configuration_model )
398
424
progress_event = ProgressEvent (status = OperationStatus .SUCCESS )
399
425
mock_handler = resource .handler (Action .CREATE )(Mock (return_value = progress_event ))
400
426
@@ -415,4 +441,5 @@ def test_test_entrypoint_success():
415
441
assert event is progress_event
416
442
417
443
mock_model ._deserialize .assert_has_calls ([call (None ), call (None )])
444
+ mock_type_configuration_model ._deserialize .assert_has_calls ([call (None )])
418
445
mock_handler .assert_called_once ()
0 commit comments