| # Copyright 2014 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. |
| |
| """Django model tests. |
| |
| Unit tests for models and fields defined by the django_util helper. |
| """ |
| |
| import base64 |
| import pickle |
| |
| from tests.contrib.django_util.models import CredentialsModel |
| |
| import unittest2 |
| |
| from oauth2client._helpers import _from_bytes |
| from oauth2client.client import Credentials |
| from oauth2client.contrib.django_util.models import CredentialsField |
| |
| |
| class TestCredentialsField(unittest2.TestCase): |
| |
| def setUp(self): |
| self.fake_model = CredentialsModel() |
| self.fake_model_field = self.fake_model._meta.get_field('credentials') |
| self.field = CredentialsField(null=True) |
| self.credentials = Credentials() |
| self.pickle_str = _from_bytes( |
| base64.b64encode(pickle.dumps(self.credentials))) |
| |
| def test_field_is_text(self): |
| self.assertEqual(self.field.get_internal_type(), 'BinaryField') |
| |
| def test_field_unpickled(self): |
| self.assertIsInstance( |
| self.field.to_python(self.pickle_str), Credentials) |
| |
| def test_field_already_unpickled(self): |
| self.assertIsInstance( |
| self.field.to_python(self.credentials), Credentials) |
| |
| def test_none_field_unpickled(self): |
| self.assertIsNone(self.field.to_python(None)) |
| |
| def test_from_db_value(self): |
| value = self.field.from_db_value( |
| self.pickle_str, None, None, None) |
| self.assertIsInstance(value, Credentials) |
| |
| def test_field_unpickled_none(self): |
| self.assertEqual(self.field.to_python(None), None) |
| |
| def test_field_pickled(self): |
| prep_value = self.field.get_db_prep_value(self.credentials, |
| connection=None) |
| self.assertEqual(prep_value, self.pickle_str) |
| |
| def test_field_value_to_string(self): |
| self.fake_model.credentials = self.credentials |
| value_str = self.fake_model_field.value_to_string(self.fake_model) |
| self.assertEqual(value_str, self.pickle_str) |
| |
| def test_field_value_to_string_none(self): |
| self.fake_model.credentials = None |
| value_str = self.fake_model_field.value_to_string(self.fake_model) |
| self.assertIsNone(value_str) |
| |
| def test_credentials_without_null(self): |
| credentials = CredentialsField() |
| self.assertTrue(credentials.null) |
| |
| |
| class CredentialWithSetStore(CredentialsField): |
| def __init__(self): |
| self.model = CredentialWithSetStore |
| |
| def set_store(self, storage): |
| pass # pragma: NO COVER |
| |
| |
| class FakeCredentialsModelMock(object): |
| |
| credentials = CredentialWithSetStore() |
| |
| |
| class FakeCredentialsModelMockNoSet(object): |
| |
| credentials = CredentialsField() |