diff --git a/apiclient/contrib/buzz/future.json b/apiclient/contrib/buzz/future.json index 88abf31..ed6f0f9 100644 --- a/apiclient/contrib/buzz/future.json +++ b/apiclient/contrib/buzz/future.json @@ -112,7 +112,12 @@ "methods": { "delete": {}, "get": {}, - "liked": {}, + "liked": { + "next": { + "type": "uri", + "location": ["links", "next", 0, "href"] + } + }, "list": {}, "relatedToUri": {}, "reshared": {}, diff --git a/buzz_gae_client.py b/buzz_gae_client.py index 544655e..ffc74c3 100644 --- a/buzz_gae_client.py +++ b/buzz_gae_client.py @@ -36,6 +36,7 @@ REQUEST_TOKEN_URL = 'https://www.google.com/accounts/OAuthGetRequestToken?domain AUTHORIZE_URL = 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken?domain=anonymous&scope=https://www.googleapis.com/auth/buzz' ACCESS_TOKEN_URL = 'https://www.google.com/accounts/OAuthGetAccessToken' +# TODO(ade) This class is really a BuzzGaeBuilder. Rename it. class BuzzGaeClient(object): def __init__(self, consumer_key='anonymous', consumer_secret='anonymous'): self.consumer = oauth.Consumer(consumer_key, consumer_secret) diff --git a/functional_tests/test_services.py b/functional_tests/test_services.py index faab6cf..7cf5a5d 100644 --- a/functional_tests/test_services.py +++ b/functional_tests/test_services.py @@ -9,13 +9,29 @@ Functional tests that verify we can retrieve data from existing services. These tests are read-only in order to ensure they're repeatable. They also only work with publicly visible data in order to avoid dealing with OAuth. """ +import httplib2 __author__ = 'ade@google.com (Ade Oshineye)' from apiclient.discovery import build +import httplib2 import logging +import os import unittest +# TODO(ade) Remove this mock once the bug in the discovery document is fixed +DATA_DIR = os.path.join(logging.os.path.dirname(__file__), '../tests/data') +class HttpMock(object): + + def __init__(self, filename, headers): + f = file(os.path.join(DATA_DIR, filename), 'r') + self.data = f.read() + f.close() + self.headers = headers + + def request(self, uri, method="GET", body=None, headers=None, redirections=1, connection_type=None): + return httplib2.Response(self.headers), self.data + class BuzzFunctionalTest(unittest.TestCase): def test_can_get_buzz_activities_with_many_params(self): buzz = build('buzz', 'v1') @@ -31,7 +47,7 @@ class BuzzFunctionalTest(unittest.TestCase): activity_count = len(activities['items']) self.assertEquals(max_results, activity_count) - def test_can_page_through_users_activities(self): + def test_can_get_multiple_pages_of_buzz_activities(self): buzz = build('buzz', 'v1') max_results = 2 actcol = buzz.activities() @@ -43,5 +59,21 @@ class BuzzFunctionalTest(unittest.TestCase): activity_count = len(activities['items']) self.assertEquals(max_results, activity_count, 'Failed after %s pages' % str(count)) + def IGNORE__test_can_get_multiple_pages_of_buzz_likers(self): + # Ignore this test until the Buzz API fixes the bug with next links + # http://code.google.com/p/google-buzz-api/issues/detail?id=114 + self.http = HttpMock('buzz.json', {'status': '200'}) + buzz = build('buzz', 'v1', self.http) + max_results = 1 + people_cmd = buzz.people() + #https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13nh535yk2syfob004cdjyb3mjeulcwv3c?alt=json# + people = people_cmd.liked(groupId='@liked', userId='googlebuzz', scope='@self', + postId='B:z13nh535yk2syfob004cdjyb3mjeulcwv3c', max_results=max_results).execute() + + for count in range(10): + people = people_cmd.liked_next(people).execute() + people_count = len(people['items']) + self.assertEquals(max_results, people_count, 'Failed after %s pages' % str(count)) + if __name__ == '__main__': unittest.main() diff --git a/tests/data/buzz.json b/tests/data/buzz.json index f12a445..62af35c 100644 --- a/tests/data/buzz.json +++ b/tests/data/buzz.json @@ -621,7 +621,7 @@ "liked": { "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/{groupId}", "rpcName": "buzz.people.liked", - "httpMethod": "POST", + "httpMethod": "GET", "methodType": "rest", "parameters": { "groupId": { @@ -646,6 +646,11 @@ "pattern": "[^/]+", "required": true }, + "scope": { + "parameterType": "path", + "pattern": "@.*", + "required": true + }, "postId": { "parameterType": "path", "pattern": ".*", diff --git a/tests/test_discovery.py b/tests/test_discovery.py index c44f1e4..374e57c 100644 --- a/tests/test_discovery.py +++ b/tests/test_discovery.py @@ -100,7 +100,7 @@ class Discovery(unittest.TestCase): class Next(unittest.TestCase): - def test_next(self): + def test_next_for_activities_list(self): self.http = HttpMock('buzz.json', {'status': '200'}) buzz = build('buzz', 'v1', self.http) activities = {'links': @@ -109,6 +109,14 @@ class Next(unittest.TestCase): request = buzz.activities().list_next(activities) self.assertEqual(request.uri, 'http://www.googleapis.com/next-link') + def test_next_for_people_liked(self): + self.http = HttpMock('buzz.json', {'status': '200'}) + buzz = build('buzz', 'v1', self.http) + people = {'links': + {'next': + [{'href': 'http://www.googleapis.com/next-link'}]}} + request = buzz.people().liked_next(people) + self.assertEqual(request.uri, 'http://www.googleapis.com/next-link') if __name__ == '__main__': unittest.main()