google_contacts_api 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,196 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe "Testgem" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
3
+ describe "GoogleContactsApi" do
4
+ describe "Api" do
5
+ before(:each) do
6
+ @oauth = double("oauth")
7
+ @oauth.stub(:get).and_return("get response")
8
+ @api = GoogleContactsApi::Api.new(@oauth)
9
+ end
10
+
11
+ it "should perform a get request using oauth returning json" do
12
+ # expectation should come before execution
13
+ @oauth.should_receive(:get).with(
14
+ GoogleContactsApi::Api::BASE_URL + "any_url?alt=json&param=param", {"header" => "header"})
15
+ @api.get("any_url",
16
+ {"param" => "param"},
17
+ {"header" => "header"}).should == ("get response")
18
+ end
19
+ # Not implemented yet
20
+ pending "should perform a post request using oauth"
21
+ pending "should perform a put request using oauth"
22
+ pending "should perform a delete request using oauth"
23
+ end
24
+
25
+ describe "User" do
26
+ before(:each) do
27
+ @oauth = double("oauth")
28
+ @user = GoogleContactsApi::User.new(@oauth)
29
+ @user.api.stub(:get).and_return(Hashie::Mash.new({
30
+ "body" => "some response", # could use example response here
31
+ "code" => 200
32
+ }))
33
+ GoogleContactsApi::GroupSet.stub(:new).and_return("group set")
34
+ GoogleContactsApi::ContactSet.stub(:new).and_return("contact set")
35
+ end
36
+ # Should hit the right URLs and return the right stuff
37
+ it "should be able to get groups" do
38
+ @user.api.should_receive(:get).with("groups/default/full", anything, {"GData-Version" => "2"})
39
+ @user.groups.should == "group set"
40
+ end
41
+ it "should be able to get contacts" do
42
+ @user.api.should_receive(:get).with("contacts/default/full", anything)
43
+ @user.contacts.should == "contact set"
44
+ end
45
+ end
46
+
47
+ describe "ResultSet" do
48
+ # no testing, it's just an implementation detail to use inheritance
49
+ end
50
+
51
+ describe "ContactSet" do
52
+ before(:all) do
53
+ @contact_set_json = contact_set_json
54
+ @contact_set = GoogleContactsApi::ContactSet.new(@contact_set_json)
55
+ end
56
+
57
+ it "should return the right starting index" do
58
+ @contact_set.start_index.should == 1
59
+ end
60
+ it "should return the right number of results per page" do
61
+ @contact_set.items_per_page.should == 25
62
+ end
63
+ it "should return the right number of total results" do
64
+ @contact_set.total_results.should == 500
65
+ end
66
+ it "should tell me if there are more results" do
67
+ # yeah this is an awkward assertion and matcher
68
+ @contact_set.should be_has_more
69
+ @contact_set.has_more?.should == true
70
+ end
71
+ it "should parse results into Contacts" do
72
+ @contact_set.to_a.first.should be_instance_of(GoogleContactsApi::Contact)
73
+ end
74
+ end
75
+
76
+ describe "GroupSet" do
77
+ before(:all) do
78
+ @group_set_json = group_set_json
79
+ @group_set = GoogleContactsApi::GroupSet.new(@group_set_json)
80
+ end
81
+
82
+ it "should return the right starting index" do
83
+ @group_set.start_index.should == 1
84
+ end
85
+ it "should return the right number of results per page" do
86
+ @group_set.items_per_page.should == 25
87
+ end
88
+ it "should return the right number of total results" do
89
+ @group_set.total_results.should == 5
90
+ end
91
+ it "should tell me if there are more results" do
92
+ # yeah this is an awkward assertion and matcher
93
+ @group_set.should_not be_has_more
94
+ @group_set.has_more?.should == false
95
+ end
96
+ it "should parse results into Groups" do
97
+ @group_set.to_a.first.should be_instance_of(GoogleContactsApi::Group)
98
+ end
99
+ end
100
+
101
+ describe "Result" do
102
+ # no testing, it's just an implementation detail to inherit
103
+ end
104
+
105
+ describe "Contact" do
106
+ before(:all) do
107
+ @contact_json_hash = contact_json_hash
108
+ @contact = GoogleContactsApi::Contact.new(@contact_json_hash)
109
+ end
110
+ # ok, these tests are kind of silly
111
+ it "should return the right title" do
112
+ @contact.title.should == "Contact 1"
113
+ end
114
+ it "should return the right id" do
115
+ @contact.id.should == "http://www.google.com/m8/feeds/contacts/example%40gmail.com/base/0"
116
+ end
117
+ it "should return the right content" do
118
+ # TODO: Nothing in source, oops
119
+ @contact.content.should == nil
120
+ end
121
+ it "should return the right updated time" do
122
+ # different representation slightly
123
+ @contact.updated.to_s.should == "2011-07-07T21:02:42+00:00"
124
+ end
125
+ it "should return the right self link" do
126
+ @contact.self_link.should == "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full/0"
127
+ end
128
+ it "should return the right photo link" do
129
+ @contact.photo_link.should == "https://www.google.com/m8/feeds/photos/media/example%40gmail.com/0"
130
+ end
131
+ it "should return the right edit link" do
132
+ @contact.edit_link.should == "https://www.google.com/m8/feeds/contacts/example%40gmail.com/full/0"
133
+ end
134
+ it "should return the right edit photo link" do
135
+ # TODO: there isn't one in this contact, hahah
136
+ @contact.edit_photo_link.should == nil
137
+ end
138
+ it "should try to fetch a photo" do
139
+ @oauth = mock("oauth")
140
+ @oauth.stub(:get).and_return(Hashie::Mash.new({
141
+ "body" => "some response", # could use example response here
142
+ "code" => 200
143
+ }))
144
+ # @api = GoogleContactsApi::Api.new(@oauth)
145
+ @api = mock("api")
146
+ @api.stub(:oauth).and_return(@oauth)
147
+ @contact = GoogleContactsApi::Contact.new(@contact_json_hash, nil, @api)
148
+ @oauth.should_receive("get").with(@contact.photo_link)
149
+ @contact.photo
150
+ end
151
+ it "should return all e-mail addresses" do
152
+ @contact.emails.should == ["contact1@example.com"]
153
+ end
154
+ it "should return the right primary e-mail address" do
155
+ @contact.primary_email.should == "contact1@example.com"
156
+ end
157
+ end
158
+
159
+ describe "Group" do
160
+ before(:all) do
161
+ @group_json_hash = group_json_hash
162
+ @group = GoogleContactsApi::Group.new(group_json_hash)
163
+ end
164
+ # ok, these tests are kind of silly
165
+ it "should return the right title" do
166
+ @group.title.should == "System Group: My Contacts"
167
+ end
168
+ it "should return the right id" do
169
+ @group.id.should == "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/6"
170
+ end
171
+ it "should return the right content" do
172
+ # TODO: Nothing in source, oops
173
+ @group.content.should == "System Group: My Contacts"
174
+ end
175
+ it "should return the right updated time" do
176
+ # different representation slightly
177
+ @group.updated.to_s.should == "1970-01-01T00:00:00+00:00"
178
+ end
179
+ it "should tell me if it's a system group" do
180
+ @group.should be_system_group
181
+ end
182
+ it "should get contacts from the group and cache them" do
183
+ @api = mock("api")
184
+ @api.stub(:get).and_return(Hashie::Mash.new({
185
+ "body" => "some response", # could use example response here
186
+ "code" => 200
187
+ }))
188
+ GoogleContactsApi::ContactSet.stub(:new).and_return("contact set")
189
+ @group = GoogleContactsApi::Group.new(@contact_json_hash, nil, @api)
190
+ @api.should_receive("get").with(an_instance_of(String),
191
+ hash_including({"group" => @group.id})).once
192
+ @group.contacts
193
+ @group.contacts
194
+ end
6
195
  end
