1# Copyright 2016 Google Inc. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15"""Unit tests for oauth2client.contrib.dictionary_storage"""
16
17import unittest2
18
19import oauth2client
20from oauth2client import client
21from oauth2client.contrib import dictionary_storage
22
23
24def _generate_credentials(scopes=None):
25    return client.OAuth2Credentials(
26        'access_tokenz',
27        'client_idz',
28        'client_secretz',
29        'refresh_tokenz',
30        '3600',
31        oauth2client.GOOGLE_TOKEN_URI,
32        'Test',
33        id_token={
34            'sub': '123',
35            'email': '[email protected]'
36        },
37        scopes=scopes)
38
39
40class DictionaryStorageTests(unittest2.TestCase):
41
42    def test_constructor_defaults(self):
43        dictionary = {}
44        key = 'test-key'
45        storage = dictionary_storage.DictionaryStorage(dictionary, key)
46
47        self.assertEqual(dictionary, storage._dictionary)
48        self.assertEqual(key, storage._key)
49        self.assertIsNone(storage._lock)
50
51    def test_constructor_explicit(self):
52        dictionary = {}
53        key = 'test-key'
54        storage = dictionary_storage.DictionaryStorage(dictionary, key)
55
56        lock = object()
57        storage = dictionary_storage.DictionaryStorage(
58            dictionary, key, lock=lock)
59        self.assertEqual(storage._lock, lock)
60
61    def test_get(self):
62        credentials = _generate_credentials()
63        dictionary = {}
64        key = 'credentials'
65        storage = dictionary_storage.DictionaryStorage(dictionary, key)
66
67        self.assertIsNone(storage.get())
68
69        dictionary[key] = credentials.to_json()
70        returned = storage.get()
71
72        self.assertIsNotNone(returned)
73        self.assertEqual(returned.access_token, credentials.access_token)
74        self.assertEqual(returned.id_token, credentials.id_token)
75        self.assertEqual(returned.refresh_token, credentials.refresh_token)
76        self.assertEqual(returned.client_id, credentials.client_id)
77
78    def test_put(self):
79        credentials = _generate_credentials()
80        dictionary = {}
81        key = 'credentials'
82        storage = dictionary_storage.DictionaryStorage(dictionary, key)
83
84        storage.put(credentials)
85        returned = storage.get()
86
87        self.assertIn(key, dictionary)
88        self.assertIsNotNone(returned)
89        self.assertEqual(returned.access_token, credentials.access_token)
90        self.assertEqual(returned.id_token, credentials.id_token)
91        self.assertEqual(returned.refresh_token, credentials.refresh_token)
92        self.assertEqual(returned.client_id, credentials.client_id)
93
94    def test_delete(self):
95        credentials = _generate_credentials()
96        dictionary = {}
97        key = 'credentials'
98        storage = dictionary_storage.DictionaryStorage(dictionary, key)
99
100        storage.put(credentials)
101
102        self.assertIn(key, dictionary)
103
104        storage.delete()
105
106        self.assertNotIn(key, dictionary)
107        self.assertIsNone(storage.get())
108