@@ -50,12 +50,8 @@ def _get_dataset_prefix_random():
50
50
51
51
52
52
def _get_project_id ():
53
-
54
- project = os .environ .get ('GBQ_PROJECT_ID' )
55
- if not project :
56
- pytest .skip (
57
- "Cannot run integration tests without a project id" )
58
- return project
53
+ return (os .environ .get ('GBQ_PROJECT_ID' )
54
+ or os .environ .get ('GOOGLE_CLOUD_PROJECT' )) # noqa
59
55
60
56
61
57
def _get_private_key_path ():
@@ -85,9 +81,12 @@ def _test_imports():
85
81
gbq ._test_google_api_imports ()
86
82
87
83
88
- @pytest .fixture
89
- def project ():
90
- return _get_project_id ()
84
+ @pytest .fixture (params = ['env' ])
85
+ def project (request ):
86
+ if request .param == 'env' :
87
+ return _get_project_id ()
88
+ elif request .param == 'none' :
89
+ return None
91
90
92
91
93
92
def _check_if_can_get_correct_default_credentials ():
@@ -99,11 +98,13 @@ def _check_if_can_get_correct_default_credentials():
99
98
from google .auth .exceptions import DefaultCredentialsError
100
99
101
100
try :
102
- credentials , _ = google .auth .default (scopes = [gbq .GbqConnector .scope ])
101
+ credentials , project = google .auth .default (
102
+ scopes = [gbq .GbqConnector .scope ])
103
103
except (DefaultCredentialsError , IOError ):
104
104
return False
105
105
106
- return gbq ._try_credentials (_get_project_id (), credentials ) is not None
106
+ return gbq ._try_credentials (
107
+ project or _get_project_id (), credentials ) is not None
107
108
108
109
109
110
def clean_gbq_environment (dataset_prefix , private_key = None ):
@@ -171,46 +172,14 @@ def test_generate_bq_schema_deprecated():
171
172
gbq .generate_bq_schema (df )
172
173
173
174
174
- @pytest .fixture (params = ['local' , 'service_path' , 'service_creds' ])
175
- def auth_type (request ):
176
-
177
- auth = request .param
178
-
179
- if auth == 'local' :
180
-
181
- if _in_travis_environment ():
182
- pytest .skip ("Cannot run local auth in travis environment" )
183
-
184
- elif auth == 'service_path' :
185
-
186
- if _in_travis_environment ():
187
- pytest .skip ("Only run one auth type in Travis to save time" )
188
-
189
- _skip_if_no_private_key_path ()
190
- elif auth == 'service_creds' :
191
- _skip_if_no_private_key_contents ()
192
- else :
193
- raise ValueError
194
- return auth
195
-
196
-
197
175
@pytest .fixture ()
198
- def credentials (auth_type ):
199
-
200
- if auth_type == 'local' :
201
- return None
202
-
203
- elif auth_type == 'service_path' :
204
- return _get_private_key_path ()
205
- elif auth_type == 'service_creds' :
206
- return _get_private_key_contents ()
207
- else :
208
- raise ValueError
176
+ def credentials ():
177
+ _skip_if_no_private_key_contents ()
178
+ return _get_private_key_contents ()
209
179
210
180
211
181
@pytest .fixture ()
212
182
def gbq_connector (project , credentials ):
213
-
214
183
return gbq .GbqConnector (project , private_key = credentials )
215
184
216
185
@@ -220,7 +189,7 @@ def test_should_be_able_to_make_a_connector(self, gbq_connector):
220
189
assert gbq_connector is not None , 'Could not create a GbqConnector'
221
190
222
191
def test_should_be_able_to_get_valid_credentials (self , gbq_connector ):
223
- credentials = gbq_connector .get_credentials ()
192
+ credentials , _ = gbq_connector .get_credentials ()
224
193
assert credentials .valid
225
194
226
195
def test_should_be_able_to_get_a_bigquery_client (self , gbq_connector ):
@@ -236,14 +205,12 @@ def test_should_be_able_to_get_results_from_query(self, gbq_connector):
236
205
assert pages is not None
237
206
238
207
239
- class TestGBQConnectorIntegrationWithLocalUserAccountAuth (object ):
208
+ class TestAuth (object ):
240
209
241
210
@pytest .fixture (autouse = True )
242
- def setup (self , project ):
243
-
244
- _skip_local_auth_if_in_travis_env ()
245
-
246
- self .sut = gbq .GbqConnector (project , auth_local_webserver = True )
211
+ def setup (self , gbq_connector ):
212
+ self .sut = gbq_connector
213
+ self .sut .auth_local_webserver = True
247
214
248
215
def test_get_application_default_credentials_does_not_throw_error (self ):
249
216
if _check_if_can_get_correct_default_credentials ():
@@ -252,27 +219,33 @@ def test_get_application_default_credentials_does_not_throw_error(self):
252
219
from google .auth .exceptions import DefaultCredentialsError
253
220
with mock .patch ('google.auth.default' ,
254
221
side_effect = DefaultCredentialsError ()):
255
- credentials = self .sut .get_application_default_credentials ()
222
+ credentials , _ = self .sut .get_application_default_credentials ()
256
223
else :
257
- credentials = self .sut .get_application_default_credentials ()
224
+ credentials , _ = self .sut .get_application_default_credentials ()
258
225
assert credentials is None
259
226
260
227
def test_get_application_default_credentials_returns_credentials (self ):
261
228
if not _check_if_can_get_correct_default_credentials ():
262
229
pytest .skip ("Cannot get default_credentials "
263
230
"from the environment!" )
264
231
from google .auth .credentials import Credentials
265
- credentials = self .sut .get_application_default_credentials ()
232
+ credentials , default_project = (
233
+ self .sut .get_application_default_credentials ())
234
+
266
235
assert isinstance (credentials , Credentials )
236
+ assert default_project is not None
267
237
268
238
def test_get_user_account_credentials_bad_file_returns_credentials (self ):
239
+ _skip_local_auth_if_in_travis_env ()
269
240
270
241
from google .auth .credentials import Credentials
271
242
with mock .patch ('__main__.open' , side_effect = IOError ()):
272
243
credentials = self .sut .get_user_account_credentials ()
273
244
assert isinstance (credentials , Credentials )
274
245
275
246
def test_get_user_account_credentials_returns_credentials (self ):
247
+ _skip_local_auth_if_in_travis_env ()
248
+
276
249
from google .auth .credentials import Credentials
277
250
credentials = self .sut .get_user_account_credentials ()
278
251
assert isinstance (credentials , Credentials )
@@ -515,7 +488,8 @@ def test_malformed_query(self):
515
488
516
489
def test_bad_project_id (self ):
517
490
with pytest .raises (gbq .GenericGBQException ):
518
- gbq .read_gbq ("SELECT 1" , project_id = '001' ,
491
+ gbq .read_gbq ('SELCET * FROM [publicdata:samples.shakespeare]' ,
492
+ project_id = 'not-my-project' ,
519
493
private_key = self .credentials )
520
494
521
495
def test_bad_table_name (self ):
0 commit comments