1818from unittest import mock
1919
2020import pytest
21- import responses
2221
2322import client as cl
2423from client import ApiClient , Configuration
2827from merlin .util import guess_mlp_ui_url
2928from merlin .version import VERSION
3029
30+ # get global mock responses that configured in conftest
31+ responses = pytest .responses
32+
3133
3234@pytest .fixture
3335def mock_url ():
@@ -79,10 +81,11 @@ def serialize_datetime(obj):
7981 return obj .isoformat ()
8082 raise TypeError ("Type is not serializable" )
8183
82- def test_get_project (mock_url , mock_oauth , use_google_oauth , mock_responses ):
83- mock_responses .add (
84+ @responses .activate
85+ def test_get_project (mock_url , mock_oauth , use_google_oauth ):
86+ responses .add (
8487 "GET" ,
85- f" { mock_url } / v1/projects?name=my-project " ,
88+ "/api/ v1/projects" ,
8689 body = f"""[{{
8790 "id": 0,
8891 "name": "my-project",
@@ -97,9 +100,9 @@ def test_get_project(mock_url, mock_oauth, use_google_oauth, mock_responses):
97100 m = MerlinClient (mock_url , use_google_oauth = use_google_oauth )
98101 p = m .get_project ("my-project" )
99102
100- assert mock_responses .calls [- 1 ].request .method == "GET"
101- assert mock_responses .calls [- 1 ].request .url == f" { mock_url } /v1/projects?name=my-project"
102- assert mock_responses .calls [- 1 ].request .host == "merlin.dev"
103+ assert responses .calls [- 1 ].request .method == "GET"
104+ assert responses .calls [- 1 ].request .url == "/api /v1/projects?name=my-project"
105+ assert responses .calls [- 1 ].request .host == "merlin.dev"
103106
104107 assert p .id == 0
105108 assert p .name == "my-project"
@@ -109,6 +112,7 @@ def test_get_project(mock_url, mock_oauth, use_google_oauth, mock_responses):
109112 assert isinstance (p .updated_at , datetime .datetime )
110113
111114
115+ @responses .activate
112116def test_create_invalid_project_name (
113117 mock_url , api_client , mock_oauth , use_google_oauth
114118):
@@ -121,24 +125,25 @@ def test_create_invalid_project_name(
121125 assert client .get_project (project_name )
122126
123127
124- def test_create_model (mock_url , api_client , mock_oauth , use_google_oauth , mock_responses ):
128+ @responses .activate
129+ def test_create_model (mock_url , api_client , mock_oauth , use_google_oauth ):
125130 project_id = 1010
126131 mlflow_experiment_id = 1
127132 model_name = "my-model"
128133 project_name = "my-project"
129134 model_type = ModelType .XGBOOST
130135 mlflow_url = "http://mlflow.api.merlin.dev"
131136
132- mock_responses .add (
137+ responses .add (
133138 "GET" ,
134- f"{ mock_url } /v1/projects/{ project_id } /models" ,
139+ f"/api /v1/projects/{ project_id } /models" ,
135140 body = "[]" ,
136141 status = 200 ,
137142 content_type = "application/json" ,
138143 )
139- mock_responses .add (
144+ responses .add (
140145 "POST" ,
141- f"{ mock_url } /v1/projects/{ project_id } /models" ,
146+ f"/api /v1/projects/{ project_id } /models" ,
142147 body = f"""{{
143148 "id": 0,
144149 "project_id": { project_id } ,
@@ -168,7 +173,7 @@ def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_r
168173 "my-model" , project_name = project_name , model_type = model_type
169174 )
170175
171- assert json .loads (mock_responses .calls [- 1 ].request .body ) == json .loads (
176+ assert json .loads (responses .calls [- 1 ].request .body ) == json .loads (
172177 f"""
173178 {{
174179 "name" : "{ model_name } ",
@@ -186,14 +191,15 @@ def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_r
186191 assert isinstance (model .updated_at , datetime .datetime )
187192 assert model .project == project
188193 assert (
189- f"merlin-sdk/{ VERSION } " in mock_responses .calls [- 1 ].request .headers ["User-Agent" ]
194+ f"merlin-sdk/{ VERSION } " in responses .calls [- 1 ].request .headers ["User-Agent" ]
190195 )
191196 assert (
192197 f"python/{ version_info .major } .{ version_info .minor } .{ version_info .micro } "
193- in mock_responses .calls [- 1 ].request .headers ["User-Agent" ]
198+ in responses .calls [- 1 ].request .headers ["User-Agent" ]
194199 )
195200
196201
202+ @responses .activate
197203def test_create_invalid_model_name (mock_url , api_client , mock_oauth , use_google_oauth ):
198204 model_name = "invalidModelName"
199205 project_name = "my-project"
@@ -206,17 +212,18 @@ def test_create_invalid_model_name(mock_url, api_client, mock_oauth, use_google_
206212 assert client .get_or_create_model (model_name , project_name , model_type )
207213
208214
209- def test_get_model (mock_url , api_client , mock_oauth , use_google_oauth , mock_responses ):
215+ @responses .activate
216+ def test_get_model (mock_url , api_client , mock_oauth , use_google_oauth ):
210217 project_id = 1010
211218 mlflow_experiment_id = 1
212219 model_name = "my-model"
213220 project_name = "my-project"
214221 model_type = ModelType .XGBOOST
215222 mlflow_url = "http://mlflow.api.merlin.dev"
216223
217- mock_responses .add (
224+ responses .add (
218225 "GET" ,
219- f"{ mock_url } /v1/projects/{ project_id } /models" ,
226+ f"/api /v1/projects/{ project_id } /models" ,
220227 body = f"""[{{
221228 "id": 1,
222229 "project_id": { project_id } ,
@@ -232,9 +239,9 @@ def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_resp
232239 content_type = "application/json" ,
233240 )
234241
235- mock_responses .add (
242+ responses .add (
236243 "GET" ,
237- f"{ mock_url } /v1/models/1/endpoints" ,
244+ f"/api /v1/models/1/endpoints" ,
238245 body = json .dumps ([mdl_endpoint_1 .to_dict ()], default = serialize_datetime ),
239246 status = 200 ,
240247 content_type = "application/json" ,
@@ -268,6 +275,7 @@ def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_resp
268275 assert default_model_endpoint .environment_name == env_1 .name
269276
270277
278+ @responses .activate
271279def test_new_model_version (mock_url , api_client , mock_oauth , use_google_oauth ):
272280 project_id = 1
273281 model_id = 1
@@ -282,9 +290,9 @@ def test_new_model_version(mock_url, api_client, mock_oauth, use_google_oauth):
282290 created_at = "2019-09-04T03:09:13.842Z"
283291 updated_at = "2019-09-04T03:09:13.843Z"
284292
285- mock_responses .add (
293+ responses .add (
286294 "POST" ,
287- f"{ mock_url } /v1/models/{ model_id } /versions" ,
295+ f"/api /v1/models/{ model_id } /versions" ,
288296 body = f"""{{
289297 "id": { version_id } ,
290298 "model_id": { model_id } ,
@@ -335,10 +343,11 @@ def test_new_model_version(mock_url, api_client, mock_oauth, use_google_oauth):
335343 assert mv .url == f"{ ui_url } /projects/1/models/{ model_id } /versions"
336344
337345
346+ @responses .activate
338347def test_list_environments (mock_url , api_client , mock_oauth , use_google_oauth ):
339- mock_responses .add (
348+ responses .add (
340349 "GET" ,
341- f" { mock_url } /v1/environments" ,
350+ "/api /v1/environments" ,
342351 body = json .dumps ([env_1 .to_dict (), env_2 .to_dict ()]),
343352 status = 200 ,
344353 content_type = "application/json" ,
@@ -355,10 +364,11 @@ def test_list_environments(mock_url, api_client, mock_oauth, use_google_oauth):
355364 assert envs [1 ].is_default == env_2 .is_default
356365
357366
358- def test_get_environment (mock_url , api_client , mock_oauth , use_google_oauth , mock_responses ):
359- mock_responses .add (
367+ @responses .activate
368+ def test_get_environment (mock_url , api_client , mock_oauth , use_google_oauth ):
369+ responses .add (
360370 "GET" ,
361- f" { mock_url } /v1/environments" ,
371+ "/api /v1/environments" ,
362372 body = json .dumps ([env_1 .to_dict (), env_2 .to_dict ()]),
363373 status = 200 ,
364374 content_type = "application/json" ,
@@ -375,10 +385,11 @@ def test_get_environment(mock_url, api_client, mock_oauth, use_google_oauth, moc
375385 assert env is None
376386
377387
378- def test_get_default_environment (mock_url , api_client , mock_oauth , use_google_oauth , mock_responses ):
379- mock_responses .add (
388+ @responses .activate
389+ def test_get_default_environment (mock_url , api_client , mock_oauth , use_google_oauth ):
390+ responses .add (
380391 "GET" ,
381- f" { mock_url } /v1/environments" ,
392+ "/api /v1/environments" ,
382393 body = json .dumps ([env_1 .to_dict (), env_2 .to_dict ()]),
383394 status = 200 ,
384395 content_type = "application/json" ,
@@ -390,11 +401,11 @@ def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oa
390401 assert env .cluster == env_1 .cluster
391402 assert env .is_default == env_1 .is_default
392403
393- mock_responses .reset ()
404+ responses .reset ()
394405
395- mock_responses .add (
406+ responses .add (
396407 "GET" ,
397- f" { mock_url } /v1/environments" ,
408+ "/api /v1/environments" ,
398409 body = json .dumps ([env_2 .to_dict ()]),
399410 status = 200 ,
400411 content_type = "application/json" ,
@@ -404,15 +415,16 @@ def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oa
404415 assert env is None
405416
406417
407- def test_get_default_environment (mock_url , api_client , mock_oauth , use_google_oauth , mock_responses ):
418+ @responses .activate
419+ def test_get_default_environment (mock_url , api_client , mock_oauth , use_google_oauth ):
408420 client = MerlinClient (mock_url , use_google_oauth = use_google_oauth )
409- mock_responses .add (
421+ responses .add (
410422 "GET" ,
411- f" { mock_url } /v1/environments" ,
423+ "/api /v1/environments" ,
412424 body = json .dumps ([env_2 .to_dict ()]),
413425 status = 200 ,
414426 content_type = "application/json" ,
415427 )
416428 env = client .get_default_environment ()
417429
418- assert env is None
430+ assert env is None
0 commit comments