foscam-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +10 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/foscam-ruby.gemspec +34 -0
  9. data/lib/foscam-ruby.rb +8 -0
  10. data/lib/foscam/client.rb +425 -0
  11. data/lib/foscam/version.rb +3 -0
  12. data/spec/fixtures/vcr/foscam_camera_control_brightness.yml +42 -0
  13. data/spec/fixtures/vcr/foscam_camera_control_contrast.yml +42 -0
  14. data/spec/fixtures/vcr/foscam_camera_control_mode.yml +42 -0
  15. data/spec/fixtures/vcr/foscam_camera_control_orientation.yml +42 -0
  16. data/spec/fixtures/vcr/foscam_camera_control_resolution.yml +42 -0
  17. data/spec/fixtures/vcr/foscam_comm_write.yml +42 -0
  18. data/spec/fixtures/vcr/foscam_decoder_control.yml +42 -0
  19. data/spec/fixtures/vcr/foscam_get_camera_params.yml +52 -0
  20. data/spec/fixtures/vcr/foscam_get_forbidden.yml +84 -0
  21. data/spec/fixtures/vcr/foscam_get_misc.yml +66 -0
  22. data/spec/fixtures/vcr/foscam_get_params.yml +428 -0
  23. data/spec/fixtures/vcr/foscam_get_status.yml +68 -0
  24. data/spec/fixtures/vcr/foscam_reboot.yml +42 -0
  25. data/spec/fixtures/vcr/foscam_restore_factory.yml +42 -0
  26. data/spec/fixtures/vcr/foscam_set_alarm.yml +42 -0
  27. data/spec/fixtures/vcr/foscam_set_alias.yml +42 -0
  28. data/spec/fixtures/vcr/foscam_set_datetime.yml +42 -0
  29. data/spec/fixtures/vcr/foscam_set_ddns.yml +40 -0
  30. data/spec/fixtures/vcr/foscam_set_decoder.yml +42 -0
  31. data/spec/fixtures/vcr/foscam_set_forbidden.yml +40 -0
  32. data/spec/fixtures/vcr/foscam_set_ftp.yml +42 -0
  33. data/spec/fixtures/vcr/foscam_set_mail.yml +40 -0
  34. data/spec/fixtures/vcr/foscam_set_misc.yml +105 -0
  35. data/spec/fixtures/vcr/foscam_set_network.yml +40 -0
  36. data/spec/fixtures/vcr/foscam_set_pppoe.yml +42 -0
  37. data/spec/fixtures/vcr/foscam_set_upnp.yml +42 -0
  38. data/spec/fixtures/vcr/foscam_set_user2.yml +40 -0
  39. data/spec/fixtures/vcr/foscam_set_user3.yml +40 -0
  40. data/spec/fixtures/vcr/foscam_set_user4.yml +40 -0
  41. data/spec/fixtures/vcr/foscam_set_user5.yml +40 -0
  42. data/spec/fixtures/vcr/foscam_set_user6.yml +40 -0
  43. data/spec/fixtures/vcr/foscam_set_user7.yml +40 -0
  44. data/spec/fixtures/vcr/foscam_set_user8.yml +40 -0
  45. data/spec/fixtures/vcr/foscam_set_wifi.yml +40 -0
  46. data/spec/fixtures/vcr/foscam_snapshot.yml +236 -0
  47. data/spec/fixtures/vcr/foscam_upgrade_firmware.yml +40 -0
  48. data/spec/fixtures/vcr/foscam_upgrade_htmls.yml +40 -0
  49. data/spec/foscam/client_spec.rb +1269 -0
  50. data/spec/spec_helper.rb +24 -0
  51. metadata +301 -0
