33
33
'displayName' : DISPLAY_NAME_1
34
34
}
35
35
MODEL_1 = mlkit .Model (MODEL_JSON_1 )
36
- _DEFAULT_RESPONSE = json .dumps (MODEL_JSON_1 )
36
+ _DEFAULT_GET_RESPONSE = json .dumps (MODEL_JSON_1 )
37
+ _EMPTY_RESPONSE = json .dumps ({})
37
38
38
39
ERROR_CODE = 404
39
40
ERROR_MSG = 'The resource was not found'
47
48
}
48
49
_ERROR_RESPONSE = json .dumps (ERROR_JSON )
49
50
51
+ invalid_model_id_args = [
52
+ ('' , ValueError , 'Model ID format is invalid.' ),
53
+ ('&_*#@:/?' , ValueError , 'Model ID format is invalid.' ),
54
+ (None , TypeError , 'Model ID must be a string.' ),
55
+ (12345 , TypeError , 'Model ID must be a string.' ),
56
+ ]
57
+
58
+ def check_error (err , err_type , msg ):
59
+ assert isinstance (err , err_type )
60
+ assert str (err ) == msg
61
+
62
+
63
+ def check_firebase_error (err , code , status , msg ):
64
+ assert isinstance (err , exceptions .FirebaseError )
65
+ assert err .code == code
66
+ assert err .http_response is not None
67
+ assert err .http_response .status_code == status
68
+ assert str (err ) == msg
69
+
70
+
71
+ def instrument_mlkit_service (app = None , status = 200 , payload = None ):
72
+ if not app :
73
+ app = firebase_admin .get_app ()
74
+ mlkit_service = mlkit ._get_mlkit_service (app )
75
+ recorder = []
76
+ mlkit_service ._client .session .mount (
77
+ 'https://mlkit.googleapis.com' ,
78
+ testutils .MockAdapter (payload , status , recorder )
79
+ )
80
+ return recorder
81
+
50
82
51
83
class TestGetModel (object ):
52
84
"""Tests mlkit.get_model."""
@@ -60,75 +92,81 @@ def teardown_class(cls):
60
92
testutils .cleanup_apps ()
61
93
62
94
@staticmethod
63
- def check_error (err , err_type , msg ):
64
- assert isinstance (err , err_type )
65
- assert str (err ) == msg
66
-
67
- @staticmethod
68
- def check_firebase_error (err , code , status , msg ):
69
- assert isinstance (err , exceptions .FirebaseError )
70
- assert err .code == code
71
- assert err .http_response is not None
72
- assert err .http_response .status_code == status
73
- assert str (err ) == msg
74
-
75
- def _get_url (self , project_id , model_id ):
95
+ def _url (project_id , model_id ):
76
96
return BASE_URL + 'projects/{0}/models/{1}' .format (project_id , model_id )
77
97
78
- def _instrument_mlkit_service (self , app = None , status = 200 , payload = _DEFAULT_RESPONSE ):
79
- if not app :
80
- app = firebase_admin .get_app ()
81
- mlkit_service = mlkit ._get_mlkit_service (app )
82
- recorder = []
83
- mlkit_service ._client .session .mount (
84
- 'https://mlkit.googleapis.com' ,
85
- testutils .MockAdapter (payload , status , recorder )
86
- )
87
- return mlkit_service , recorder
88
-
89
98
def test_get_model (self ):
90
- _ , recorder = self . _instrument_mlkit_service ( )
99
+ recorder = instrument_mlkit_service ( status = 200 , payload = _DEFAULT_GET_RESPONSE )
91
100
model = mlkit .get_model (MODEL_ID_1 )
92
101
assert len (recorder ) == 1
93
102
assert recorder [0 ].method == 'GET'
94
- assert recorder [0 ].url == self . _get_url (PROJECT_ID , MODEL_ID_1 )
103
+ assert recorder [0 ].url == TestGetModel . _url (PROJECT_ID , MODEL_ID_1 )
95
104
assert model == MODEL_1
96
105
assert model ._data ['name' ] == MODEL_NAME_1
97
106
assert model ._data ['displayName' ] == DISPLAY_NAME_1
98
107
99
- def test_get_model_validation_errors (self ):
100
- #Empty model-id
101
- with pytest .raises (ValueError ) as err :
102
- mlkit .get_model ('' )
103
- self .check_error (err .value , ValueError , 'Model ID format is invalid.' )
104
-
105
- #None model-id
106
- with pytest .raises (TypeError ) as err :
107
- mlkit .get_model (None )
108
- self .check_error (err .value , TypeError , 'Model ID must be a string.' )
109
-
110
- #Wrong type
111
- with pytest .raises (TypeError ) as err :
112
- mlkit .get_model (12345 )
113
- self .check_error (err .value , TypeError , 'Model ID must be a string.' )
114
-
115
- #Invalid characters
116
- with pytest .raises (ValueError ) as err :
117
- mlkit .get_model ('&_*#@:/?' )
118
- self .check_error (err .value , ValueError , 'Model ID format is invalid.' )
108
+ @pytest .mark .parametrize ('model_id, exc_type, error_message' , invalid_model_id_args )
109
+ def test_get_model_validation_errors (self , model_id , exc_type , error_message ):
110
+ with pytest .raises (exc_type ) as err :
111
+ mlkit .get_model (model_id )
112
+ check_error (err .value , exc_type , error_message )
119
113
120
114
def test_get_model_error (self ):
121
- _ , recorder = self . _instrument_mlkit_service (status = 404 , payload = _ERROR_RESPONSE )
115
+ recorder = instrument_mlkit_service (status = 404 , payload = _ERROR_RESPONSE )
122
116
with pytest .raises (exceptions .NotFoundError ) as err :
123
117
mlkit .get_model (MODEL_ID_1 )
124
- self . check_firebase_error (err .value , ERROR_STATUS , ERROR_CODE , ERROR_MSG )
118
+ check_firebase_error (err .value , ERROR_STATUS , ERROR_CODE , ERROR_MSG )
125
119
assert len (recorder ) == 1
126
120
assert recorder [0 ].method == 'GET'
127
- assert recorder [0 ].url == self ._get_url (PROJECT_ID , MODEL_ID_1 )
121
+ assert recorder [0 ].url == self ._url (PROJECT_ID , MODEL_ID_1 )
128
122
129
123
def test_no_project_id (self ):
130
124
def evaluate ():
131
125
app = firebase_admin .initialize_app (testutils .MockCredential (), name = 'no_project_id' )
132
126
with pytest .raises (ValueError ):
133
127
mlkit .get_model (MODEL_ID_1 , app )
134
128
testutils .run_without_project_id (evaluate )
129
+
130
+ class TestDeleteModel (object ):
131
+ """Tests mlkit.delete_model."""
132
+ @classmethod
133
+ def setup_class (cls ):
134
+ cred = testutils .MockCredential ()
135
+ firebase_admin .initialize_app (cred , {'projectId' : PROJECT_ID })
136
+
137
+ @classmethod
138
+ def teardown_class (cls ):
139
+ testutils .cleanup_apps ()
140
+
141
+ @staticmethod
142
+ def _url (project_id , model_id ):
143
+ return BASE_URL + 'projects/{0}/models/{1}' .format (project_id , model_id )
144
+
145
+ def test_delete_model (self ):
146
+ recorder = instrument_mlkit_service (status = 200 , payload = _EMPTY_RESPONSE )
147
+ mlkit .delete_model (MODEL_ID_1 ) # no response for delete
148
+ assert len (recorder ) == 1
149
+ assert recorder [0 ].method == 'DELETE'
150
+ assert recorder [0 ].url == TestDeleteModel ._url (PROJECT_ID , MODEL_ID_1 )
151
+
152
+ @pytest .mark .parametrize ('model_id, exc_type, error_message' , invalid_model_id_args )
153
+ def test_delete_model_validation_errors (self , model_id , exc_type , error_message ):
154
+ with pytest .raises (exc_type ) as err :
155
+ mlkit .delete_model (model_id )
156
+ check_error (err .value , exc_type , error_message )
157
+
158
+ def test_delete_model_error (self ):
159
+ recorder = instrument_mlkit_service (status = 404 , payload = _ERROR_RESPONSE )
160
+ with pytest .raises (exceptions .NotFoundError ) as err :
161
+ mlkit .delete_model (MODEL_ID_1 )
162
+ check_firebase_error (err .value , ERROR_STATUS , ERROR_CODE , ERROR_MSG )
163
+ assert len (recorder ) == 1
164
+ assert recorder [0 ].method == 'DELETE'
165
+ assert recorder [0 ].url == self ._url (PROJECT_ID , MODEL_ID_1 )
166
+
167
+ def test_no_project_id (self ):
168
+ def evaluate ():
169
+ app = firebase_admin .initialize_app (testutils .MockCredential (), name = 'no_project_id' )
170
+ with pytest .raises (ValueError ):
171
+ mlkit .delete_model (MODEL_ID_1 , app )
172
+ testutils .run_without_project_id (evaluate )
0 commit comments