diff --git a/src/gapi/gapiPlusService.ml b/src/gapi/gapiPlusService.ml index 6a8528f1..d4a4d6fa 100644 --- a/src/gapi/gapiPlusService.ml +++ b/src/gapi/gapiPlusService.ml @@ -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 + diff --git a/src/gapi/gapiPlusService.mli b/src/gapi/gapiPlusService.mli index ccd4bf3a..f844ef84 100644 --- a/src/gapi/gapiPlusService.mli +++ b/src/gapi/gapiPlusService.mli @@ -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 *) @@ -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 + diff --git a/src/test/testPlusService.ml b/src/test/testPlusService.ml index ddd14089..d925e102 100644 --- a/src/test/testPlusService.ml +++ b/src/test/testPlusService.ml @@ -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 @@ -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] diff --git a/src/test/testSuite.ml b/src/test/testSuite.ml index f294df84..09401d28 100644 --- a/src/test/testSuite.ml +++ b/src/test/testSuite.ml @@ -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; ]