1- from unittest .mock import patch
1+ from unittest .mock import patch , Mock , AsyncMock
22import json
33import pytest
44from fastapi .testclient import TestClient
5- from fastapi import HTTPException , status
5+ from fastapi import HTTPException
66from lib .models .environment import EnvironmentModel
7- from lib .controllers .environment import EnvironmentController
87from lib .views .environment import (
8+ EnvironmentView ,
99 EnvironmentCreated ,
1010 EnvironmentUpdated ,
11+ EnvironmentRetrieved ,
1112 EnvironmentDeleted ,
1213 EnvironmentSummary ,
1314)
@@ -22,6 +23,7 @@ def stub_environment_summary_dump():
2223 env_summary_json = env_summary .model_dump_json ()
2324 return json .loads (env_summary_json )
2425
26+
2527@pytest .fixture (autouse = True )
2628def mock_controller_instance ():
2729 with patch (
@@ -34,6 +36,7 @@ def mock_controller_instance():
3436 mock_controller_instance .delete_environment_by_id = Mock ()
3537 yield mock_controller_instance
3638
39+
3740def test_create_environment (stub_environment_dump , mock_controller_instance ):
3841 mock_response = AsyncMock (return_value = EnvironmentCreated (environment_id = '123' ))
3942 mock_controller_instance .post_environment = mock_response
@@ -47,6 +50,7 @@ def test_create_environment(stub_environment_dump, mock_controller_instance):
4750 EnvironmentModel (** stub_environment_dump )
4851 )
4952
53+
5054def test_create_environment_optional_params (stub_environment_dump , mock_controller_instance ):
5155 stub_environment_dump .update ({
5256 'latitude' : 0 ,
@@ -65,12 +69,14 @@ def test_create_environment_optional_params(stub_environment_dump, mock_controll
6569 'message' : 'Environment successfully created' ,
6670 }
6771
72+
6873def test_create_environment_invalid_input ():
6974 response = client .post (
7075 '/environments/' , json = {'latitude' : 'foo' , 'longitude' : 'bar' }
7176 )
7277 assert response .status_code == 422
7378
79+
7480def test_create_environment_server_error (
7581 stub_environment_dump , mock_controller_instance
7682):
@@ -80,8 +86,9 @@ def test_create_environment_server_error(
8086 assert response .status_code == 500
8187 assert response .json () == {'detail' : 'Internal Server Error' }
8288
83- def test_read_environment (stub_env ):
84- stub_environment_out = EnvironmentModelOut (environment_id = '123' , ** stub_environment_dump )
89+
90+ def test_read_environment (stub_environment_dump , mock_controller_instance ):
91+ stub_environment_out = EnvironmentView (environment_id = '123' , ** stub_environment_dump )
8592 mock_response = AsyncMock (
8693 return_value = EnvironmentRetrieved (environment = stub_environment_out )
8794 )
@@ -92,6 +99,8 @@ def test_read_environment(stub_env):
9299 'message' : 'Environment successfully retrieved' ,
93100 'environment' : json .loads (stub_environment_out .model_dump_json ()),
94101 }
102+ mock_controller_instance .get_environment_by_id .assert_called_once_with ('123' )
103+
95104
96105def test_read_environment_not_found (mock_controller_instance ):
97106 mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
@@ -101,13 +110,15 @@ def test_read_environment_not_found(mock_controller_instance):
101110 assert response .json () == {'detail' : 'Not Found' }
102111 mock_controller_instance .get_environment_by_id .assert_called_once_with ('123' )
103112
113+
104114def test_read_environment_server_error (mock_controller_instance ):
105115 mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
106116 mock_controller_instance .get_environment_by_id = mock_response
107117 response = client .get ('/environments/123' )
108118 assert response .status_code == 500
109119 assert response .json () == {'detail' : 'Internal Server Error' }
110120
121+
111122def test_update_environment (stub_environment_dump , mock_controller_instance ):
112123 mock_reponse = AsyncMock (return_value = EnvironmentUpdated (environment_id = '123' ))
113124 mock_controller_instance .put_environment_by_id = mock_reponse
@@ -120,12 +131,14 @@ def test_update_environment(stub_environment_dump, mock_controller_instance):
120131 '123' , EnvironmentModel (** stub_environment_dump )
121132 )
122133
134+
123135def test_update_environment_invalid_input ():
124136 response = client .put (
125137 '/environments/123' , json = {'consignment' : 'foo' , 'delivery' : 'bar' }
126138 )
127139 assert response .status_code == 422
128140
141+
129142def test_update_environment_not_found (stub_environment_dump , mock_controller_instance ):
130143 mock_reponse = AsyncMock (side_effect = HTTPException (status_code = 404 ))
131144 mock_controller_instance .put_environment_by_id = mock_reponse
@@ -136,6 +149,7 @@ def test_update_environment_not_found(stub_environment_dump, mock_controller_ins
136149 '123' , EnvironmentModel (** stub_environment_dump )
137150 )
138151
152+
139153def test_update_environment_server_error (
140154 stub_environment_dump , mock_controller_instance
141155):
@@ -145,6 +159,7 @@ def test_update_environment_server_error(
145159 assert response .status_code == 500
146160 assert response .json () == {'detail' : 'Internal Server Error' }
147161
162+
148163def test_delete_environment (mock_controller_instance ):
149164 mock_reponse = AsyncMock (return_value = EnvironmentDeleted (environment_id = '123' ))
150165 mock_controller_instance .delete_environment_by_id = mock_reponse
@@ -155,13 +170,15 @@ def test_delete_environment(mock_controller_instance):
155170 }
156171 mock_controller_instance .delete_environment_by_id .assert_called_once_with ('123' )
157172
173+
158174def test_delete_environment_server_error (mock_controller_instance ):
159175 mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
160176 mock_controller_instance .delete_environment_by_id = mock_response
161177 response = client .delete ('/environments/123' )
162178 assert response .status_code == 500
163179 assert response .json () == {'detail' : 'Internal Server Error' }
164180
181+
165182def test_simulate_environment_success (
166183 stub_environment_summary_dump , mock_controller_instance
167184):
@@ -172,6 +189,7 @@ def test_simulate_environment_success(
172189 assert response .json () == stub_environment_summary_dump
173190 mock_controller_instance .get_environment_simulation .assert_called_once_with ('123' )
174191
192+
175193def test_simulate_environment_not_found (mock_controller_instance ):
176194 mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
177195 mock_controller_instance .get_environment_simulation = mock_response
@@ -180,14 +198,16 @@ def test_simulate_environment_not_found(mock_controller_instance):
180198 assert response .json () == {'detail' : 'Not Found' }
181199 mock_controller_instance .get_environment_simulation .assert_called_once_with ('123' )
182200
201+
183202def test_simulate_environment_server_error (mock_controller_instance ):
184203 mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
185204 mock_controller_instance .get_environment_simulation = mock_response
186205 response = client .get ('/environments/123/summary' )
187206 assert response .status_code == 500
188207 assert response .json () == {'detail' : 'Internal Server Error' }
189208
190- def test_read_rocketpy_environment (mock_controller_instance ):
209+
210+ def test_read_rocketpy_environment_binary (mock_controller_instance ):
191211 mock_response = AsyncMock (return_value = b'rocketpy' )
192212 mock_controller_instance .get_rocketpy_environment_binary = mock_response
193213 response = client .get ('/environments/123/rocketpy' )
@@ -198,7 +218,8 @@ def test_read_rocketpy_environment(mock_controller_instance):
198218 '123'
199219 )
200220
201- def test_read_rocketpy_environment_not_found (mock_controller_instance ):
221+
222+ def test_read_rocketpy_environment_binary_not_found (mock_controller_instance ):
202223 mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
203224 mock_controller_instance .get_rocketpy_environment_binary = mock_response
204225 response = client .get ('/environments/123/rocketpy' )
@@ -208,7 +229,8 @@ def test_read_rocketpy_environment_not_found(mock_controller_instance):
208229 '123'
209230 )
210231
211- def test_read_rocketpy_environment_server_error (mock_controller_instance ):
232+
233+ def test_read_rocketpy_environment_binary_server_error (mock_controller_instance ):
212234 mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
213235 mock_controller_instance .get_rocketpy_environment_binary = mock_response
214236 response = client .get ('/environments/123/rocketpy' )
0 commit comments