7
196
  end
@@ -0,0 +1,213 @@
1
+ {
2
+ "version": "1.0",
3
+ "encoding": "UTF-8",
4
+ "feed": {
5
+ "xmlns": "http://www.w3.org/2005/Atom",
6
+ "xmlns$openSearch": "http://a9.com/-/spec/opensearch/1.1/",
7
+ "xmlns$gContact": "http://schemas.google.com/contact/2008",
8
+ "xmlns$batch": "http://schemas.google.com/gdata/batch",
9
+ "xmlns$gd": "http://schemas.google.com/g/2005",
10
+ "gd$etag": "W/\"C0UESXY5eip7ImA9WhdTEkw.\"",
11
+ "id": {
12
+ "$t": "example@gmail.com"
13
+ },
14
+ "updated": {
15
+ "$t": "2011-07-09T11:33:28.822Z"
16
+ },
17
+ "category": [{
18
+ "scheme": "http://schemas.google.com/g/2005#kind",
19
+ "term": "http://schemas.google.com/contact/2008#group"
20
+ }],
21
+ "title": {
22
+ "$t": "Example User's Contact Groups"
23
+ },
24
+ "link": [{
25
+ "rel": "alternate",
26
+ "type": "text/html",
27
+ "href": "http://www.google.com/"
28
+ },
29
+ {
30
+ "rel": "http://schemas.google.com/g/2005#feed",
31
+ "type": "application/atom+xml",
32
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full"
33
+ },
34
+ {
35
+ "rel": "http://schemas.google.com/g/2005#post",
36
+ "type": "application/atom+xml",
37
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full"
38
+ },
39
+ {
40
+ "rel": "http://schemas.google.com/g/2005#batch",
41
+ "type": "application/atom+xml",
42
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/batch"
43
+ },
44
+ {
45
+ "rel": "self",
46
+ "type": "application/atom+xml",
47
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full?alt\u003djson\u0026max-results\u003d25"
48
+ }],
49
+ "author": [{
50
+ "name": {
51
+ "$t": "Example User"
52
+ },
53
+ "email": {
54
+ "$t": "example@gmail.com"
55
+ }
56
+ }],
57
+ "generator": {
58
+ "version": "1.0",
59
+ "uri": "http://www.google.com/m8/feeds",
60
+ "$t": "Contacts"
61
+ },
62
+ "openSearch$totalResults": {
63
+ "$t": "5"
64
+ },
65
+ "openSearch$startIndex": {
66
+ "$t": "1"
67
+ },
68
+ "openSearch$itemsPerPage": {
69
+ "$t": "25"
70
+ },
71
+ "entry": [{
72
+ "gd$etag": "\"YDwqeyI.\"",
73
+ "id": {
74
+ "$t": "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/6"
75
+ },
76
+ "updated": {
77
+ "$t": "1970-01-01T00:00:00.000Z"
78
+ },
79
+ "category": [{
80
+ "scheme": "http://schemas.google.com/g/2005#kind",
81
+ "term": "http://schemas.google.com/contact/2008#group"
82
+ }],
83
+ "title": {
84
+ "$t": "System Group: My Contacts"
85
+ },
86
+ "content": {
87
+ "$t": "System Group: My Contacts"
88
+ },
89
+ "link": [{
90
+ "rel": "self",
91
+ "type": "application/atom+xml",
92
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/6"
93
+ }],
94
+ "gContact$systemGroup": {
95
+ "id": "Contacts"
96
+ }
97
+ },
98
+ {
99
+ "gd$etag": "\"YDwqeyI.\"",
100
+ "id": {
101
+ "$t": "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/d"
102
+ },
103
+ "updated": {
104
+ "$t": "1970-01-01T00:00:00.000Z"
105
+ },
106
+ "category": [{
107
+ "scheme": "http://schemas.google.com/g/2005#kind",
108
+ "term": "http://schemas.google.com/contact/2008#group"
109
+ }],
110
+ "title": {
111
+ "$t": "System Group: Friends"
112
+ },
113
+ "content": {
114
+ "$t": "System Group: Friends"
115
+ },
116
+ "link": [{
117
+ "rel": "self",
118
+ "type": "application/atom+xml",
119
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/d"
120
+ }],
121
+ "gContact$systemGroup": {
122
+ "id": "Friends"
123
+ }
124
+ },
125
+ {
126
+ "gd$etag": "\"YDwqeyI.\"",
127
+ "id": {
128
+ "$t": "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/e"
129
+ },
130
+ "updated": {
131
+ "$t": "1970-01-01T00:00:00.000Z"
132
+ },
133
+ "category": [{
134
+ "scheme": "http://schemas.google.com/g/2005#kind",
135
+ "term": "http://schemas.google.com/contact/2008#group"
136
+ }],
137
+ "title": {
138
+ "$t": "System Group: Family"
139
+ },
140
+ "content": {
141
+ "$t": "System Group: Family"
142
+ },
143
+ "link": [{
144
+ "rel": "self",
145
+ "type": "application/atom+xml",
146
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/e"
147
+ }],
148
+ "gContact$systemGroup": {
149
+ "id": "Family"
150
+ }
151
+ },
152
+ {
153
+ "gd$etag": "\"YDwqeyI.\"",
154
+ "id": {
155
+ "$t": "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/f"
156
+ },
157
+ "updated": {
158
+ "$t": "1970-01-01T00:00:00.000Z"
159
+ },
160
+ "category": [{
161
+ "scheme": "http://schemas.google.com/g/2005#kind",
162
+ "term": "http://schemas.google.com/contact/2008#group"
163
+ }],
164
+ "title": {
165
+ "$t": "System Group: Coworkers"
166
+ },
167
+ "content": {
168
+ "$t": "System Group: Coworkers"
169
+ },
170
+ "link": [{
171
+ "rel": "self",
172
+ "type": "application/atom+xml",
173
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/f"
174
+ }],
175
+ "gContact$systemGroup": {
176
+ "id": "Coworkers"
177
+ }
178
+ },
179
+ {
180
+ "gd$etag": "\"Q3c4fjVSLyp7ImA9WB9VEE4PRgQ.\"",
181
+ "id": {
182
+ "$t": "http://www.google.com/m8/feeds/groups/example%40gmail.com/base/270f"
183
+ },
184
+ "updated": {
185
+ "$t": "2007-11-25T23:58:22.936Z"
186
+ },
187
+ "app$edited": {
188
+ "xmlns$app": "http://www.w3.org/2007/app",
189
+ "$t": "2007-11-25T23:58:22.936Z"
190
+ },
191
+ "category": [{
192
+ "scheme": "http://schemas.google.com/g/2005#kind",
193
+ "term": "http://schemas.google.com/contact/2008#group"
194
+ }],
195
+ "title": {
196
+ "$t": "Non-system Group"
197
+ },
198
+ "content": {
199
+ "$t": "Non-system Group"
200
+ },
201
+ "link": [{
202
+ "rel": "self",
203
+ "type": "application/atom+xml",
204
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/270f"
205
+ },
206
+ {
207
+ "rel": "edit",
208
+ "type": "application/atom+xml",
209
+ "href": "https://www.google.com/m8/feeds/groups/example%40gmail.com/full/270f"
210
+ }]
211
+ }]
212
+ }
213
+ }
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,36 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
+ require 'json'
5
+ require 'hashie'
4
6
  require 'google_contacts_api'
