# Copyright 2016 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 for the DjangoORM storage class.""" # Mock a Django environment import datetime from django.db import models import mock import unittest2 from oauth2client import GOOGLE_TOKEN_URI from oauth2client.client import OAuth2Credentials from oauth2client.contrib.django_util.models import CredentialsField from oauth2client.contrib.django_util.storage import ( DjangoORMStorage as Storage) class TestStorage(unittest2.TestCase): def setUp(self): access_token = 'foo' client_id = 'some_client_id' client_secret = 'cOuDdkfjxxnv+' refresh_token = '1/0/a.df219fjls0' token_expiry = datetime.datetime.utcnow() user_agent = 'refresh_checker/1.0' self.credentials = OAuth2Credentials( access_token, client_id, client_secret, refresh_token, token_expiry, GOOGLE_TOKEN_URI, user_agent) self.key_name = 'id' self.key_value = '1' self.property_name = 'credentials' def test_constructor(self): storage = Storage(FakeCredentialsModel, self.key_name, self.key_value, self.property_name) self.assertEqual(storage.model_class, FakeCredentialsModel) self.assertEqual(storage.key_name, self.key_name) self.assertEqual(storage.key_value, self.key_value) self.assertEqual(storage.property_name, self.property_name) @mock.patch('django.db.models') def test_locked_get(self, djangoModel): fake_model_with_credentials = FakeCredentialsModelMock() entities = [ fake_model_with_credentials ] filter_mock = mock.Mock(return_value=entities) object_mock = mock.Mock() object_mock.filter = filter_mock FakeCredentialsModelMock.objects = object_mock storage = Storage(FakeCredentialsModelMock, self.key_name, self.key_value, self.property_name) credential = storage.locked_get() self.assertEqual( credential, fake_model_with_credentials.credentials) @mock.patch('django.db.models') def test_locked_get_no_entities(self, djangoModel): entities = [] filter_mock = mock.Mock(return_value=entities) object_mock = mock.Mock() object_mock.filter = filter_mock FakeCredentialsModelMock.objects = object_mock storage = Storage(FakeCredentialsModelMock, self.key_name, self.key_value, self.property_name) credential = storage.locked_get() self.assertIsNone(credential) @mock.patch('django.db.models') def test_locked_get_no_set_store(self, djangoModel): fake_model_with_credentials = FakeCredentialsModelMockNoSet() entities = [ fake_model_with_credentials ] filter_mock = mock.Mock(return_value=entities) object_mock = mock.Mock() object_mock.filter = filter_mock FakeCredentialsModelMockNoSet.objects = object_mock storage = Storage(FakeCredentialsModelMockNoSet, self.key_name, self.key_value, self.property_name) credential = storage.locked_get() self.assertEqual( credential, fake_model_with_credentials.credentials) @mock.patch('django.db.models') def test_locked_put(self, djangoModel): entity_mock = mock.Mock(credentials=None) objects = mock.Mock( get_or_create=mock.Mock(return_value=(entity_mock, None))) FakeCredentialsModelMock.objects = objects storage = Storage(FakeCredentialsModelMock, self.key_name, self.key_value, self.property_name) storage.locked_put(self.credentials) @mock.patch('django.db.models') def test_locked_delete(self, djangoModel): class FakeEntities(object): def __init__(self): self.deleted = False def delete(self): self.deleted = True fake_entities = FakeEntities() entities = fake_entities filter_mock = mock.Mock(return_value=entities) object_mock = mock.Mock() object_mock.filter = filter_mock FakeCredentialsModelMock.objects = object_mock storage = Storage(FakeCredentialsModelMock, self.key_name, self.key_value, self.property_name) storage.locked_delete() self.assertTrue(fake_entities.deleted) class CredentialWithSetStore(CredentialsField): def __init__(self): self.model = CredentialWithSetStore def set_store(self, storage): pass class FakeCredentialsModel(models.Model): credentials = CredentialsField() class FakeCredentialsModelMock(object): def __init__(self, *args, **kwargs): self.model = FakeCredentialsModelMock self.saved = False self.deleted = False credentials = CredentialWithSetStore() class FakeCredentialsModelMockNoSet(object): def __init__(self, set_store=False, *args, **kwargs): self.model = FakeCredentialsModelMock self.saved = False self.deleted = False credentials = CredentialsField()