blob: bfe55cfce419bc0d69a8cd21c61672b92e2e4afa [file] [log] [blame]
Joe Gregoriod27ae3e2010-12-09 15:01:27 -05001#!/usr/bin/python2.4
2#
3# Copyright 2010 Google Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17"""Mock tests
18
19Unit tests for the Mocks.
20"""
21
22__author__ = 'jcgregorio@google.com (Joe Gregorio)'
23
Joe Gregorioe1de4162011-02-23 11:30:29 -050024import httplib2
25import os
26import unittest
27
Joe Gregorio3fada332011-01-07 17:07:45 -050028from apiclient.errors import HttpError
Joe Gregorioa388ce32011-09-09 17:19:13 -040029from apiclient.errors import UnexpectedBodyError
30from apiclient.errors import UnexpectedMethodError
Joe Gregoriod27ae3e2010-12-09 15:01:27 -050031from apiclient.discovery import build
32from apiclient.http import RequestMockBuilder
Joe Gregoriocb8103d2011-02-11 23:20:52 -050033from apiclient.http import HttpMock
Joe Gregoriod27ae3e2010-12-09 15:01:27 -050034
Joe Gregoriocb8103d2011-02-11 23:20:52 -050035
36DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
37
38def datafile(filename):
39 return os.path.join(DATA_DIR, filename)
Joe Gregoriod27ae3e2010-12-09 15:01:27 -050040
41
42class Mocks(unittest.TestCase):
43 def setUp(self):
Joe Gregoriocb8103d2011-02-11 23:20:52 -050044 self.http = HttpMock(datafile('buzz.json'), {'status': '200'})
Joe Gregoriod27ae3e2010-12-09 15:01:27 -050045
46 def test_default_response(self):
47 requestBuilder = RequestMockBuilder({})
48 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
49 activity = buzz.activities().get(postId='tag:blah', userId='@me').execute()
50 self.assertEqual({}, activity)
51
52 def test_simple_response(self):
53 requestBuilder = RequestMockBuilder({
54 'chili.activities.get': (None, '{"data": {"foo": "bar"}}')
55 })
56 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
57
58 activity = buzz.activities().get(postId='tag:blah', userId='@me').execute()
59 self.assertEqual({"foo": "bar"}, activity)
60
Joe Gregorioa388ce32011-09-09 17:19:13 -040061 def test_unexpected_call(self):
62 requestBuilder = RequestMockBuilder({}, check_unexpected=True)
63
64 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
65
66 try:
67 buzz.activities().get(postId='tag:blah', userId='@me').execute()
68 self.fail('UnexpectedMethodError should have been raised')
69 except UnexpectedMethodError:
70 pass
71
72 def test_simple_unexpected_body(self):
73 requestBuilder = RequestMockBuilder({
74 'chili.activities.insert': (None, '{"data": {"foo": "bar"}}', None)
75 })
76 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
77
78 try:
79 buzz.activities().insert(userId='@me', body='{}').execute()
80 self.fail('UnexpectedBodyError should have been raised')
81 except UnexpectedBodyError:
82 pass
83
84 def test_simple_expected_body(self):
85 requestBuilder = RequestMockBuilder({
86 'chili.activities.insert': (None, '{"data": {"foo": "bar"}}', '{}')
87 })
88 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
89
90 try:
91 buzz.activities().insert(userId='@me', body='').execute()
92 self.fail('UnexpectedBodyError should have been raised')
93 except UnexpectedBodyError:
94 pass
95
96 def test_simple_wrong_body(self):
97 requestBuilder = RequestMockBuilder({
98 'chili.activities.insert': (None, '{"data": {"foo": "bar"}}',
99 '{"data": {"foo": "bar"}}')
100 })
101 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
102
103 try:
104 buzz.activities().insert(
105 userId='@me', body='{"data": {"foo": "blah"}}').execute()
106 self.fail('UnexpectedBodyError should have been raised')
107 except UnexpectedBodyError:
108 pass
109
110 def test_simple_matching_str_body(self):
111 requestBuilder = RequestMockBuilder({
112 'chili.activities.insert': (None, '{"data": {"foo": "bar"}}',
113 '{"data": {"foo": "bar"}}')
114 })
115 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
116
117 activity = buzz.activities().insert(
118 userId='@me', body={'data': {'foo': 'bar'}}).execute()
119 self.assertEqual({'foo': 'bar'}, activity)
120
121 def test_simple_matching_dict_body(self):
122 requestBuilder = RequestMockBuilder({
123 'chili.activities.insert': (None, '{"data": {"foo": "bar"}}',
124 {'data': {'foo': 'bar'}})
125 })
126 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
127
128 activity = buzz.activities().insert(
129 userId='@me', body={'data': {'foo': 'bar'}}).execute()
130 self.assertEqual({'foo': 'bar'}, activity)
Joe Gregoriod27ae3e2010-12-09 15:01:27 -0500131
132 def test_errors(self):
133 errorResponse = httplib2.Response({'status': 500, 'reason': 'Server Error'})
134 requestBuilder = RequestMockBuilder({
135 'chili.activities.list': (errorResponse, '{}')
136 })
137 buzz = build('buzz', 'v1', http=self.http, requestBuilder=requestBuilder)
138
139 try:
140 activity = buzz.activities().list(scope='@self', userId='@me').execute()
141 self.fail('An exception should have been thrown')
142 except HttpError, e:
Joe Gregoriod4e14562011-01-04 09:51:45 -0500143 self.assertEqual('{}', e.content)
Joe Gregoriod27ae3e2010-12-09 15:01:27 -0500144 self.assertEqual(500, e.resp.status)
145 self.assertEqual('Server Error', e.resp.reason)
146
147
Joe Gregoriod27ae3e2010-12-09 15:01:27 -0500148if __name__ == '__main__':
149 unittest.main()