1
- from unittest .mock import patch
1
+ from unittest .mock import patch , Mock , AsyncMock
2
2
import json
3
3
import pytest
4
4
from fastapi .testclient import TestClient
5
- from fastapi import HTTPException , status
5
+ from fastapi import HTTPException
6
6
from lib .models .environment import EnvironmentModel
7
- from lib .controllers .environment import EnvironmentController
8
7
from lib .views .environment import (
8
+ EnvironmentView ,
9
9
EnvironmentCreated ,
10
10
EnvironmentUpdated ,
11
+ EnvironmentRetrieved ,
11
12
EnvironmentDeleted ,
12
13
EnvironmentSummary ,
13
14
)
@@ -22,6 +23,7 @@ def stub_environment_summary_dump():
22
23
env_summary_json = env_summary .model_dump_json ()
23
24
return json .loads (env_summary_json )
24
25
26
+
25
27
@pytest .fixture (autouse = True )
26
28
def mock_controller_instance ():
27
29
with patch (
@@ -34,6 +36,7 @@ def mock_controller_instance():
34
36
mock_controller_instance .delete_environment_by_id = Mock ()
35
37
yield mock_controller_instance
36
38
39
+
37
40
def test_create_environment (stub_environment_dump , mock_controller_instance ):
38
41
mock_response = AsyncMock (return_value = EnvironmentCreated (environment_id = '123' ))
39
42
mock_controller_instance .post_environment = mock_response
@@ -47,6 +50,7 @@ def test_create_environment(stub_environment_dump, mock_controller_instance):
47
50
EnvironmentModel (** stub_environment_dump )
48
51
)
49
52
53
+
50
54
def test_create_environment_optional_params (stub_environment_dump , mock_controller_instance ):
51
55
stub_environment_dump .update ({
52
56
'latitude' : 0 ,
@@ -65,12 +69,14 @@ def test_create_environment_optional_params(stub_environment_dump, mock_controll
65
69
'message' : 'Environment successfully created' ,
66
70
}
67
71
72
+
68
73
def test_create_environment_invalid_input ():
69
74
response = client .post (
70
75
'/environments/' , json = {'latitude' : 'foo' , 'longitude' : 'bar' }
71
76
)
72
77
assert response .status_code == 422
73
78
79
+
74
80
def test_create_environment_server_error (
75
81
stub_environment_dump , mock_controller_instance
76
82
):
@@ -80,8 +86,9 @@ def test_create_environment_server_error(
80
86
assert response .status_code == 500
81
87
assert response .json () == {'detail' : 'Internal Server Error' }
82
88
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 )
85
92
mock_response = AsyncMock (
86
93
return_value = EnvironmentRetrieved (environment = stub_environment_out )
87
94
)
@@ -92,6 +99,8 @@ def test_read_environment(stub_env):
92
99
'message' : 'Environment successfully retrieved' ,
93
100
'environment' : json .loads (stub_environment_out .model_dump_json ()),
94
101
}
102
+ mock_controller_instance .get_environment_by_id .assert_called_once_with ('123' )
103
+
95
104
96
105
def test_read_environment_not_found (mock_controller_instance ):
97
106
mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
@@ -101,13 +110,15 @@ def test_read_environment_not_found(mock_controller_instance):
101
110
assert response .json () == {'detail' : 'Not Found' }
102
111
mock_controller_instance .get_environment_by_id .assert_called_once_with ('123' )
103
112
113
+
104
114
def test_read_environment_server_error (mock_controller_instance ):
105
115
mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
106
116
mock_controller_instance .get_environment_by_id = mock_response
107
117
response = client .get ('/environments/123' )
108
118
assert response .status_code == 500
109
119
assert response .json () == {'detail' : 'Internal Server Error' }
110
120
121
+
111
122
def test_update_environment (stub_environment_dump , mock_controller_instance ):
112
123
mock_reponse = AsyncMock (return_value = EnvironmentUpdated (environment_id = '123' ))
113
124
mock_controller_instance .put_environment_by_id = mock_reponse
@@ -120,12 +131,14 @@ def test_update_environment(stub_environment_dump, mock_controller_instance):
120
131
'123' , EnvironmentModel (** stub_environment_dump )
121
132
)
122
133
134
+
123
135
def test_update_environment_invalid_input ():
124
136
response = client .put (
125
137
'/environments/123' , json = {'consignment' : 'foo' , 'delivery' : 'bar' }
126
138
)
127
139
assert response .status_code == 422
128
140
141
+
129
142
def test_update_environment_not_found (stub_environment_dump , mock_controller_instance ):
130
143
mock_reponse = AsyncMock (side_effect = HTTPException (status_code = 404 ))
131
144
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
136
149
'123' , EnvironmentModel (** stub_environment_dump )
137
150
)
138
151
152
+
139
153
def test_update_environment_server_error (
140
154
stub_environment_dump , mock_controller_instance
141
155
):
@@ -145,6 +159,7 @@ def test_update_environment_server_error(
145
159
assert response .status_code == 500
146
160
assert response .json () == {'detail' : 'Internal Server Error' }
147
161
162
+
148
163
def test_delete_environment (mock_controller_instance ):
149
164
mock_reponse = AsyncMock (return_value = EnvironmentDeleted (environment_id = '123' ))
150
165
mock_controller_instance .delete_environment_by_id = mock_reponse
@@ -155,13 +170,15 @@ def test_delete_environment(mock_controller_instance):
155
170
}
156
171
mock_controller_instance .delete_environment_by_id .assert_called_once_with ('123' )
157
172
173
+
158
174
def test_delete_environment_server_error (mock_controller_instance ):
159
175
mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
160
176
mock_controller_instance .delete_environment_by_id = mock_response
161
177
response = client .delete ('/environments/123' )
162
178
assert response .status_code == 500
163
179
assert response .json () == {'detail' : 'Internal Server Error' }
164
180
181
+
165
182
def test_simulate_environment_success (
166
183
stub_environment_summary_dump , mock_controller_instance
167
184
):
@@ -172,6 +189,7 @@ def test_simulate_environment_success(
172
189
assert response .json () == stub_environment_summary_dump
173
190
mock_controller_instance .get_environment_simulation .assert_called_once_with ('123' )
174
191
192
+
175
193
def test_simulate_environment_not_found (mock_controller_instance ):
176
194
mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
177
195
mock_controller_instance .get_environment_simulation = mock_response
@@ -180,14 +198,16 @@ def test_simulate_environment_not_found(mock_controller_instance):
180
198
assert response .json () == {'detail' : 'Not Found' }
181
199
mock_controller_instance .get_environment_simulation .assert_called_once_with ('123' )
182
200
201
+
183
202
def test_simulate_environment_server_error (mock_controller_instance ):
184
203
mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
185
204
mock_controller_instance .get_environment_simulation = mock_response
186
205
response = client .get ('/environments/123/summary' )
187
206
assert response .status_code == 500
188
207
assert response .json () == {'detail' : 'Internal Server Error' }
189
208
190
- def test_read_rocketpy_environment (mock_controller_instance ):
209
+
210
+ def test_read_rocketpy_environment_binary (mock_controller_instance ):
191
211
mock_response = AsyncMock (return_value = b'rocketpy' )
192
212
mock_controller_instance .get_rocketpy_environment_binary = mock_response
193
213
response = client .get ('/environments/123/rocketpy' )
@@ -198,7 +218,8 @@ def test_read_rocketpy_environment(mock_controller_instance):
198
218
'123'
199
219
)
200
220
201
- def test_read_rocketpy_environment_not_found (mock_controller_instance ):
221
+
222
+ def test_read_rocketpy_environment_binary_not_found (mock_controller_instance ):
202
223
mock_response = AsyncMock (side_effect = HTTPException (status_code = 404 ))
203
224
mock_controller_instance .get_rocketpy_environment_binary = mock_response
204
225
response = client .get ('/environments/123/rocketpy' )
@@ -208,7 +229,8 @@ def test_read_rocketpy_environment_not_found(mock_controller_instance):
208
229
'123'
209
230
)
210
231
211
- def test_read_rocketpy_environment_server_error (mock_controller_instance ):
232
+
233
+ def test_read_rocketpy_environment_binary_server_error (mock_controller_instance ):
212
234
mock_response = AsyncMock (side_effect = HTTPException (status_code = 500 ))
213
235
mock_controller_instance .get_rocketpy_environment_binary = mock_response
214
236
response = client .get ('/environments/123/rocketpy' )
0 commit comments