| # Copyright 2015 Google Inc. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Tests the initialization logic of django_util.""" |
| |
| import copy |
| |
| import django.conf |
| from django.conf.urls import include, url |
| from django.contrib.auth.models import AnonymousUser |
| from django.core import exceptions |
| import mock |
| from six.moves import reload_module |
| from tests.contrib.django_util import TestWithDjangoEnvironment |
| import unittest2 |
| |
| from oauth2client.contrib import django_util |
| import oauth2client.contrib.django_util |
| from oauth2client.contrib.django_util import ( |
| _CREDENTIALS_KEY, get_storage, site, UserOAuth2) |
| |
| |
| urlpatterns = [ |
| url(r'^oauth2/', include(site.urls)) |
| ] |
| |
| |
| class OAuth2SetupTest(unittest2.TestCase): |
| |
| def setUp(self): |
| self.save_settings = copy.deepcopy(django.conf.settings) |
| # OAuth2 Settings gets configured based on Django settings |
| # at import time, so in order for us to reload the settings |
| # we need to reload the module |
| reload_module(oauth2client.contrib.django_util) |
| |
| def tearDown(self): |
| django.conf.settings = copy.deepcopy(self.save_settings) |
| |
| @mock.patch("oauth2client.contrib.django_util.clientsecrets") |
| def test_settings_initialize(self, clientsecrets): |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = 'file.json' |
| clientsecrets.loadfile.return_value = ( |
| clientsecrets.TYPE_WEB, |
| { |
| 'client_id': 'myid', |
| 'client_secret': 'hunter2' |
| } |
| ) |
| |
| oauth2_settings = django_util.OAuth2Settings(django.conf.settings) |
| self.assertTrue(clientsecrets.loadfile.called) |
| self.assertEqual(oauth2_settings.client_id, 'myid') |
| self.assertEqual(oauth2_settings.client_secret, 'hunter2') |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = None |
| |
| @mock.patch("oauth2client.contrib.django_util.clientsecrets") |
| def test_settings_initialize_invalid_type(self, clientsecrets): |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = 'file.json' |
| clientsecrets.loadfile.return_value = ( |
| "wrong_type", |
| { |
| 'client_id': 'myid', |
| 'client_secret': 'hunter2' |
| } |
| ) |
| |
| with self.assertRaises(ValueError): |
| django_util.OAuth2Settings.__init__( |
| object.__new__(django_util.OAuth2Settings), |
| django.conf.settings) |
| |
| @mock.patch("oauth2client.contrib.django_util.clientsecrets") |
| def test_no_settings(self, clientsecrets): |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON = None |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_SECRET = None |
| django.conf.settings.GOOGLE_OAUTH2_CLIENT_ID = None |
| |
| with self.assertRaises(exceptions.ImproperlyConfigured): |
| django_util.OAuth2Settings.__init__( |
| object.__new__(django_util.OAuth2Settings), |
| django.conf.settings) |
| |
| @mock.patch("oauth2client.contrib.django_util.clientsecrets") |
| def test_no_session_middleware(self, clientsecrets): |
| django.conf.settings.MIDDLEWARE_CLASSES = () |
| |
| with self.assertRaises(exceptions.ImproperlyConfigured): |
| django_util.OAuth2Settings.__init__( |
| object.__new__(django_util.OAuth2Settings), |
| django.conf.settings) |
| |
| def test_storage_model(self): |
| STORAGE_MODEL = { |
| 'model': 'tests.contrib.django_util.models.CredentialsModel', |
| 'user_property': 'user_id', |
| 'credentials_property': 'credentials' |
| } |
| django.conf.settings.GOOGLE_OAUTH2_STORAGE_MODEL = STORAGE_MODEL |
| oauth2_settings = django_util.OAuth2Settings(django.conf.settings) |
| self.assertEqual(oauth2_settings.storage_model, STORAGE_MODEL['model']) |
| self.assertEqual(oauth2_settings.storage_model_user_property, |
| STORAGE_MODEL['user_property']) |
| self.assertEqual(oauth2_settings.storage_model_credentials_property, |
| STORAGE_MODEL['credentials_property']) |
| |
| |
| class MockObjectWithSession(object): |
| def __init__(self, session): |
| self.session = session |
| |
| |
| class SessionStorageTest(TestWithDjangoEnvironment): |
| |
| def setUp(self): |
| super(SessionStorageTest, self).setUp() |
| self.save_settings = copy.deepcopy(django.conf.settings) |
| reload_module(oauth2client.contrib.django_util) |
| |
| def tearDown(self): |
| super(SessionStorageTest, self).tearDown() |
| django.conf.settings = copy.deepcopy(self.save_settings) |
| |
| def test_session_delete(self): |
| self.session[_CREDENTIALS_KEY] = "test_val" |
| request = MockObjectWithSession(self.session) |
| django_storage = get_storage(request) |
| django_storage.delete() |
| self.assertIsNone(self.session.get(_CREDENTIALS_KEY)) |
| |
| def test_session_delete_nothing(self): |
| request = MockObjectWithSession(self.session) |
| django_storage = get_storage(request) |
| django_storage.delete() |
| |
| |
| class TestUserOAuth2Object(TestWithDjangoEnvironment): |
| |
| def setUp(self): |
| super(TestUserOAuth2Object, self).setUp() |
| self.save_settings = copy.deepcopy(django.conf.settings) |
| STORAGE_MODEL = { |
| 'model': 'tests.contrib.django_util.models.CredentialsModel', |
| 'user_property': 'user_id', |
| 'credentials_property': 'credentials' |
| } |
| django.conf.settings.GOOGLE_OAUTH2_STORAGE_MODEL = STORAGE_MODEL |
| reload_module(oauth2client.contrib.django_util) |
| |
| def tearDown(self): |
| super(TestUserOAuth2Object, self).tearDown() |
| import django.conf |
| django.conf.settings = copy.deepcopy(self.save_settings) |
| |
| def test_get_credentials_anon_user(self): |
| request = self.factory.get('oauth2/oauth2authorize', |
| data={'return_url': '/return_endpoint'}) |
| request.session = self.session |
| request.user = AnonymousUser() |
| oauth2 = UserOAuth2(request) |
| self.assertIsNone(oauth2.credentials) |