Skip to content

Commit

Permalink
Add Google+ people service and test
Browse files Browse the repository at this point in the history
  • Loading branch information
astrada committed Dec 9, 2011
1 parent 74c3731 commit 639b3c5
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 3 deletions.
68 changes: 68 additions & 0 deletions src/gapi/gapiPlusService.ml
Expand Up @@ -172,3 +172,71 @@ struct

end

module PeopleResourceConf =
struct
type resource_list_t = PeopleFeed.t
type resource_t = Person.t

let service_url =
"https://www.googleapis.com/plus/v1/people"

let parse_resource_list =
GapiJson.parse_json_response PeopleFeed.of_data_model

let parse_resource =
GapiJson.parse_json_response Person.of_data_model

let render_resource =
GapiJson.render_json Person.to_data_model

let create_resource_from_id id =
{ Person.empty with
Person.id = id
}

let get_url ?container_id ?resource base_url =
match resource with
None ->
base_url
| Some r ->
GapiUtils.add_path_to_url
[r.Person.id]
base_url

let get_etag resource =
None

end

module PeopleResource =
struct
include GapiService.Make
(PeopleResourceConf)
(PlusParameters)

let listByActivity
?(url = "https://www.googleapis.com/plus/v1/activities")
?parameters
activity_id
collection
session =
let url' = GapiUtils.add_path_to_url
[activity_id; "people"; collection]
url
in
list
~url:url'
?parameters
session

let search
?(url = PeopleResourceConf.service_url)
parameters
session =
list
~url
~parameters
session

end

49 changes: 49 additions & 0 deletions src/gapi/gapiPlusService.mli
Expand Up @@ -109,6 +109,8 @@ sig

(** Get a comment.
Usage: [get comment_id session] where [comment_id] is the ID of the comment to get, and [session] is the current session.
@param url the service endpoint (defaults to ["https://www.googleapis.com/plus/v1/comments"])
@param parameters request parameters
*)
Expand All @@ -122,3 +124,50 @@ sig

end

(** The "people" collection of methods. *)
module PeopleResource :
sig
(**
List all of the people in the specified collection for a particular activity.
Usage: [listByActivity activity_id collection session] where [activity_id] is the ID of the activity to get the list of people for, [collection] is the collection of people to list, and [session] is the current session.
@param url the service endpoint (defaults to ["https://www.googleapis.com/plus/v1/activities"])
@param parameters request parameters
*)
val listByActivity :
?url:string ->
?parameters:PlusParameters.t ->
string ->
string ->
GapiConversation.Session.t ->
GapiPlus.PeopleFeed.t * GapiConversation.Session.t

(** Search all public profiles.
Usage: [search parameters session] where [parameters] specify the query parameters, and [session] is the current session.
@param url the service endpoint (defaults to ["https://www.googleapis.com/plus/v1/people"])
*)
val search :
?url:string ->
PlusParameters.t ->
GapiConversation.Session.t ->
GapiPlus.PeopleFeed.t * GapiConversation.Session.t

(** Get a person's profile.
Usage: [get user_id session] where [user_id] is the ID of the person to get the profile for. The special value ["me"] can be used to indicate the authenticated user, and [session] is the current session.
@param url the service endpoint (defaults to ["https://www.googleapis.com/plus/v1/people"])
@param parameters request parameters
*)
val get :
?url:string ->
?parameters:GapiService.StandardParameters.t ->
?container_id:string ->
string ->
GapiConversation.Session.t ->
GapiPlus.Person.t * GapiConversation.Session.t

end

69 changes: 68 additions & 1 deletion src/test/testPlusService.ml
Expand Up @@ -86,6 +86,8 @@ let test_search_activities () =
"plus#activityFeed"
activities.GapiPlus.ActivityFeed.kind)

(* Comments *)

let test_list_comments () =
TestHelper.test_request
TestHelper.build_oauth2_auth
Expand Down Expand Up @@ -130,11 +132,76 @@ let test_get_comment () =
cid
comment.GapiPlus.Comment.id)

(* People *)

let test_list_people_by_activity () =
TestHelper.test_request
TestHelper.build_oauth2_auth
(fun session ->
let (activity_id, session) = get_first_activity_id session in
match activity_id with
None ->
()
| Some aid ->
let (plusoners, _) =
GapiPlusService.PeopleResource.listByActivity
aid
"plusoners"
session
in
assert_equal
"plus#peopleFeed"
plusoners.GapiPlus.PeopleFeed.kind)

let test_search_people () =
TestHelper.test_request
TestHelper.build_oauth2_auth
(fun session ->
let (people, _) =
GapiPlusService.PeopleResource.search
{ GapiPlusService.PlusParameters.default with
GapiPlusService.PlusParameters.query = "Larry Page" }
session
in
assert_equal
"plus#peopleFeed"
people.GapiPlus.PeopleFeed.kind;
assert_bool
"There should be at least 1 person matching \"Larry Page\""
(List.length people.GapiPlus.PeopleFeed.items >= 1))

let test_get_person () =
TestHelper.test_request
TestHelper.build_oauth2_auth
(fun session ->
let (people, session) =
GapiPlusService.PeopleResource.search
{ GapiPlusService.PlusParameters.default with
GapiPlusService.PlusParameters.query = "Larry Page" }
session in
let person_id = people
|. GapiPlus.PeopleFeed.items
|. GapiLens.head
|. GapiPlus.Person.id in
let (person, _) =
GapiPlusService.PeopleResource.get
person_id
session
in
assert_equal
"plus#person"
person.GapiPlus.Person.kind;
assert_equal
person_id
person.GapiPlus.Person.id)

let suite = "Google+ services test" >:::
["test_list_activities" >:: test_list_activities;
"test_get_activity" >:: test_get_activity;
"test_search_activities" >:: test_search_activities;
"test_list_comments" >:: test_list_comments;
"test_get_comment" >:: test_get_comment;
]
"test_list_people_by_activity" >:: test_list_people_by_activity;
"test_search_people" >:: test_search_people;
"test_get_person" >:: test_get_person]

4 changes: 2 additions & 2 deletions src/test/testSuite.ml
Expand Up @@ -7,8 +7,8 @@ let suite = "Google API OCaml client test suite" >:::
TestAuth.suite;
TestCalendarService.suite;
TestMonadic.suite;
TestCalendarServiceV3.suite;*)
TestPlusService.suite;
TestCalendarServiceV3.suite;
TestPlusService.suite;*)
TestCalendarModelV3.suite;
TestPlusModel.suite;
]
Expand Down

0 comments on commit 639b3c5

Please sign in to comment.