@@ -0,0 +1,236 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://my_username:my_password@192.168.0.117/snapshot.cgi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ authorization:
11
+ - Basic Y3dhZGRpbmc6ZnY1MHhFZ0d3Ug==
12
+ accept-encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ accept:
15
+ - ! '*/*'
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - Netwave IP Camera
25
+ date:
26
+ - Tue, 13 Nov 2012 05:01:50 GMT
27
+ content-type:
28
+ - image/jpeg
29
+ content-length:
30
+ - '8784'
31
+ content-disposition:
32
+ - filename="snapshot_000DC5D4DC51_20121113000150.jpg"
33
+ connection:
34
+ - close
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: !binary |-
38
+ /9j/4AATSkZJRgABAgIAAAAAAAAAAAD/wAARCADwAUADASEAAhEBAxEB/9sA
39
+ hAAHBQUGBQQHBgYGCAcHCAsSDAsKCgsWEBENEhsXHBwaFxoZHiErJB4fKCAZ
40
+ GiUzJSgsLTAwMB0kNDg0LjgrLzAuAQcICAsJCxYMDBYuHhoeLi4uLi4uLi4u
41
+ Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi7/xAGi
42
+ AAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAAB
43
+ fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka
44
+ JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
45
+ g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS
46
+ 09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAA
47
+ AAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2Fx
48
+ EyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF
49
+ RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeY
50
+ mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo
51
+ 6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AO0PXrTT9aQxm73phOaAGlvekBFA
52
+ hMmjPFAwzS5oATNGaBCZoyTRqMTNGaADOBjNJu+tABu4pN3HegBN3HejdQAb
53
+ +KTPFAAGpN1FgDcKN3vQFyC7jae3ZFYgkdqw7szi0FvG3ksvQjvQIwmu9St5
54
+ CrM3481oadPNKpSdQynrkUCFGjwm43KSFPYVtw20ZiWNl3AdKBmzYaTaSoEK
55
+ YFdBa+HNMjG4oc47NSuUkmMuNDsAMJO6H3GayLnS5ISdjhxTuDSM5wyHDAjF
56
+ Rl6CTeNRkfQUDGE1GaQhvSimMTNFAhaSgAzxQDQMSkz70AJnFGTQAmaTNAXD
57
+ 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
233
+ kZgPemFzAP/Z
234
+ http_version: '1.1'
235
+ recorded_at: Tue, 13 Nov 2012 05:01:50 GMT
236
+ recorded_with: VCR 2.3.0
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://my_username:my_password@192.168.0.117/upgrade_firmware.cgi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ authorization:
11
+ - Basic Y3dhZGRpbmc6ZnY1MHhFZ0d3Ug==
12
+ content-length:
13
+ - '0'
14
+ accept:
15
+ - ! '*/*'
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - Netwave IP Camera
25
+ date:
26
+ - Tue, 13 Nov 2012 05:02:51 GMT
27
+ content-type:
28
+ - text/plain
29
+ content-length:
30
+ - '26'
31
+ cache-control:
32
+ - no-cache
33
+ connection:
34
+ - close
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! 'error: illegal http frame.'
38
+ http_version: '1.1'
39
+ recorded_at: Tue, 13 Nov 2012 05:02:51 GMT
40
+ recorded_with: VCR 2.3.0
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://my_username:my_password@192.168.0.117/upgrade_htmls.cgi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ authorization:
11
+ - Basic Y3dhZGRpbmc6ZnY1MHhFZ0d3Ug==
12
+ content-length:
13
+ - '0'
14
+ accept:
15
+ - ! '*/*'
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - Netwave IP Camera
25
+ date:
26
+ - Tue, 13 Nov 2012 05:02:51 GMT
27
+ content-type:
28
+ - text/plain
29
+ content-length:
30
+ - '26'
31
+ cache-control:
32
+ - no-cache
33
+ connection:
34
+ - close
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! 'error: illegal http frame.'
38
+ http_version: '1.1'
39
+ recorded_at: Tue, 13 Nov 2012 05:02:51 GMT
40
+ recorded_with: VCR 2.3.0
@@ -0,0 +1,1269 @@
1
+ require 'spec_helper'
2
+
3
+ describe Foscam::Client do
4
+
5
+ before(:each) do
6
+ @service = Foscam::Client.new
7
+ @connection = Faraday.new( url: FOSCAM_URL)
8
+ @connection.basic_auth(FOSCAM_USERNAME, FOSCAM_PASSWORD)
9
+ @service.connection = @connection
10
+ end
11
+
12
+ describe "#snapshot" do
13
+ context "response is successful" do
14
+ around(:each) do |spec|
15
+ # @service.connection = @connection
16
+ ::VCR.use_cassette("foscam_snapshot") do
17
+ spec.run
18
+ end
19
+ end
20
+ it "returns an Image" do
21
+ image = @service.snapshot
22
+ image.should be_a_kind_of(MiniMagick::Image)
23
+ end
24
+ end
25
+ context "response is unsuccessful" do
26
+ before(:each) do
27
+ response = ::Faraday::Response.new
28
+ response.stub!(:success?).and_return(false)
29
+ @connection.stub(:get).with('snapshot.cgi').and_return(response)
30
+ @service.connection = @connection
31
+ end
32
+ it "returns nil" do
33
+ image = @service.snapshot
34
+ image.should be_nil
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "#get_status" do
40
+ context "response is successful" do
41
+ around(:each) do |spec|
42
+ # @service.connection = @connection
43
+ ::VCR.use_cassette("foscam_get_status") do
44
+ spec.run
45
+ end
46
+ end
47
+ it "returns a hash of variables" do
48
+ response = @service.get_status
49
+ [:id, :sys_ver, :app_ver, :alias, :now, :tz, :alarm_status, :ddns_status, :ddns_host, :oray_type, :upnp_status, :p2p_status, :p2p_local_port, :msn_status].each do |key|
50
+ response.should have_key(key)
51
+ end
52
+ end
53
+
54
+ it "sets the ddns status string" do
55
+ response = @service.get_status
56
+ response[:ddns_status].should be_a_kind_of(String)
57
+ ::Foscam::DDNS_STATUS.values.should include(response[:ddns_status])
58
+ end
59
+
60
+ it "sets the upnp status string" do
61
+ response = @service.get_status
62
+ response[:upnp_status].should be_a_kind_of(String)
63
+ ::Foscam::UPNP_STATUS.values.should include(response[:upnp_status])
64
+ end
65
+
66
+ it "sets the alarm status string" do
67
+ response = @service.get_status
68
+ response[:alarm_status].should be_a_kind_of(String)
69
+ ::Foscam::ALARM_STATUS.values.should include(response[:alarm_status])
70
+ end
71
+ it "sets the time" do
72
+ response = @service.get_status
73
+ response[:now].should be_a_kind_of(DateTime)
74
+ end
75
+ end
76
+
77
+ context "response is unsuccessful" do
78
+ before(:each) do
79
+ response = ::Faraday::Response.new
80
+ response.stub!(:success?).and_return(false)
81
+ @connection.stub(:get).with('get_status.cgi').and_return(response)
82
+ @service.connection = @connection
83
+ end
84
+ it "returns a hash of variables" do
85
+ response = @service.get_status
86
+ response.should == {}
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "#get_camera_params" do
92
+ context "response is successful" do
93
+ around(:each) do |spec|
94
+ # @service.connection = @connection
95
+ ::VCR.use_cassette("foscam_get_camera_params") do
96
+ spec.run
97
+ end
98
+ end
99
+ it "returns a hash of variables" do
100
+ response = @service.get_camera_params
101
+ [:resolution, :brightness, :contrast, :mode, :flip, :fps].each do |key|
102
+ response.should have_key(key)
103
+ end
104
+ end
105
+
106
+ it "sets the mode as a string" do
107
+ response = @service.get_camera_params
108
+ response[:mode].should be_a_kind_of(String)
109
+ ::Foscam::CAMERA_PARAMS_MODE.values.should include(response[:mode])
110
+ end
111
+
112
+ it "sets the orientation as a string" do
113
+ response = @service.get_camera_params
114
+ response[:flip].should be_a_kind_of(String)
115
+ ::Foscam::CAMERA_PARAMS_ORIENTATION.values.should include(response[:flip])
116
+ end
117
+
118
+ it "sets the resolution as a string" do
119
+ response = @service.get_camera_params
120
+ response[:resolution].should be_a_kind_of(String)
121
+ ::Foscam::CAMERA_PARAMS_RESOLUTION.values.should include(response[:resolution])
122
+ end
123
+
124
+ it "sets the brightness as a number" do
125
+ response = @service.get_camera_params
126
+ response[:brightness].should be_a_kind_of(Integer)
127
+ end
128
+ it "sets the contrast as a number" do
129
+ response = @service.get_camera_params
130
+ response[:contrast].should be_a_kind_of(Integer)
131
+ end
132
+ end
133
+
134
+ context "response is unsuccessful" do
135
+ before(:each) do
136
+ response = ::Faraday::Response.new
137
+ response.stub!(:success?).and_return(false)
138
+ @connection.stub(:get).with('get_camera_params.cgi').and_return(response)
139
+ @service.connection = @connection
140
+ end
141
+ it "returns a hash of variables" do
142
+ response = @service.get_camera_params
143
+ response.should == {}
144
+ end
145
+ end
146
+ end
147
+
148
+ describe "#decoder_control" do
149
+ context "response is successful" do
150
+ around(:each) do |spec|
151
+ # @service.connection = @connection
152
+ ::VCR.use_cassette("foscam_decoder_control") do
153
+ spec.run
154
+ end
155
+ end
156
+ it "returns a hash of variables" do
157
+ action = :stop_up
158
+ response = @service.decoder_control(action)
159
+ response.should be_true
160
+ end
161
+ end
162
+
163
+ context "response is unsuccessful" do
164
+ before(:each) do
165
+ response = ::Faraday::Response.new
166
+ response.stub!(:success?).and_return(false)
167
+ @connection.stub(:get).with('decoder_control.cgi?command=1').and_return(response)
168
+ @service.connection = @connection
169
+ end
170
+ it "returns a hash of variables" do
171
+ response = @service.decoder_control(:stop_up)
172
+ response.should be_false
173
+ end
174
+ end
175
+ end
176
+
177
+ describe "#camera_control" do
178
+ describe "camera resolution" do
179
+ context "with valid parameters" do
180
+ around(:each) do |spec|
181
+ ::VCR.use_cassette("foscam_camera_control_resolution") do
182
+ spec.run
183
+ end
184
+ end
185
+ it "returns true when set using a string" do
186
+ response = @service.camera_control(resolution: "QVGA")
187
+ response.should be_true
188
+ end
189
+ it "returns true when set using a number" do
190
+ response = @service.camera_control(resolution: 8)
191
+ response.should be_true
192
+ end
193
+ end
194
+ context "with invalid parameters" do
195
+ it "raises an exception with invalid number" do
196
+ expect {@service.camera_control(resolution: 0)}.to raise_error
197
+ end
198
+
199
+ it "raises an exception with invalid string" do
200
+ expect {@service.camera_control(resolution: "XVGA")}.to raise_error
201
+ end
202
+ end
203
+ end
204
+
205
+ describe "camera brightness" do
206
+ context "with valid parameters" do
207
+ around(:each) do |spec|
208
+ ::VCR.use_cassette("foscam_camera_control_brightness") do
209
+ spec.run
210
+ end
211
+ end
212
+ it "returns true" do
213
+ response = @service.camera_control( brightness: 160)
214
+ response.should be_true
215
+ end
216
+ end
217
+ context "with invalid parameters" do
218
+ it "raises an exception when < 0" do
219
+ expect {@service.camera_control( brightness: -1)}.to raise_error
220
+ end
221
+
222
+ it "raises an exception when > 255" do
223
+ expect {@service.camera_control( brightness: 256)}.to raise_error
224
+ end
225
+ end
226
+ end
227
+
228
+ describe "camera contrast" do
229
+ context "with valid parameters" do
230
+ around(:each) do |spec|
231
+ ::VCR.use_cassette("foscam_camera_control_contrast") do
232
+ spec.run
233
+ end
234
+ end
235
+ it "returns true" do
236
+ response = @service.camera_control(contrast: 4)
237
+ response.should be_true
238
+ end
239
+ end
240
+ context "with invalid parameters" do
241
+ it "raises an exception when < 0" do
242
+ expect {@service.camera_control( contrast: -1)}.to raise_error
243
+ end
244
+
245
+ it "raises an exception when > 6" do
246
+ expect {@service.camera_control( contrast: 7)}.to raise_error
247
+ end
248
+ end
249
+ end
250
+
251
+ describe "camera mode" do
252
+ context "with valid parameters" do
253
+ around(:each) do |spec|
254
+ ::VCR.use_cassette("foscam_camera_control_mode") do
255
+ spec.run
256
+ end
257
+ end
258
+ it "returns true" do
259
+ response = @service.camera_control( mode: :outdoor)
260
+ response.should be_true
261
+ end
262
+ end
263
+ context "with invalid parameters" do
264
+ it "raises an exception when < 0" do
265
+ expect {@service.camera_control( mode: -1)}.to raise_error
266
+ end
267
+
268
+ it "raises an exception when > 2" do
269
+ expect {@service.camera_control( mode: 3)}.to raise_error
270
+ end
271
+ it "raises an exception with an invalid string" do
272
+ expect {@service.camera_control( mode: "10Hz")}.to raise_error
273
+ end
274
+ end
275
+ end
276
+
277
+ describe "camera orientation" do
278
+ context "with valid parameters" do
279
+ around(:each) do |spec|
280
+ ::VCR.use_cassette("foscam_camera_control_orientation") do
281
+ spec.run
282
+ end
283
+ end
284
+ it "returns true" do
285
+ response = @service.camera_control(flip: "mirror")
286
+ response.should be_true
287
+ end
288
+ end
289
+ context "with invalid parameters" do
290
+ it "raises an exception when < 0" do
291
+ expect {@service.camera_control(flip: -1)}.to raise_error
292
+ end
293
+
294
+ it "raises an exception when > 3" do
295
+ expect {@service.camera_control(flip: 4)}.to raise_error
296
+ end
297
+ it "raises an exception with an invalid string" do
298
+ expect {@service.camera_control( mode: "diagonal")}.to raise_error
299
+ end
300
+ end
301
+ end
302
+
303
+ context "response is unsuccessful" do
304
+ before(:each) do
305
+ response = ::Faraday::Response.new
306
+ response.stub!(:success?).and_return(false)
307
+ @connection.stub(:get).with('camera_control.cgi?param=1&value=160').and_return(response)
308
+ @service.connection = @connection
309
+ end
310
+ it "returns a hash of variables" do
311
+ response = @service.camera_control(brightness: 160)
312
+ response.should be_false
313
+ end
314
+ end
315
+
316
+
317
+ end
318
+
319
+ describe "#reboot" do
320
+ context "response is successful" do
321
+ around(:each) do |spec|
322
+ # @service.connection = @connection
323
+ ::VCR.use_cassette("foscam_reboot") do
324
+ spec.run
325
+ end
326
+ end
327
+ it "returns a hash of variables" do
328
+ response = @service.reboot
329
+ response.should be_true
330
+ end
331
+ end
332
+
333
+ context "response is unsuccessful" do
334
+ before(:each) do
335
+ response = ::Faraday::Response.new
336
+ response.stub!(:success?).and_return(false)
337
+ @connection.stub(:get).with('reboot.cgi').and_return(response)
338
+ @service.connection = @connection
339
+ end
340
+ it "returns a hash of variables" do
341
+ response = @service.reboot
342
+ response.should be_false
343
+ end
344
+ end
345
+ end
346
+
347
+ describe "#restore_factory" do
348
+
349
+ context "response is successful" do
350
+ around(:each) do |spec|
351
+ # @service.connection = @connection
352
+ ::VCR.use_cassette("foscam_restore_factory") do
353
+ spec.run
354
+ end
355
+ end
356
+ it "returns a hash of variables" do
357
+ response = @service.restore_factory
358
+ response.should be_true
359
+ end
360
+ end
361
+
362
+ context "response is unsuccessful" do
363
+ before(:each) do
364
+ response = ::Faraday::Response.new
365
+ response.stub!(:success?).and_return(false)
366
+ @connection.stub(:get).with('restore_factory.cgi').and_return(response)
367
+ @service.connection = @connection
368
+ end
369
+ it "returns a hash of variables" do
370
+ response = @service.restore_factory
371
+ response.should be_false
372
+ end
373
+ end
374
+ end
375
+
376
+ describe "#get_params" do
377
+ context "response is successful" do
378
+ around(:each) do |spec|
379
+ # @service.connection = @connection
380
+ ::VCR.use_cassette("foscam_get_params") do
381
+ spec.run
382
+ end
383
+ end
384
+ it "returns a hash of variables" do
385
+ response = @service.get_params
386
+ [ :id, :sys_ver, :app_ver, :alias,
387
+ :now, :tz, :daylight_saving_time, :ntp_enable, :ntp_svr,
388
+ :user1_name, :user1_pwd, :user1_pri,
389
+ :user2_name, :user2_pwd, :user2_pri,
390
+ :user3_name, :user3_pwd, :user3_pri,
391
+ :user4_name, :user4_pwd, :user4_pri,
392
+ :user5_name, :user5_pwd, :user5_pri,
393
+ :user6_name, :user6_pwd, :user6_pri,
394
+ :user7_name, :user7_pwd, :user7_pri,
395
+ :user8_name, :user8_pwd, :user8_pri,
396
+ :dev2_alias, :dev2_host, :dev2_port, :dev2_user, :dev2_pwd,
397
+ :dev3_alias, :dev3_host, :dev3_port, :dev3_user, :dev3_pwd,
398
+ :dev4_alias, :dev4_host, :dev4_port, :dev4_user, :dev4_pwd,
399
+ :dev5_alias, :dev5_host, :dev5_port, :dev5_user, :dev5_pwd,
400
+ :dev6_alias, :dev6_host, :dev6_port, :dev6_user, :dev6_pwd,
401
+ :dev7_alias, :dev7_host, :dev7_port, :dev7_user, :dev7_pwd,
402
+ :dev8_alias, :dev8_host, :dev8_port, :dev8_user, :dev8_pwd,
403
+ :dev9_alias, :dev9_host, :dev9_port, :dev9_user, :dev9_pwd,
404
+ :ip, :mask, :gateway, :dns, :port,
405
+ :wifi_enable, :wifi_ssid, :wifi_encrypt, :wifi_defkey,
406
+ :wifi_key1, :wifi_key2, :wifi_key3, :wifi_key4, :wifi_authtype, :wifi_keyformat,
407
+ :wifi_key1_bits, :wifi_key2_bits, :wifi_key3_bits, :wifi_key4_bits, :wifi_mode, :wifi_wpa_psk,
408
+ :pppoe_enable, :pppoe_user, :pppoe_pwd, :upnp_enable,
409
+ :ddns_service, :ddns_user, :ddns_pwd, :ddns_host, :ddns_proxy_svr, :ddns_proxy_port,
410
+ :mail_svr, :mail_port, :mail_tls, :mail_user, :mail_pwd, :mail_sender,
411
+ :mail_receiver1, :mail_receiver2, :mail_receiver3, :mail_receiver4, :mail_inet_ip,
412
+ :ftp_svr, :ftp_port, :ftp_user, :ftp_pwd, :ftp_dir, :ftp_mode, :ftp_upload_interval, :ftp_filename, :ftp_numberoffiles, :ftp_schedule_enable,
413
+ :ftp_schedule_sun_0, :ftp_schedule_sun_1, :ftp_schedule_sun_2,
414
+ :ftp_schedule_mon_0, :ftp_schedule_mon_1, :ftp_schedule_mon_2,
415
+ :ftp_schedule_tue_0, :ftp_schedule_tue_1, :ftp_schedule_tue_2,
416
+ :ftp_schedule_wed_0, :ftp_schedule_wed_1, :ftp_schedule_wed_2,
417
+ :ftp_schedule_thu_0, :ftp_schedule_thu_1, :ftp_schedule_thu_2,
418
+ :ftp_schedule_fri_0, :ftp_schedule_fri_1, :ftp_schedule_fri_2,
419
+ :ftp_schedule_sat_0, :ftp_schedule_sat_1, :ftp_schedule_sat_2,
420
+ :alarm_motion_armed, :alarm_motion_sensitivity, :alarm_motion_compensation,
421
+ :alarm_input_armed, :alarm_ioin_level, :alarm_iolinkage, :alarm_preset, :alarm_ioout_level, :alarm_mail, :alarm_upload_interval, :alarm_http, :alarm_msn, :alarm_http_url, :alarm_schedule_enable,
422
+ :alarm_schedule_sun_0, :alarm_schedule_sun_1, :alarm_schedule_sun_2,
423
+ :alarm_schedule_mon_0, :alarm_schedule_mon_1, :alarm_schedule_mon_2,
424
+ :alarm_schedule_tue_0, :alarm_schedule_tue_1, :alarm_schedule_tue_2,
425
+ :alarm_schedule_wed_0, :alarm_schedule_wed_1, :alarm_schedule_wed_2,
426
+ :alarm_schedule_thu_0, :alarm_schedule_thu_1, :alarm_schedule_thu_2,
427
+ :alarm_schedule_fri_0, :alarm_schedule_fri_1, :alarm_schedule_fri_2,
428
+ :alarm_schedule_sat_0, :alarm_schedule_sat_1, :alarm_schedule_sat_2,
429
+ :decoder_baud, :msn_user, :msn_pwd,
430
+ :msn_friend1, :msn_friend2, :msn_friend3, :msn_friend4, :msn_friend5, :msn_friend6, :msn_friend7, :msn_friend8, :msn_friend9, :msn_friend10
431
+ ].each do |key|
432
+ response.should have_key(key)
433
+ end
434
+ end
435
+ it "sets now as datetime" do
436
+ response = @service.get_params
437
+ response[:now].should be_a_kind_of(DateTime)
438
+ end
439
+ it "sets the daylight_savings_time as a number" do
440
+ response = @service.get_params
441
+ response[:daylight_savings_time].should be_a_kind_of(Integer)
442
+ end
443
+ it "sets ntp_enable as a Boolean" do
444
+ response = @service.get_params
445
+ response[:ntp_enable].should be_a_kind_of(Boolean)
446
+ end
447
+
448
+ it "sets user privilages as a USER_PRIVILAGE" do
449
+ response = @service.get_params
450
+ [:user1_pri, :user2_pri, :user3_pri, :user4_pri, :user5_pri, :user6_pri, :user7_pri, :user8_pri].each do |key|
451
+ response[key].should be_a_kind_of(Symbol)
452
+ ::Foscam::USER_PERMISSIONS.values.should include(response[key])
453
+ end
454
+ end
455
+
456
+ it "sets the ports as a number" do
457
+ response = @service.get_params
458
+ [:ddns_proxy_port, :ftp_port, :mail_port, :port, :dev2_port, :dev3_port, :dev4_port, :dev5_port, :dev6_port, :dev7_port, :dev8_port, :dev9_port].each do |key|
459
+ response[key].should be_a_kind_of(Integer)
460
+ end
461
+ end
462
+
463
+ it "sets wifi_enable as a boolean" do
464
+ response = @service.get_params
465
+ response[:wifi_enable].should be_a_kind_of(Boolean)
466
+ end
467
+
468
+ it "sets pppoe_enable as a boolean" do
469
+ response = @service.get_params
470
+ response[:pppoe_enable].should be_a_kind_of(Boolean)
471
+ end
472
+ it "sets upnp_enable as a boolean" do
473
+ response = @service.get_params
474
+ response[:upnp_enable].should be_a_kind_of(Boolean)
475
+ end
476
+
477
+ it "sets alarm_schedule_enable as a boolean" do
478
+ response = @service.get_params
479
+ response[:alarm_schedule_enable].should be_a_kind_of(Boolean)
480
+ end
481
+
482
+ it "sets ftp_schedule_enable as a boolean" do
483
+ response = @service.get_params
484
+ response[:ftp_schedule_enable].should be_a_kind_of(Boolean)
485
+ end
486
+
487
+ it "sets the ftp_schedule as an integer" do
488
+ response = @service.get_params
489
+ [
490
+ :ftp_schedule_sun_0, :ftp_schedule_sun_1, :ftp_schedule_sun_2,
491
+ :ftp_schedule_mon_0, :ftp_schedule_mon_1, :ftp_schedule_mon_2,
492
+ :ftp_schedule_tue_0, :ftp_schedule_tue_1, :ftp_schedule_tue_2,
493
+ :ftp_schedule_wed_0, :ftp_schedule_wed_1, :ftp_schedule_wed_2,
494
+ :ftp_schedule_thu_0, :ftp_schedule_thu_1, :ftp_schedule_thu_2,
495
+ :ftp_schedule_fri_0, :ftp_schedule_fri_1, :ftp_schedule_fri_2,
496
+ :ftp_schedule_sat_0, :ftp_schedule_sat_1, :ftp_schedule_sat_2
497
+ ].each do |key|
498
+ response[key].should be_a_kind_of(Integer)
499
+ end
500
+ end
501
+
502
+ it "sets the alarm_schedule as an integer" do
503
+ response = @service.get_params
504
+ [
505
+ :alarm_schedule_sun_0, :alarm_schedule_sun_1, :alarm_schedule_sun_2,
506
+ :alarm_schedule_mon_0, :alarm_schedule_mon_1, :alarm_schedule_mon_2,
507
+ :alarm_schedule_tue_0, :alarm_schedule_tue_1, :alarm_schedule_tue_2,
508
+ :alarm_schedule_wed_0, :alarm_schedule_wed_1, :alarm_schedule_wed_2,
509
+ :alarm_schedule_thu_0, :alarm_schedule_thu_1, :alarm_schedule_thu_2,
510
+ :alarm_schedule_fri_0, :alarm_schedule_fri_1, :alarm_schedule_fri_2,
511
+ :alarm_schedule_sat_0, :alarm_schedule_sat_1, :alarm_schedule_sat_2
512
+ ].each do |key|
513
+ response[key].should be_a_kind_of(Integer)
514
+ end
515
+ end
516
+ end
517
+
518
+ context "response is unsuccessful" do
519
+ before(:each) do
520
+ response = ::Faraday::Response.new
521
+ response.stub!(:success?).and_return(false)
522
+ @connection.stub(:get).with('get_params.cgi').and_return(response)
523
+ @service.connection = @connection
524
+ end
525
+ it "returns a hash of variables" do
526
+ response = @service.get_params
527
+ response.should == {}
528
+ end
529
+ end
530
+ end
531
+
532
+ # describe "#upgrade_firmware" do
533
+ # around(:each) do |spec|
534
+ # ::VCR.use_cassette("foscam_upgrade_firmware") do
535
+ # spec.run
536
+ # end
537
+ # end
538
+ # it "" do
539
+ # @service.upgrade_firmware
540
+ # end
541
+
542
+ # end
543
+
544
+ # describe "#upgrade_htmls" do
545
+ # around(:each) do |spec|
546
+ # VCR.use_cassette("foscam_upgrade_htmls") do
547
+ # spec.run
548
+ # end
549
+ # end
550
+ # it "" do
551
+ # @service.upgrade_htmls
552
+ # end
553
+
554
+ # end
555
+
556
+ describe "#set_alias" do
557
+ context "with valid parameters" do
558
+ around(:each) do |spec|
559
+ # @service.connection = @connection
560
+ ::VCR.use_cassette("foscam_set_alias") do
561
+ spec.run
562
+ end
563
+ end
564
+ it "returns a hash of variables" do
565
+ name = "R2D2"
566
+ response = @service.set_alias(name)
567
+ response.should be_true
568
+ end
569
+ end
570
+ context "with invalid parameters" do
571
+ it "raises an exception when more than 20 characters long 0" do
572
+ expect {@service.set_alias("123456789012345678901")}.to raise_error
573
+ end
574
+ end
575
+
576
+ context "response is unsuccessful" do
577
+ before(:each) do
578
+ response = ::Faraday::Response.new
579
+ response.stub!(:success?).and_return(false)
580
+ @connection.stub(:get).with('set_alias.cgi?alias=R2D2').and_return(response)
581
+ @service.connection = @connection
582
+ end
583
+ it "returns a hash of variables" do
584
+ name = "R2D2"
585
+ response = @service.set_alias(name)
586
+ response.should be_false
587
+ end
588
+ end
589
+ end
590
+
591
+ describe "#set_datetime" do
592
+ context "with valid parameters" do
593
+ around(:each) do |spec|
594
+ # @service.connection = @connection
595
+ ::VCR.use_cassette("foscam_set_datetime") do
596
+ spec.run
597
+ end
598
+ end
599
+ it "returns a hash of variables" do
600
+ params = {tz:18000, ntp_enable:1, ntp_svr:"0.ca.pool.ntp.org"}
601
+ response = @service.set_datetime(params)
602
+ response.should be_true
603
+ end
604
+ end
605
+
606
+ context "with invalid parameters" do
607
+ it "raises an exception when ntp_server more than 64 characters long" do
608
+ expect {@service.set_datetime(ntp_svr:"012345678901234567890123456789012345678901234567890123456789012345")}.to raise_error
609
+ end
610
+ end
611
+
612
+ context "response is unsuccessful" do
613
+ before(:each) do
614
+ response = ::Faraday::Response.new
615
+ response.stub!(:success?).and_return(false)
616
+ @connection.stub(:get).with('set_datetime.cgi?').and_return(response)
617
+ @service.connection = @connection
618
+ end
619
+ it "returns a hash of variables" do
620
+ response = @service.set_datetime({})
621
+ response.should be_false
622
+ end
623
+ end
624
+
625
+ end
626
+
627
+ describe "#set_users" do
628
+ context "with valid parameters" do
629
+ it "sets user 2 name, password, and privilages" do
630
+ ::VCR.use_cassette("foscam_set_user2") do
631
+ params = {user2: "user2", pwd2: "pass2", pri2:0}
632
+ response = @service.set_users(params)
633
+ response.should be_true
634
+ end
635
+ end
636
+
637
+ it "sets user 3 name, password, and privilages" do
638
+ ::VCR.use_cassette("foscam_set_user3") do
639
+ params = {user3: "user3", pwd3: "pass3", pri3:0}
640
+ response = @service.set_users(params)
641
+ response.should be_true
642
+ end
643
+ end
644
+
645
+ it "sets user 4 name, password, and privilages" do
646
+ ::VCR.use_cassette("foscam_set_user4") do
647
+ params = {user4: "user4", pwd4: "pass4", pri4:0}
648
+ response = @service.set_users(params)
649
+ response.should be_true
650
+ end
651
+ end
652
+
653
+ it "sets user 5 name, password, and privilages" do
654
+ ::VCR.use_cassette("foscam_set_user5") do
655
+ params = {user5: "user5", pwd4: "pass5", pri5:0}
656
+ response = @service.set_users(params)
657
+ response.should be_true
658
+ end
659
+ end
660
+
661
+ it "sets user 6 name, password, and privilages" do
662
+ ::VCR.use_cassette("foscam_set_user6") do
663
+ params = {user6: "user6", pwd6: "pass6", pri6:0}
664
+ response = @service.set_users(params)
665
+ response.should be_true
666
+ end
667
+ end
668
+
669
+ it "sets user 7 name, password, and privilages" do
670
+ ::VCR.use_cassette("foscam_set_user7") do
671
+ params = {user7: "user7", pwd7: "pass7", pri7:0}
672
+ response = @service.set_users(params)
673
+ response.should be_true
674
+ end
675
+ end
676
+
677
+ it "sets user 8 name, password, and privilages" do
678
+ ::VCR.use_cassette("foscam_set_user8") do
679
+ params = {user8: "user8", pwd7: "pass8", pri8:0}
680
+ response = @service.set_users(params)
681
+ response.should be_true
682
+ end
683
+ end
684
+ end
685
+
686
+ context "with invalid parameters" do
687
+ it "raises an exception when username or password is more than 12 characters long" do
688
+ [:user1, :pwd1, :user2, :pwd2, :user3, :pwd3, :user4, :pwd4, :user5, :pwd5, :user6, :pwd6, :user7, :pwd7, :user8, :pwd8].each do |key|
689
+ expect {@service.set_users(key => "0123456789123")}.to raise_error
690
+ end
691
+ end
692
+ end
693
+
694
+ context "response is unsuccessful" do
695
+ before(:each) do
696
+ response = ::Faraday::Response.new
697
+ response.stub!(:success?).and_return(false)
698
+ @connection.stub(:get).with('set_users.cgi?').and_return(response)
699
+ @service.connection = @connection
700
+ end
701
+ it "returns a hash of variables" do
702
+ response = @service.set_users({})
703
+ response.should be_false
704
+ end
705
+ end
706
+
707
+ end
708
+
709
+ # describe "#set_devices" do
710
+ # around(:each) do |spec|
711
+ # VCR.use_cassette("foscam_set_devices") do
712
+ # spec.run
713
+ # end
714
+ # end
715
+ # it "" do
716
+ # @service.set_devices(params)
717
+ # end
718
+
719
+ # end
720
+
721
+ describe "#set_network" do
722
+ context "with valid parameters" do
723
+ around(:each) do |spec|
724
+ # @service.connection = @connection
725
+ ::VCR.use_cassette("foscam_set_network") do
726
+ spec.run
727
+ end
728
+ end
729
+ it "returns a hash of variables" do
730
+ params = {ip: "192.168.0.100", mask: "0.0.0.0", gateway: "0.0.0.0", dns: "8.8.8.8", port: "8080"}
731
+ response = @service.set_network(params)
732
+ response.should be_true
733
+ end
734
+ end
735
+
736
+ context "response is unsuccessful" do
737
+ before(:each) do
738
+ response = ::Faraday::Response.new
739
+ response.stub!(:success?).and_return(false)
740
+ @connection.stub(:get).with('set_network.cgi?').and_return(response)
741
+ @service.connection = @connection
742
+ end
743
+ it "returns a hash of variables" do
744
+ params = {}
745
+ response = @service.set_network(params)
746
+ response.should be_false
747
+ end
748
+ end
749
+ end
750
+
751
+ describe "#set_wifi" do
752
+ context "with valid parameters" do
753
+ around(:each) do |spec|
754
+ # @service.connection = @connection
755
+ ::VCR.use_cassette("foscam_set_wifi") do
756
+ spec.run
757
+ end
758
+ end
759
+ it "returns a hash of variables" do
760
+ params = {ssid: "my_wireless_ssid", enable: 1, encrypt: 1, wpa_psk: "my_wireless_password"}
761
+ response = @service.set_wifi(params)
762
+ response.should be_true
763
+ end
764
+ end
765
+
766
+ context "response is unsuccessful" do
767
+ before(:each) do
768
+ response = ::Faraday::Response.new
769
+ response.stub!(:success?).and_return(false)
770
+ @connection.stub(:get).with('set_wifi.cgi?').and_return(response)
771
+ @service.connection = @connection
772
+ end
773
+ it "returns a hash of variables" do
774
+ params = {}
775
+ response = @service.set_wifi(params)
776
+ response.should be_false
777
+ end
778
+ end
779
+
780
+
781
+ end
782
+
783
+ describe "#set_pppoe" do
784
+ context "with valid parameters" do
785
+ around(:each) do |spec|
786
+ # @service.connection = @connection
787
+ ::VCR.use_cassette("foscam_set_pppoe") do
788
+ spec.run
789
+ end
790
+ end
791
+ it "returns a hash of variables" do
792
+ params = {enable: 1, user: "root", pwd: "pass"}
793
+ response = @service.set_pppoe(params)
794
+ response.should be_true
795
+ end
796
+ end
797
+ context "with invalid parameters" do
798
+ it "raises an exception when username is more than 40 characters long" do
799
+ expect {@service.set_pppoe(user: "01234567890123456789012345678901234567891")}.to raise_error
800
+ end
801
+ it "raises an exception when password is more than 20 characters long" do
802
+ expect {@service.set_pppoe(pwd: "012345678901234567890")}.to raise_error
803
+ end
804
+ end
805
+ context "response is unsuccessful" do
806
+ before(:each) do
807
+ response = ::Faraday::Response.new
808
+ response.stub!(:success?).and_return(false)
809
+ @connection.stub(:get).with('set_pppoe.cgi?').and_return(response)
810
+ @service.connection = @connection
811
+ end
812
+ it "returns a hash of variables" do
813
+ params = {}
814
+ response = @service.set_pppoe(params)
815
+ response.should be_false
816
+ end
817
+ end
818
+ end
819
+
820
+ describe "#set_upnp" do
821
+ context "with valid parameters" do
822
+ around(:each) do |spec|
823
+ # @service.connection = @connection
824
+ ::VCR.use_cassette("foscam_set_upnp") do
825
+ spec.run
826
+ end
827
+ end
828
+ it "returns a hash of variables" do
829
+ response = @service.set_upnp(1)
830
+ response.should be_true
831
+ end
832
+ end
833
+
834
+ context "response is unsuccessful" do
835
+ before(:each) do
836
+ response = ::Faraday::Response.new
837
+ response.stub!(:success?).and_return(false)
838
+ @connection.stub(:get).with('set_upnp.cgi?enable=1').and_return(response)
839
+ @service.connection = @connection
840
+ end
841
+ it "returns a hash of variables" do
842
+ response = @service.set_upnp(1)
843
+ response.should be_false
844
+ end
845
+ end
846
+
847
+ end
848
+
849
+ describe "#set_ddns" do
850
+ context "with valid parameters" do
851
+ around(:each) do |spec|
852
+ # @service.connection = @connection
853
+ ::VCR.use_cassette("foscam_set_ddns") do
854
+ spec.run
855
+ end
856
+ end
857
+ it "returns a hash of variables" do
858
+ params = {service: 3, user: "root", pwd: "password", host: "hostname.dyndns.com"}
859
+ response = @service.set_ddns(params)
860
+ response.should be_true
861
+ end
862
+ end
863
+ context "with invalid parameters" do
864
+ it "raises an exception when username is more than 20 characters long" do
865
+ expect {@service.set_ddns(user: "012345678901234567890")}.to raise_error
866
+ end
867
+ it "raises an exception when password is more than 20 characters long" do
868
+ expect {@service.set_ddns(pwd: "012345678901234567890")}.to raise_error
869
+ end
870
+ it "raises an exception when proxy_svr is more than 20 characters long" do
871
+ expect {@service.set_ddns(proxy_svr: "012345678901234567890")}.to raise_error
872
+ end
873
+ it "raises an exception when host is more than 40 characters long" do
874
+ expect {@service.set_ddns(host: "01234567890123456789012345678901234567890")}.to raise_error
875
+ end
876
+ end
877
+ context "response is unsuccessful" do
878
+ before(:each) do
879
+ response = ::Faraday::Response.new
880
+ response.stub!(:success?).and_return(false)
881
+ @connection.stub(:get).with('set_ddns.cgi?').and_return(response)
882
+ @service.connection = @connection
883
+ end
884
+ it "returns a hash of variables" do
885
+ response = @service.set_ddns({})
886
+ response.should be_false
887
+ end
888
+ end
889
+ end
890
+
891
+ describe "#set_ftp" do
892
+
893
+ context "with valid parameters" do
894
+ around(:each) do |spec|
895
+ # @service.connection = @connection
896
+ ::VCR.use_cassette("foscam_set_ftp") do
897
+ spec.run
898
+ end
899
+ end
900
+ it "returns a hash of variables" do
901
+ params = {svr:"192.168.0.116", port:21, user:"my_username", pwd:"my_password", dir:"R2D2", upload_interval: 3600}
902
+ response = @service.set_ftp(params)
903
+ response.should be_true
904
+ end
905
+ end
906
+
907
+ context "response is unsuccessful" do
908
+ before(:each) do
909
+ response = ::Faraday::Response.new
910
+ response.stub!(:success?).and_return(false)
911
+ @connection.stub(:get).with('set_ftp.cgi?').and_return(response)
912
+ @service.connection = @connection
913
+ end
914
+ it "returns a hash of variables" do
915
+ response = @service.set_ftp({})
916
+ response.should be_false
917
+ end
918
+ end
919
+ end
920
+
921
+ describe "#set_mail" do
922
+
923
+ context "with valid parameters" do
924
+ around(:each) do |spec|
925
+ # @service.connection = @connection
926
+ ::VCR.use_cassette("foscam_set_mail") do
927
+ spec.run
928
+ end
929
+ end
930
+ it "returns a hash of variables" do
931
+ params = {svr:"smtp.gmail.com", port: 465, user: "username@gmail.com", pwd:"password", sender: "sender@gmail.com", receiver1: "receiver@gmail.com"}
932
+ response = @service.set_mail(params)
933
+ response.should be_true
934
+ end
935
+ end
936
+ context "with invalid parameters" do
937
+ it "raises an exception when username is more than 20 characters long" do
938
+ expect {@service.set_mail(user: "012345678901234567890")}.to raise_error
939
+ end
940
+ it "raises an exception when password is more than 20 characters long" do
941
+ expect {@service.set_mail(pwd: "012345678901234567890")}.to raise_error
942
+ end
943
+ end
944
+ context "response is unsuccessful" do
945
+ before(:each) do
946
+ response = ::Faraday::Response.new
947
+ response.stub!(:success?).and_return(false)
948
+ @connection.stub(:get).with('set_mail.cgi?').and_return(response)
949
+ @service.connection = @connection
950
+ end
951
+ it "returns a hash of variables" do
952
+ response = @service.set_mail({})
953
+ response.should be_false
954
+ end
955
+ end
956
+
957
+ end
958
+
959
+ describe "#set_alarm" do
960
+
961
+ context "with valid parameters" do
962
+ around(:each) do |spec|
963
+ # @service.connection = @connection
964
+ ::VCR.use_cassette("foscam_set_alarm") do
965
+ spec.run
966
+ end
967
+ end
968
+ it "returns a hash of variables" do
969
+ params = {motion_armed: 0, motion_sensitivity:3, input_armed: 0, iolinkage: 0, mail:0, upload_interval:0}
970
+ response = @service.set_alarm(params)
971
+ response.should be_true
972
+ end
973
+ end
974
+
975
+ context "response is unsuccessful" do
976
+ before(:each) do
977
+ response = ::Faraday::Response.new
978
+ response.stub!(:success?).and_return(false)
979
+ @connection.stub(:get).with('set_alarm.cgi?').and_return(response)
980
+ @service.connection = @connection
981
+ end
982
+ it "returns a hash of variables" do
983
+ response = @service.set_alarm({})
984
+ response.should be_false
985
+ end
986
+ end
987
+
988
+ end
989
+
990
+ describe "#comm_write" do
991
+
992
+ context "with valid parameters" do
993
+ around(:each) do |spec|
994
+ # @service.connection = @connection
995
+ ::VCR.use_cassette("foscam_comm_write") do
996
+ spec.run
997
+ end
998
+ end
999
+ it "returns a hash of variables" do
1000
+ params = {port:0, baud: 15, bytes: "dsfds", data:"url_code"}
1001
+ response = @service.comm_write(params)
1002
+ response.should be_true
1003
+ end
1004
+ end
1005
+
1006
+ context "response is unsuccessful" do
1007
+ before(:each) do
1008
+ response = ::Faraday::Response.new
1009
+ response.stub!(:success?).and_return(false)
1010
+ @connection.stub(:get).with('comm_write.cgi?').and_return(response)
1011
+ @service.connection = @connection
1012
+ end
1013
+ it "returns a hash of variables" do
1014
+ response = @service.comm_write({})
1015
+ response.should be_false
1016
+ end
1017
+ end
1018
+
1019
+ end
1020
+
1021
+ describe "#set_forbidden" do
1022
+ context "with valid parameters" do
1023
+ around(:each) do |spec|
1024
+ # @service.connection = @connection
1025
+ ::VCR.use_cassette("foscam_set_forbidden") do
1026
+ spec.run
1027
+ end
1028
+ end
1029
+ it "returns a hash of variables" do
1030
+ params = {
1031
+ schedule_sun_0: 95, schedule_sun_1: 45, schedule_sun_2: 20,
1032
+ schedule_mon_0: 95, schedule_mon_1: 45, schedule_mon_2: 20,
1033
+ schedule_tue_0: 95, schedule_tue_1: 45, schedule_tue_2: 20,
1034
+ schedule_wed_0: 95, schedule_wed_1: 45, schedule_wed_2: 20,
1035
+ schedule_thu_0: 95, schedule_thu_1: 45, schedule_thu_2: 20,
1036
+ schedule_fri_0: 95, schedule_fri_1: 45, schedule_fri_2: 20,
1037
+ schedule_sat_0: 95, schedule_sat_1: 45, schedule_sat_2: 20
1038
+ }
1039
+ response = @service.set_forbidden(params)
1040
+ response.should be_true
1041
+ end
1042
+ end
1043
+
1044
+ context "response is unsuccessful" do
1045
+ before(:each) do
1046
+ response = ::Faraday::Response.new
1047
+ response.stub!(:success?).and_return(false)
1048
+ @connection.stub(:get).with('set_forbidden.cgi?').and_return(response)
1049
+ @service.connection = @connection
1050
+ end
1051
+ it "returns a hash of variables" do
1052
+ response = @service.set_forbidden({})
1053
+ response.should be_false
1054
+ end
1055
+ end
1056
+ end
1057
+
1058
+ describe "#get_forbidden" do
1059
+ context "response is successful" do
1060
+ around(:each) do |spec|
1061
+ # @service.connection = @connection
1062
+ ::VCR.use_cassette("foscam_get_forbidden") do
1063
+ spec.run
1064
+ end
1065
+ end
1066
+ it "returns a hash of variables" do
1067
+ response = @service.get_forbidden
1068
+ [ :schedule_sun_0, :schedule_sun_1, :schedule_sun_2,
1069
+ :schedule_mon_0, :schedule_mon_1, :schedule_mon_2,
1070
+ :schedule_tue_0, :schedule_tue_1, :schedule_tue_2,
1071
+ :schedule_wed_0, :schedule_wed_1, :schedule_wed_2,
1072
+ :schedule_thu_0, :schedule_thu_1, :schedule_thu_2,
1073
+ :schedule_fri_0, :schedule_fri_1, :schedule_fri_2,
1074
+ :schedule_sat_0, :schedule_sat_1, :schedule_sat_2
1075
+ ].each do |key|
1076
+ response.should have_key(key)
1077
+ end
1078
+ end
1079
+ end
1080
+
1081
+ context "response is unsuccessful" do
1082
+ before(:each) do
1083
+ response = ::Faraday::Response.new
1084
+ response.stub!(:success?).and_return(false)
1085
+ @connection.stub(:get).with('get_forbidden.cgi').and_return(response)
1086
+ @service.connection = @connection
1087
+ end
1088
+ it "returns a hash of variables" do
1089
+ response = @service.get_forbidden
1090
+ response.should == {}
1091
+ end
1092
+ end
1093
+ end
1094
+
1095
+ describe "#set_misc" do
1096
+ context "with valid parameters" do
1097
+ around(:each) do |spec|
1098
+ # @service.connection = @connection
1099
+ ::VCR.use_cassette("foscam_set_misc") do
1100
+ spec.run
1101
+ end
1102
+ end
1103
+ it "returns a hash of variables" do
1104
+ @params = {
1105
+ :led_mode => :mode1,
1106
+ :ptz_center_onstart => false,
1107
+ :ptz_auto_patrol_interval => 5,
1108
+ :ptz_auto_patrol_type => :vertical,
1109
+ :ptz_patrol_h_rounds => 1,
1110
+ :ptz_patrol_v_rounds => 1,
1111
+ :ptz_patrol_rate => 20,
1112
+ :ptz_patrol_up_rate => 10,
1113
+ :ptz_patrol_down_rate => 10,
1114
+ :ptz_patrol_left_rate => 10,
1115
+ :ptz_patrol_right_rate => 10,
1116
+ :ptz_disable_preset => false,
1117
+ :ptz_preset_onstart => true
1118
+ }
1119
+ response = @service.set_misc(@params)
1120
+ response.should be_true
1121
+ response = @service.get_misc
1122
+ @params.each do |key, value|
1123
+ response[key].should == value
1124
+ end
1125
+ end
1126
+ end
1127
+
1128
+ context "with invalid parameters" do
1129
+ it "raises an exception when patrol rates are > 100" do
1130
+ [:ptz_patrol_rate, :ptz_patrol_up_rate, :ptz_patrol_down_rate, :ptz_patrol_left_rate, :ptz_patrol_right_rate].each do |key|
1131
+ expect {@service.set_misc(key => 101)}.to raise_error
1132
+ end
1133
+ end
1134
+ it "raises an exception when patrol rates and rounds are < 0" do
1135
+ [:ptz_auto_patrol_interval, :ptz_patrol_h_rounds, :ptz_patrol_v_rounds, :ptz_patrol_rate, :ptz_patrol_up_rate, :ptz_patrol_down_rate, :ptz_patrol_left_rate, :ptz_patrol_right_rate].each do |key|
1136
+ expect {@service.set_misc(key => -1)}.to raise_error
1137
+ end
1138
+ end
1139
+
1140
+ it "raises an exception when password is more than 20 characters long" do
1141
+ expect {@service.set_misc(pwd: "012345678901234567890")}.to raise_error
1142
+ end
1143
+
1144
+ it "raises an exception if there is no match for the led_mode" do
1145
+ expect {@service.set_misc(led_mode: :mode5)}.to raise_error
1146
+ end
1147
+
1148
+ it "raises an exception if there is no match for the ptz_auto_patrol_type" do
1149
+ expect {@service.set_misc(ptz_auto_patrol_type: :vert)}.to raise_error
1150
+ end
1151
+
1152
+ end
1153
+
1154
+ context "response is unsuccessful" do
1155
+ before(:each) do
1156
+ response = ::Faraday::Response.new
1157
+ response.stub!(:success?).and_return(false)
1158
+ @connection.stub(:get).with('set_misc.cgi?').and_return(response)
1159
+ @service.connection = @connection
1160
+ end
1161
+ it "returns a hash of variables" do
1162
+ response = @service.set_misc({})
1163
+ response.should be_false
1164
+ end
1165
+ end
1166
+ end
1167
+
1168
+ describe "#get_misc" do
1169
+ context "response is successful" do
1170
+ around(:each) do |spec|
1171
+ # @service.connection = @connection
1172
+ ::VCR.use_cassette("foscam_get_misc") do
1173
+ spec.run
1174
+ end
1175
+ end
1176
+ it "returns a hash of variables" do
1177
+ response = @service.get_misc
1178
+ [:led_mode, :ptz_center_onstart, :ptz_auto_patrol_interval, :ptz_auto_patrol_type, :ptz_patrol_h_rounds, :ptz_patrol_v_rounds, :ptz_patrol_rate, :ptz_patrol_up_rate, :ptz_patrol_down_rate, :ptz_patrol_left_rate, :ptz_patrol_right_rate, :ptz_disable_preset, :ptz_preset_onstart].each do |key|
1179
+ response.should have_key(key)
1180
+ end
1181
+ end
1182
+
1183
+ it "sets onstart fields as a boolean" do
1184
+ response = @service.get_misc
1185
+ [:ptz_disable_preset, :ptz_preset_onstart, :ptz_center_onstart].each do |key|
1186
+ response[key].should be_a_kind_of(Boolean)
1187
+ end
1188
+ end
1189
+
1190
+ it "sets the patrol round, rates, and intervals as an integer" do
1191
+ response = @service.get_misc
1192
+ [
1193
+ :ptz_auto_patrol_interval, :ptz_patrol_h_rounds, :ptz_patrol_v_rounds, :ptz_patrol_rate,
1194
+ :ptz_patrol_up_rate, :ptz_patrol_down_rate, :ptz_patrol_left_rate, :ptz_patrol_right_rate
1195
+ ].each do |key|
1196
+ response[key].should be_a_kind_of(Integer)
1197
+ end
1198
+ end
1199
+
1200
+ it "sets the led_mode as a symbol" do
1201
+ response = @service.get_misc
1202
+ response[:led_mode].should be_a_kind_of(Symbol)
1203
+ ::Foscam::LED_MODE.values.should include(response[:led_mode])
1204
+ end
1205
+
1206
+ it "sets the ptz_auto_patrol_type as a symbol" do
1207
+ response = @service.get_misc
1208
+ response[:ptz_auto_patrol_type].should be_a_kind_of(Symbol)
1209
+ ::Foscam::PTZ_AUTO_PATROL_TYPE.values.should include(response[:ptz_auto_patrol_type])
1210
+ end
1211
+
1212
+ end
1213
+
1214
+ context "response is unsuccessful" do
1215
+ before(:each) do
1216
+ response = ::Faraday::Response.new
1217
+ response.stub!(:success?).and_return(false)
1218
+ @connection.stub(:get).with('get_misc.cgi').and_return(response)
1219
+ @service.connection = @connection
1220
+ end
1221
+ it "returns a hash of variables" do
1222
+ response = @service.get_misc
1223
+ response.should == {}
1224
+ end
1225
+ end
1226
+ end
1227
+
1228
+ describe "#set_decoder" do
1229
+ context "with valid parameters" do
1230
+ around(:each) do |spec|
1231
+ # @service.connection = @connection
1232
+ ::VCR.use_cassette("foscam_set_decoder") do
1233
+ spec.run
1234
+ end
1235
+ end
1236
+ it "sets the baud with an integer" do
1237
+ baud = 9
1238
+ response = @service.set_decoder(baud)
1239
+ response.should be_true
1240
+ end
1241
+
1242
+ it "sets the baud with a symbol" do
1243
+ baud = :B1200
1244
+ response = @service.set_decoder(baud)
1245
+ response.should be_true
1246
+ end
1247
+
1248
+ it "sets the baud with a string" do
1249
+ baud = "B1200"
1250
+ response = @service.set_decoder(baud)
1251
+ response.should be_true
1252
+ end
1253
+ end
1254
+
1255
+ context "response is unsuccessful" do
1256
+ before(:each) do
1257
+ response = ::Faraday::Response.new
1258
+ response.stub!(:success?).and_return(false)
1259
+ @connection.stub(:get).with('set_decoder.cgi?baud=9').and_return(response)
1260
+ @service.connection = @connection
1261
+ end
1262
+ it "returns a hash of variables" do
1263
+ response = @service.set_decoder(9)
1264
+ response.should be_false
1265
+ end
1266
+ end
1267
+ end
1268
+
1269
+ end