@@ -50,12 +50,8 @@ def _get_dataset_prefix_random():
5050
5151
5252def _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
5955
6056
6157def _get_private_key_path ():
@@ -85,9 +81,12 @@ def _test_imports():
8581 gbq ._test_google_api_imports ()
8682
8783
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
9190
9291
9392def _check_if_can_get_correct_default_credentials ():
@@ -99,11 +98,13 @@ def _check_if_can_get_correct_default_credentials():
9998 from google .auth .exceptions import DefaultCredentialsError
10099
101100 try :
102- credentials , _ = google .auth .default (scopes = [gbq .GbqConnector .scope ])
101+ credentials , project = google .auth .default (
102+ scopes = [gbq .GbqConnector .scope ])
103103 except (DefaultCredentialsError , IOError ):
104104 return False
105105
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
107108
108109
109110def clean_gbq_environment (dataset_prefix , private_key = None ):
@@ -171,46 +172,14 @@ def test_generate_bq_schema_deprecated():
171172 gbq .generate_bq_schema (df )
172173
173174
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-
197175@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 ()
209179
210180
211181@pytest .fixture ()
212182def gbq_connector (project , credentials ):
213-
214183 return gbq .GbqConnector (project , private_key = credentials )
215184
216185
@@ -220,7 +189,7 @@ def test_should_be_able_to_make_a_connector(self, gbq_connector):
220189 assert gbq_connector is not None , 'Could not create a GbqConnector'
221190
222191 def test_should_be_able_to_get_valid_credentials (self , gbq_connector ):
223- credentials = gbq_connector .get_credentials ()
192+ credentials , _ = gbq_connector .get_credentials ()
224193 assert credentials .valid
225194
226195 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):
236205 assert pages is not None
237206
238207
239- class TestGBQConnectorIntegrationWithLocalUserAccountAuth (object ):
208+ class TestAuth (object ):
240209
241210 @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
247214
248215 def test_get_application_default_credentials_does_not_throw_error (self ):
249216 if _check_if_can_get_correct_default_credentials ():
@@ -252,27 +219,33 @@ def test_get_application_default_credentials_does_not_throw_error(self):
252219 from google .auth .exceptions import DefaultCredentialsError
253220 with mock .patch ('google.auth.default' ,
254221 side_effect = DefaultCredentialsError ()):
255- credentials = self .sut .get_application_default_credentials ()
222+ credentials , _ = self .sut .get_application_default_credentials ()
256223 else :
257- credentials = self .sut .get_application_default_credentials ()
224+ credentials , _ = self .sut .get_application_default_credentials ()
258225 assert credentials is None
259226
260227 def test_get_application_default_credentials_returns_credentials (self ):
261228 if not _check_if_can_get_correct_default_credentials ():
262229 pytest .skip ("Cannot get default_credentials "
263230 "from the environment!" )
264231 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+
266235 assert isinstance (credentials , Credentials )
236+ assert default_project is not None
267237
268238 def test_get_user_account_credentials_bad_file_returns_credentials (self ):
239+ _skip_local_auth_if_in_travis_env ()
269240
270241 from google .auth .credentials import Credentials
271242 with mock .patch ('__main__.open' , side_effect = IOError ()):
272243 credentials = self .sut .get_user_account_credentials ()
273244 assert isinstance (credentials , Credentials )
274245
275246 def test_get_user_account_credentials_returns_credentials (self ):
247+ _skip_local_auth_if_in_travis_env ()
248+
276249 from google .auth .credentials import Credentials
277250 credentials = self .sut .get_user_account_credentials ()
278251 assert isinstance (credentials , Credentials )
@@ -515,7 +488,8 @@ def test_malformed_query(self):
515488
516489 def test_bad_project_id (self ):
517490 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' ,
519493 private_key = self .credentials )
520494
521495 def test_bad_table_name (self ):
0 commit comments