1
# Copyright 2012 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Tests for API helpers."""
6
from __future__ import (
15
from collections import namedtuple
17
from django.http import QueryDict
18
from maasserver.api_utils import (
20
extract_oauth_key_from_auth_header,
22
get_overrided_query_dict,
24
from maasserver.exceptions import Unauthorized
25
from maasserver.testing.factory import factory
26
from maasserver.testing.testcase import TestCase
29
class TestGetOverridedQueryDict(TestCase):
31
def test_returns_QueryDict(self):
32
defaults = {factory.getRandomString(): factory.getRandomString()}
33
results = get_overrided_query_dict(defaults, QueryDict(''))
34
expected_results = QueryDict('').copy()
35
expected_results.update(defaults)
36
self.assertEqual(expected_results, results)
38
def test_data_values_override_defaults(self):
39
key = factory.getRandomString()
40
defaults = {key: factory.getRandomString()}
41
data_value = factory.getRandomString()
42
data = {key: data_value}
43
results = get_overrided_query_dict(defaults, data)
44
self.assertEqual([data_value], results.getlist(key))
47
class TestOAuthHelpers(TestCase):
49
def make_fake_request(self, auth_header):
50
"""Create a very simple fake request, with just an auth header."""
51
FakeRequest = namedtuple('FakeRequest', ['META'])
52
return FakeRequest(META={'HTTP_AUTHORIZATION': auth_header})
54
def test_extract_oauth_key_from_auth_header_returns_key(self):
55
token = factory.getRandomString(18)
58
extract_oauth_key_from_auth_header(
59
factory.make_oauth_header(oauth_token=token)))
61
def test_extract_oauth_key_from_auth_header_returns_None_if_missing(self):
62
self.assertIs(None, extract_oauth_key_from_auth_header(''))
64
def test_extract_oauth_key_raises_Unauthorized_if_no_auth_header(self):
67
extract_oauth_key, self.make_fake_request(None))
69
def test_extract_oauth_key_raises_Unauthorized_if_no_key(self):
72
extract_oauth_key, self.make_fake_request(''))
74
def test_extract_oauth_key_returns_key(self):
75
token = factory.getRandomString(18)
78
extract_oauth_key(self.make_fake_request(
79
factory.make_oauth_header(oauth_token=token))))
81
def test_get_oauth_token_finds_token(self):
82
user = factory.make_user()
83
consumer, token = user.get_profile().create_authorisation_token()
87
self.make_fake_request(
88
factory.make_oauth_header(oauth_token=token.key))))
90
def test_get_oauth_token_raises_Unauthorized_for_unknown_token(self):
91
fake_token = factory.getRandomString(18)
92
header = factory.make_oauth_header(oauth_token=fake_token)
95
get_oauth_token, self.make_fake_request(header))