| # 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 |
| import unittest |
| |
| import jsonpickle |
| |
| from oauth2client import _helpers |
| from oauth2client import client |
| from oauth2client.contrib.django_util import models |
| from tests.contrib.django_util import models as tests_models |
| |
| |
| class TestCredentialsField(unittest.TestCase): |
| |
| def setUp(self): |
| self.fake_model = tests_models.CredentialsModel() |
| self.fake_model_field = self.fake_model._meta.get_field('credentials') |
| self.field = models.CredentialsField(null=True) |
| self.credentials = client.Credentials() |
| self.pickle_str = _helpers._from_bytes( |
| base64.b64encode(pickle.dumps(self.credentials))) |
| self.jsonpickle_str = _helpers._from_bytes( |
| base64.b64encode(jsonpickle.encode(self.credentials).encode())) |
| |
| 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), client.Credentials) |
| |
| def test_field_jsonunpickled(self): |
| self.assertIsInstance( |
| self.field.to_python(self.jsonpickle_str), client.Credentials) |
| |
| def test_field_already_unpickled(self): |
| self.assertIsInstance( |
| self.field.to_python(self.credentials), client.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, client.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.jsonpickle_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.jsonpickle_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 = models.CredentialsField() |
| self.assertTrue(credentials.null) |
| |
| |
| class CredentialWithSetStore(models.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 = models.CredentialsField() |