@@ -111,6 +111,30 @@ def test_create_rocket(stub_rocket_dump, mock_controller_instance):
111111 )
112112
113113
114+ def test_create_rocket_with_string_nested_fields (
115+ stub_rocket_dump ,
116+ stub_parachute_dump ,
117+ stub_rail_buttons_dump ,
118+ stub_tail_dump ,
119+ mock_controller_instance ,
120+ ):
121+ payload = copy .deepcopy (stub_rocket_dump )
122+ payload ['motor' ] = json .dumps (payload ['motor' ])
123+ payload ['nose' ] = json .dumps (payload ['nose' ])
124+ payload ['fins' ] = json .dumps (payload ['fins' ])
125+ payload ['parachutes' ] = json .dumps ([stub_parachute_dump ])
126+ payload ['rail_buttons' ] = json .dumps (stub_rail_buttons_dump )
127+ payload ['tail' ] = json .dumps (stub_tail_dump )
128+
129+ mock_response = AsyncMock (return_value = RocketCreated (rocket_id = '123' ))
130+ mock_controller_instance .post_rocket = mock_response
131+ response = client .post ('/rockets/' , json = payload )
132+ assert response .status_code == 201
133+ mock_controller_instance .post_rocket .assert_called_once_with (
134+ RocketModel (** payload )
135+ )
136+
137+
114138def test_create_rocket_from_motor_reference (
115139 stub_rocket_reference_payload , mock_controller_instance
116140):
@@ -440,6 +464,30 @@ def test_update_rocket(stub_rocket_dump, mock_controller_instance):
440464 )
441465
442466
467+ def test_update_rocket_with_string_nested_fields (
468+ stub_rocket_dump ,
469+ stub_parachute_dump ,
470+ stub_rail_buttons_dump ,
471+ stub_tail_dump ,
472+ mock_controller_instance ,
473+ ):
474+ payload = copy .deepcopy (stub_rocket_dump )
475+ payload ['motor' ]['motor_kind' ] = 'SOLID'
476+ payload ['motor' ] = json .dumps (payload ['motor' ])
477+ payload ['nose' ] = json .dumps (payload ['nose' ])
478+ payload ['fins' ] = json .dumps (payload ['fins' ])
479+ payload ['parachutes' ] = json .dumps ([stub_parachute_dump ])
480+ payload ['rail_buttons' ] = json .dumps (stub_rail_buttons_dump )
481+ payload ['tail' ] = json .dumps (stub_tail_dump )
482+
483+ mock_controller_instance .put_rocket_by_id = AsyncMock (return_value = None )
484+ response = client .put ('/rockets/123' , json = payload )
485+ assert response .status_code == 204
486+ mock_controller_instance .put_rocket_by_id .assert_called_once_with (
487+ '123' , RocketModel (** payload )
488+ )
489+
490+
443491def test_update_rocket_invalid_input ():
444492 response = client .put (
445493 '/rockets/123' , json = {'mass' : 'foo' , 'radius' : 'bar' }
0 commit comments