google_calendar 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ SID=DQAAANQAAADZMefRbeG9x_P2llJUjewWWasEqC2mubuTSSjH414IJY-TTJF9voB3ZS80C9wFF68jKlpeUwL-9Pss9bk0_yNPCYtvTcx54L6rANjU1Go58r1X0B8RFatiA3Ak7S1zKxaUhfAB48dYoh-swUthjv_Ts8b7uCGUzfmOcKRGdQDy0-7Bdpy6r7cwVP68FPbA3EadPUrQGKKW-M4GXcB8iqymYNAL8utiGlAPtNFIM6It6uVInOiO0-24_pSYM1VxVJ2gBXa3lZevcLGObFHMQkka9Djrs2-d5OCoryjQo7RRFcxBxzZJqmwE
2
+ LSID=DQAAANUAAACgKc7kL-UwiEIsHKB-Rfd3cTPzWCav_-SzJy6e5IviYfruIvtswkDXxzSJ-rv-YmCOC-J0YO3ngnkmQoTnCJUjewWWasBIiO4bnKkk4K8IZdO8pBOHxpGuXBnKER4jaC7DwcQuVlEypBSFddj-s1mil8EQRUIR5SyRsyTbjS2uiO2slQ4jWyxGlds-s4b7DC8c7oMHuVjxrTtE_E9tZeIu4qXOb8QE1dwJGsaNWii7ioH5HVNuKMe0BjkKS5m7rymv4HhMnlN7mw09NJp1AMU9sfeiJ6kH5QVQuVxoAaA7rqm579I0pdQ
3
+ Auth=DQAAANUAAACgKc7kL-UwiEIsHKB-Rfd3cTPzWCav_-SzJy6e5IviYfruIvtswkDXxzSJ-rv-YmCOC-J0YO3ngnkmQoTnCJUjewWWasBIiO4bnKkk4K8IZdO8pBOHxpGuXBnKER4jaC7DwcQuVlEycRu6P375BUUgR1HNa3cxom45s1clzRKy9h4M4PZ2bO9ejr1qn5IkIUBuMmzvOJuDgIzm1V6YCZ_tErZ4WGq3u0tIm_VdDMn-rWEosH8OPfAp8BYShvAQy9cFSKYY1co8M0WJBbuoNlb52DnFtnUxw1UXW9d0xJ8bnSRkIUiDiMA')
@@ -0,0 +1,142 @@
1
+ require 'helper'
2
+
3
+ class TestGoogleCalendar < Test::Unit::TestCase
4
+ include Google
5
+
6
+ context "Connected" do
7
+
8
+ setup do
9
+ @http_mock = mock('Net::HTTPResponse')
10
+ @http_mock.stubs(:code => '200', :kind_of? => false, :message => "OK")
11
+ @http_mock.stubs(:kind_of?).with(Net::HTTPSuccess).returns(true)
12
+ @http_mock.stubs(:body).returns(get_mock_body('successful_login.txt'))
13
+ @http_request_mock = mock('Net::HTTPS')
14
+ @http_request_mock.stubs(:set_form_data => '', :request => @http_mock)
15
+
16
+ Net::HTTPS.stubs(:new).returns(@http_request_mock)
17
+ end
18
+
19
+ context "Login" do
20
+
21
+ should "login properly" do
22
+ assert_nothing_thrown do
23
+ Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret')
24
+ end
25
+ end
26
+
27
+ should "catch login with invalid credentials" do
28
+ @http_mock.stubs(:kind_of?).with(Net::HTTPForbidden).returns(true)
29
+ @http_mock.stubs(:body).returns('Error=BadAuthentication')
30
+ assert_raise(HTTPAuthorizationFailed) do
31
+ Calendar.new(:username => 'some.one@gmail.com', :password => 'wrong-password')
32
+ end
33
+ end
34
+
35
+ end # login context
36
+
37
+ context "Logged on" do
38
+ setup do
39
+ @calendar = Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret')
40
+ end
41
+
42
+ should "find all events" do
43
+ @http_mock.stubs(:body).returns( get_mock_body("events.xml") )
44
+ assert_equal @calendar.events.length, 3
45
+ end
46
+
47
+ should "query events" do
48
+ @http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
49
+ event = @calendar.find_events('Test&gsessionid=12345')
50
+ assert_equal event.title, 'Test'
51
+ end
52
+
53
+ should "find an event by id" do
54
+ @http_mock.stubs(:body).returns( get_mock_body("find_event_by_id.xml") )
55
+ event = @calendar.find_event_by_id('oj6fmpaulbvk9ouoj0lj4v6hio')
56
+ assert_equal event.id, 'oj6fmpaulbvk9ouoj0lj4v6hio'
57
+ end
58
+
59
+ should "throw NotFound with invalid event id" do
60
+ @http_mock.stubs(:kind_of?).with(Net::HTTPNotFound).returns(true)
61
+ assert_raise(HTTPNotFound) do
62
+ @calendar.find_event_by_id('1234')
63
+ end
64
+ end
65
+
66
+ should "create an event with block" do
67
+ @http_mock.stubs(:body).returns( get_mock_body("create_event.xml") )
68
+
69
+ event = @calendar.create_event do |e|
70
+ e.title = 'New Event'
71
+ e.start_time = Time.now + (60 * 60)
72
+ e.end_time = Time.now + (60 * 60 * 2)
73
+ e.content = "A new event"
74
+ e.where = "Joe's House"
75
+ end
76
+
77
+ assert_equal event.title, 'New Event'
78
+ end
79
+
80
+ should "format to_s properly" do
81
+ @http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
82
+ event = @calendar.find_events('Test')
83
+ assert_equal event.to_s, "Test (oj6fmpaulbvk9ouoj0lj4v6hio)\n\t2010-04-08\n\t2010-04-09\n\tAt School\n\t"
84
+ end
85
+
86
+ should "update an event by id" do
87
+ @http_mock.stubs(:body).returns( get_mock_body("find_event_by_id.xml") )
88
+
89
+ event = @calendar.find_or_create_event_by_id('oj6fmpaulbvk9ouoj0lj4v6hio') do |e|
90
+ e.title = 'New Event Update'
91
+ end
92
+
93
+ assert_equal event.title, 'New Event Update'
94
+ end
95
+
96
+ should "delete an event" do
97
+ @http_mock.stubs(:body).returns( get_mock_body("create_event.xml") )
98
+
99
+ event = @calendar.create_event do |e|
100
+ e.title = 'Delete Me'
101
+ end
102
+
103
+ assert_equal event.id, 'b1vq6rj4r4mg85kcickc7iomb0'
104
+
105
+ @http_mock.stubs(:body).returns("")
106
+ event.delete
107
+ assert_equal event.id, nil
108
+ end
109
+
110
+ should "not redirect forever" do
111
+ @http_mock.stubs(:kind_of?).with(Net::HTTPRedirection).returns(true)
112
+ @http_mock.stubs(:[]).with('location').returns('https://www.google.com')
113
+ assert_raise(HTTPTooManyRedirections) do
114
+ @calendar.events
115
+ end
116
+ end
117
+
118
+ should "throw exception on bad request" do
119
+ @http_mock.stubs(:kind_of?).with(Net::HTTPBadRequest).returns(true)
120
+ assert_raise(HTTPRequestFailed) do
121
+ @calendar.events
122
+ end
123
+ end
124
+
125
+ end # Logged on context
126
+
127
+ end # Connected context
128
+
129
+ def test_https_extension
130
+ assert_nothing_thrown do
131
+ uri = Addressable::URI.parse('https://www.google.com')
132
+ Net::HTTPS.new(uri.host, uri.port)
133
+ end
134
+ end
135
+
136
+ protected
137
+
138
+ def get_mock_body(name)
139
+ File.open(@@mock_path + '/' + name).read
140
+ end
141
+
142
+ end
metadata ADDED
@@ -0,0 +1,286 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google_calendar
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Steve Zich
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-16 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ type: :runtime
24
+ name: nokogiri
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 15
31
+ segments:
32
+ - 1
33
+ - 4
34
+ - 4
35
+ version: 1.4.4
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ prerelease: false
39
+ type: :runtime
40
+ name: addressable
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 2
49
+ - 2
50
+ - 2
51
+ version: 2.2.2
52
+ requirement: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ prerelease: false
55
+ type: :development
56
+ name: shoulda
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ requirement: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ prerelease: false
69
+ type: :development
70
+ name: bundler
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 23
77
+ segments:
78
+ - 1
79
+ - 0
80
+ - 0
81
+ version: 1.0.0
82
+ requirement: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ prerelease: false
85
+ type: :development
86
+ name: jeweler
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 1
93
+ segments:
94
+ - 1
95
+ - 5
96
+ - 1
97
+ version: 1.5.1
98
+ requirement: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ prerelease: false
101
+ type: :development
102
+ name: rcov
103
+ version_requirements: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ requirement: *id006
113
+ - !ruby/object:Gem::Dependency
114
+ prerelease: false
115
+ type: :development
116
+ name: mocha
117
+ version_requirements: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirement: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ prerelease: false
129
+ type: :runtime
130
+ name: nokogiri
131
+ version_requirements: &id008 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 15
137
+ segments:
138
+ - 1
139
+ - 4
140
+ - 4
141
+ version: 1.4.4
142
+ requirement: *id008
143
+ - !ruby/object:Gem::Dependency
144
+ prerelease: false
145
+ type: :runtime
146
+ name: addressable
147
+ version_requirements: &id009 !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ hash: 3
153
+ segments:
154
+ - 2
155
+ - 2
156
+ - 2
157
+ version: 2.2.2
158
+ requirement: *id009
159
+ - !ruby/object:Gem::Dependency
160
+ prerelease: false
161
+ type: :development
162
+ name: shoulda
163
+ version_requirements: &id010 !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ hash: 3
169
+ segments:
170
+ - 0
171
+ version: "0"
172
+ requirement: *id010
173
+ - !ruby/object:Gem::Dependency
174
+ prerelease: false
175
+ type: :development
176
+ name: bundler
177
+ version_requirements: &id011 !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ hash: 23
183
+ segments:
184
+ - 1
185
+ - 0
186
+ - 0
187
+ version: 1.0.0
188
+ requirement: *id011
189
+ - !ruby/object:Gem::Dependency
190
+ prerelease: false
191
+ type: :development
192
+ name: jeweler
193
+ version_requirements: &id012 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ hash: 1
199
+ segments:
200
+ - 1
201
+ - 5
202
+ - 1
203
+ version: 1.5.1
204
+ requirement: *id012
205
+ - !ruby/object:Gem::Dependency
206
+ prerelease: false
207
+ type: :development
208
+ name: rcov
209
+ version_requirements: &id013 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ requirement: *id013
219
+ description: A minimal wrapper around the google calendar API, which uses nokogiri for fast parsing.
220
+ email: steve.zich@gmail.com
221
+ executables: []
222
+
223
+ extensions: []
224
+
225
+ extra_rdoc_files:
226
+ - LICENSE.txt
227
+ - README.rdoc
228
+ files:
229
+ - .document
230
+ - Gemfile
231
+ - Gemfile.lock
232
+ - LICENSE.txt
233
+ - README.rdoc
234
+ - Rakefile
235
+ - VERSION
236
+ - google_calendar.gemspec
237
+ - lib/google/calendar.rb
238
+ - lib/google/connection.rb
239
+ - lib/google/errors.rb
240
+ - lib/google/event.rb
241
+ - lib/google/net/https.rb
242
+ - lib/google_calendar.rb
243
+ - test/helper.rb
244
+ - test/mocks/create_event.xml
245
+ - test/mocks/events.xml
246
+ - test/mocks/find_event_by_id.xml
247
+ - test/mocks/query_events.xml
248
+ - test/mocks/successful_login.txt
249
+ - test/test_google_calendar.rb
250
+ has_rdoc: true
251
+ homepage: http://github.com/northworld/google_calendar
252
+ licenses:
253
+ - MIT
254
+ post_install_message:
255
+ rdoc_options: []
256
+
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ none: false
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ hash: 3
265
+ segments:
266
+ - 0
267
+ version: "0"
268
+ required_rubygems_version: !ruby/object:Gem::Requirement
269
+ none: false
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ hash: 3
274
+ segments:
275
+ - 0
276
+ version: "0"
277
+ requirements: []
278
+
279
+ rubyforge_project:
280
+ rubygems_version: 1.3.7
281
+ signing_key:
282
+ specification_version: 3
283
+ summary: A lightweight google calendar API wrapper
284
+ test_files:
285
+ - test/helper.rb
286
+ - test/test_google_calendar.rb