Nox system test refactor (#60)

* Add basic noxfile to orchestrate system tests
* Move explicit system tests to nox
* Add cloud sdk environment automation
diff --git a/system_tests/test_default.py b/system_tests/test_default.py
index 02242e9..0e0bcc6 100644
--- a/system_tests/test_default.py
+++ b/system_tests/test_default.py
@@ -14,108 +14,17 @@
 
 import os
 
-import py
-
 import google.auth
-from google.auth import environment_vars
-import google.oauth2.credentials
-from google.oauth2 import service_account
+
+EXPECT_PROJECT_ID = os.environ.get('EXPECT_PROJECT_ID')
 
 
-def validate_refresh(credentials, http_request):
-    if credentials.requires_scopes:
-        credentials = credentials.with_scopes(['email', 'profile'])
-
-    credentials.refresh(http_request)
-
-    assert credentials.token
-    assert credentials.valid
-
-
-def test_explicit_credentials_service_account(
-        monkeypatch, service_account_file, http_request):
-    monkeypatch.setitem(
-        os.environ, environment_vars.CREDENTIALS, service_account_file)
-
+def test_explicit_credentials(verify_refresh):
     credentials, project_id = google.auth.default()
 
-    assert isinstance(credentials, service_account.Credentials)
-    assert project_id is not None
+    if EXPECT_PROJECT_ID is not None:
+        assert project_id is not None
+    else:
+        assert project_id is None
 
-    validate_refresh(credentials, http_request)
-
-
-def test_explicit_credentials_authorized_user(
-        monkeypatch, authorized_user_file, http_request):
-    monkeypatch.setitem(
-        os.environ, environment_vars.CREDENTIALS, authorized_user_file)
-
-    credentials, project_id = google.auth.default()
-
-    assert isinstance(credentials, google.oauth2.credentials.Credentials)
-    assert project_id is None
-
-    validate_refresh(credentials, http_request)
-
-
-def test_explicit_credentials_explicit_project_id(
-        monkeypatch, service_account_file, http_request):
-    project = 'system-test-project'
-    monkeypatch.setitem(
-        os.environ, environment_vars.CREDENTIALS, service_account_file)
-    monkeypatch.setitem(
-        os.environ, environment_vars.PROJECT, project)
-
-    _, project_id = google.auth.default()
-
-    assert project_id == project
-
-
-def generate_cloud_sdk_config(
-        tmpdir, credentials_file, active_config='default', project=None):
-    tmpdir.join('active_config').write(
-        '{}\n'.format(active_config), ensure=True)
-
-    if project is not None:
-        config_file = tmpdir.join(
-            'configurations', 'config_{}'.format(active_config))
-        config_file.write(
-            '[core]\nproject = {}'.format(project), ensure=True)
-
-    py.path.local(credentials_file).copy(
-        tmpdir.join('application_default_credentials.json'))
-
-
-def test_cloud_sdk_credentials_service_account(
-        tmpdir, monkeypatch, service_account_file, http_request):
-    # Create the Cloud SDK configuration tree
-    project = 'system-test-project'
-    generate_cloud_sdk_config(tmpdir, service_account_file, project=project)
-    monkeypatch.setitem(
-        os.environ, environment_vars.CLOUD_SDK_CONFIG_DIR, str(tmpdir))
-
-    credentials, project_id = google.auth.default()
-
-    assert isinstance(credentials, service_account.Credentials)
-    assert project_id is not None
-    # The project ID should be the project ID specified in the the service
-    # account file, not the project in the config.
-    assert project_id is not project
-
-    validate_refresh(credentials, http_request)
-
-
-def test_cloud_sdk_credentials_authorized_user(
-        tmpdir, monkeypatch, authorized_user_file, http_request):
-    # Create the Cloud SDK configuration tree
-    project = 'system-test-project'
-    generate_cloud_sdk_config(tmpdir, authorized_user_file, project=project)
-    monkeypatch.setitem(
-        os.environ, environment_vars.CLOUD_SDK_CONFIG_DIR, str(tmpdir))
-
-    credentials, project_id = google.auth.default()
-
-    assert isinstance(credentials, google.oauth2.credentials.Credentials)
-    assert project_id == project
-
-    validate_refresh(credentials, http_request)
+    verify_refresh(credentials)