5
7
 
6
8
  # Requires supporting files with custom matchers and macros, etc,
7
9
  # in ./support/ and its subdirectories.
8
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+ # Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
11
 
10
12
  RSpec.configure do |config|
11
-
13
+ config.mock_framework = :rspec
12
14
  end
15
+
16
+ def contact_set_json
17
+ f = File.open("#{File.dirname(__FILE__)}/contact_set.json")
18
+ json = f.read
19
+ f.close
20
+ json
21
+ end
22
+
23
+ def group_set_json
24
+ f = File.open("#{File.dirname(__FILE__)}/group_set.json")
25
+ json = f.read
26
+ f.close
27
+ json
28
+ end
29
+
30
+ def contact_json_hash
31
+ Hashie::Mash.new(JSON.parse(contact_set_json)).feed.entry.first
32
+ end
33
+
34
+ def group_json_hash
35
+ Hashie::Mash.new(JSON.parse(group_set_json)).feed.entry.first
36
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: google_contacts_api
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alvin Liang
@@ -139,7 +139,9 @@ files:
139
139
  - lib/google_contacts_api/result.rb
140
140
  - lib/google_contacts_api/result_set.rb
141
141
  - lib/google_contacts_api/user.rb
142
+ - spec/contact_set.json
142
143
  - spec/google_contacts_api_spec.rb
144
+ - spec/group_set.json
143
145
  - spec/spec_helper.rb
144
146
  has_rdoc: true
145
147
  homepage: http://github.com/aliang/google_contacts_api
@@ -155,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
157
  requirements:
156
158
  - - ">="
157
159
  - !ruby/object:Gem::Version
158
- hash: 620639544924636164
160
+ hash: 2324905511123203107
159
161
  segments:
160
162
  - 0
161
163
  version: "0"