foscam-ruby 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/.travis.yml +1 -1
- data/foscam-ruby.gemspec +1 -0
- data/lib/foscam-ruby.rb +20 -0
- data/lib/foscam/client.rb +69 -248
- data/lib/foscam/constants.rb +144 -0
- data/lib/foscam/model/alarm_config.rb +147 -0
- data/lib/foscam/model/base.rb +48 -0
- data/lib/foscam/model/device.rb +92 -0
- data/lib/foscam/model/ftp_server.rb +109 -0
- data/lib/foscam/model/mail_server.rb +124 -0
- data/lib/foscam/model/network.rb +79 -0
- data/lib/foscam/model/user.rb +174 -0
- data/lib/foscam/schedule/day.rb +63 -0
- data/lib/foscam/schedule/third_of_a_day.rb +42 -0
- data/lib/foscam/schedule/week.rb +89 -0
- data/lib/foscam/version.rb +1 -1
- data/spec/foscam/client_spec.rb +18 -60
- data/spec/foscam/model/alarm_config_spec.rb +164 -0
- data/spec/foscam/model/base_spec.rb +22 -0
- data/spec/foscam/model/device_spec.rb +136 -0
- data/spec/foscam/model/ftp_server_spec.rb +135 -0
- data/spec/foscam/model/mail_server_spec.rb +126 -0
- data/spec/foscam/model/network_spec.rb +128 -0
- data/spec/foscam/model/user_spec.rb +322 -0
- data/spec/foscam/schedule/day_spec.rb +37 -0
- data/spec/foscam/schedule/third_of_a_day_spec.rb +42 -0
- data/spec/foscam/schedule/week_spec.rb +109 -0
- metadata +64 -19
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foscam::Model::FtpServer do
|
4
|
+
|
5
|
+
def valid_client_params
|
6
|
+
{:url => "http://192.168.0.1/", :username => "foobar", :password => "secret"}
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_get_params
|
10
|
+
{
|
11
|
+
:ftp_svr => "192.168.0.148",
|
12
|
+
:ftp_port => 21,
|
13
|
+
:ftp_user => "foobar",
|
14
|
+
:ftp_pwd => "secret",
|
15
|
+
:ftp_dir => "foscam",
|
16
|
+
:ftp_mode => 1,
|
17
|
+
:ftp_upload_interval => 0,
|
18
|
+
:ftp_filename => "",
|
19
|
+
:ftp_numberoffiles => 5,
|
20
|
+
:ftp_schedule_enable => false,
|
21
|
+
:ftp_schedule => Foscam::Schedule::Week.new
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
before(:each) do
|
26
|
+
@client = ::Foscam::Client.new(valid_client_params)
|
27
|
+
@client.stub(:get_params).and_return(default_get_params)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe "#client=" do
|
32
|
+
before(:each) do
|
33
|
+
@ftp = Foscam::Model::FtpServer.instance
|
34
|
+
end
|
35
|
+
it "sets the current Foscam::Client" do
|
36
|
+
@ftp.client = @client
|
37
|
+
@ftp.client.should eql(@client)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "sets the ftp parameters" do
|
41
|
+
@ftp.client = @client
|
42
|
+
@ftp.dir.should == default_get_params[:ftp_dir]
|
43
|
+
@ftp.address.should == default_get_params[:ftp_svr]
|
44
|
+
@ftp.port.should == default_get_params[:ftp_port]
|
45
|
+
@ftp.username.should == default_get_params[:ftp_user]
|
46
|
+
@ftp.password.should == default_get_params[:ftp_pwd]
|
47
|
+
@ftp.upload_interval.should == default_get_params[:ftp_upload_interval]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#save" do
|
52
|
+
before(:each) do
|
53
|
+
# @client.stub(:get_params).and_return(one_device_response)
|
54
|
+
@ftp = Foscam::Model::FtpServer.instance
|
55
|
+
end
|
56
|
+
context "with valid params" do
|
57
|
+
before(:each) do
|
58
|
+
@ftp.stub(:is_valid?).and_return(true)
|
59
|
+
end
|
60
|
+
context "is dirty" do
|
61
|
+
context "request is successful" do
|
62
|
+
before(:each) do
|
63
|
+
params = {:dir => "path/root/", :user => "foobar1", :pwd => "secret1", :svr => "192.168.0.2", :port => 21,:upload_interval => 0}
|
64
|
+
# @ftp.stub(:changed?).and_return(true)
|
65
|
+
@client.should_receive(:set_ftp).with(params).once
|
66
|
+
@client.stub(:set_ftp).and_return(true)
|
67
|
+
end
|
68
|
+
it "updates the ftp attributes that changed" do
|
69
|
+
@ftp.client = @client
|
70
|
+
@ftp.username = "foobar1"
|
71
|
+
@ftp.password = "secret1"
|
72
|
+
@ftp.dir = "path/root/"
|
73
|
+
@ftp.address = "192.168.0.2"
|
74
|
+
flag = @ftp.save
|
75
|
+
flag.should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
context "request is unsuccessful" do
|
79
|
+
before(:each) do
|
80
|
+
params = {:dir => "path/root/", :user => "foobar1", :pwd => "secret1", :svr => "192.168.0.2"}
|
81
|
+
# @ftp.stub(:changed?).and_return(true)
|
82
|
+
@client.should_receive(:set_ftp).with(params).once
|
83
|
+
@client.stub(:set_ftp).and_return(false)
|
84
|
+
end
|
85
|
+
it "fails to update the device attributes" do
|
86
|
+
@ftp.client = @client
|
87
|
+
@ftp.username = "foobar1"
|
88
|
+
@ftp.password = "secret1"
|
89
|
+
@ftp.dir = "path/root/"
|
90
|
+
@ftp.address = "192.168.0.2"
|
91
|
+
flag = @ftp.save
|
92
|
+
flag.should be_false
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
context "is not dirty" do
|
97
|
+
before(:each) do
|
98
|
+
@ftp.stub(:changed?).and_return(false)
|
99
|
+
end
|
100
|
+
it "skips updating since nothing changed" do
|
101
|
+
@client.should_not_receive(:set_ftp)
|
102
|
+
@ftp.client = @client
|
103
|
+
flag = @ftp.save
|
104
|
+
flag.should be_false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
context "with invalid params" do
|
109
|
+
before(:each) do
|
110
|
+
@ftp.stub(:is_valid?).and_return(false)
|
111
|
+
end
|
112
|
+
it "skips updating since nothing changed" do
|
113
|
+
@client.should_not_receive(:set_ftp)
|
114
|
+
@ftp.client = @client
|
115
|
+
flag = @ftp.save
|
116
|
+
flag.should be_false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#clear" do
|
122
|
+
before(:each) do
|
123
|
+
@ftp = Foscam::Model::FtpServer.instance
|
124
|
+
end
|
125
|
+
it "should save the user with blank usernames, password and privileges" do
|
126
|
+
params = {:dir => "", :user => "", :pwd => "", :svr => "", :port => 21, :upload_interval => 0}
|
127
|
+
@client.stub(:set_ftp).with(params).and_return(true)
|
128
|
+
@client.should_receive(:set_ftp).with(params).once
|
129
|
+
@ftp.client = @client
|
130
|
+
flag = @ftp.clear
|
131
|
+
flag.should be_true
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foscam::Model::MailServer do
|
4
|
+
|
5
|
+
def valid_client_params
|
6
|
+
{:url => "http://192.168.0.1/", :username => "foobar", :password => "secret"}
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_get_params
|
10
|
+
{
|
11
|
+
:mail_svr => "192.168.0.148",
|
12
|
+
:mail_port => 21,
|
13
|
+
:mail_user => "foobar",
|
14
|
+
:mail_pwd => "secret",
|
15
|
+
:mail_sender => "foscam"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:each) do
|
20
|
+
@client = ::Foscam::Client.new(valid_client_params)
|
21
|
+
@client.stub(:get_params).and_return(default_get_params)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#client=" do
|
25
|
+
before(:each) do
|
26
|
+
@mail = Foscam::Model::MailServer.instance
|
27
|
+
end
|
28
|
+
it "sets the current Foscam::Client" do
|
29
|
+
@mail.client = @client
|
30
|
+
@mail.client.should eql(@client)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "sets the mail parameters" do
|
34
|
+
@mail.client = @client
|
35
|
+
@mail.sender.should == default_get_params[:mail_sender]
|
36
|
+
@mail.address.should == default_get_params[:mail_svr]
|
37
|
+
@mail.port.should == default_get_params[:mail_port]
|
38
|
+
@mail.username.should == default_get_params[:mail_user]
|
39
|
+
@mail.password.should == default_get_params[:mail_pwd]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#save" do
|
44
|
+
before(:each) do
|
45
|
+
# @client.stub(:get_params).and_return(one_device_response)
|
46
|
+
@mail = Foscam::Model::MailServer.instance
|
47
|
+
end
|
48
|
+
context "with valid params" do
|
49
|
+
before(:each) do
|
50
|
+
@mail.stub(:is_valid?).and_return(true)
|
51
|
+
end
|
52
|
+
context "is dirty" do
|
53
|
+
|
54
|
+
context "request is successful" do
|
55
|
+
before(:each) do
|
56
|
+
params = {:sender => "foo@bar.com", :user => "foobar1", :pwd => "secret1", :svr => "192.168.0.2", :port => 21}
|
57
|
+
@client.should_receive(:set_mail).with(params).once
|
58
|
+
@client.stub(:set_mail).and_return(true)
|
59
|
+
end
|
60
|
+
it "updates the mail attributes that changed" do
|
61
|
+
@mail.client = @client
|
62
|
+
@mail.username = "foobar1"
|
63
|
+
@mail.password = "secret1"
|
64
|
+
@mail.sender = "foo@bar.com"
|
65
|
+
@mail.address = "192.168.0.2"
|
66
|
+
flag = @mail.save
|
67
|
+
flag.should be_true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
context "request is unsuccessful" do
|
71
|
+
before(:each) do
|
72
|
+
params = {:sender => "foo@bar.com", :user => "foobar1", :pwd => "secret1", :svr => "192.168.0.2"}
|
73
|
+
@client.should_receive(:set_mail).with(params).once
|
74
|
+
@client.stub(:set_mail).and_return(false)
|
75
|
+
end
|
76
|
+
it "fails to update the device attributes" do
|
77
|
+
@mail.client = @client
|
78
|
+
@mail.username = "foobar1"
|
79
|
+
@mail.password = "secret1"
|
80
|
+
@mail.sender = "foo@bar.com"
|
81
|
+
@mail.address = "192.168.0.2"
|
82
|
+
flag = @mail.save
|
83
|
+
flag.should be_false
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
context "is not dirty" do
|
88
|
+
before(:each) do
|
89
|
+
@mail.stub(:changed?).and_return(false)
|
90
|
+
end
|
91
|
+
it "skips updating since nothing changed" do
|
92
|
+
@client.should_not_receive(:set_mail)
|
93
|
+
@mail.client = @client
|
94
|
+
flag = @mail.save
|
95
|
+
flag.should be_false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
context "with invalid params" do
|
100
|
+
before(:each) do
|
101
|
+
@mail.stub(:is_valid?).and_return(false)
|
102
|
+
end
|
103
|
+
it "skips updating since nothing changed" do
|
104
|
+
@client.should_not_receive(:set_mail)
|
105
|
+
@mail.client = @client
|
106
|
+
flag = @mail.save
|
107
|
+
flag.should be_false
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "#clear" do
|
113
|
+
before(:each) do
|
114
|
+
@mail = Foscam::Model::MailServer.instance
|
115
|
+
end
|
116
|
+
it "should save the user with blank usernames, password and privileges" do
|
117
|
+
params = {:sender => "", :user => "", :pwd => "", :svr => "", :port => 21, :receiver1 => "", :receiver2 => "", :receiver3 => "", :receiver4 => ""}
|
118
|
+
@client.stub(:set_mail).with(params).and_return(true)
|
119
|
+
@client.should_receive(:set_mail).with(params).once
|
120
|
+
@mail.client = @client
|
121
|
+
flag = @mail.clear
|
122
|
+
flag.should be_true
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foscam::Model::Network do
|
4
|
+
|
5
|
+
def valid_client_params
|
6
|
+
{:url => "http://192.168.0.1/", :username => "foobar", :password => "secret"}
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_get_params
|
10
|
+
{
|
11
|
+
:ip => "192.168.0.148",
|
12
|
+
:mask => "8.8.8.8",
|
13
|
+
:gateway => "0.0.0.0",
|
14
|
+
:dns => "0.0.0.0",
|
15
|
+
:port => 80
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:each) do
|
20
|
+
@client = ::Foscam::Client.new(valid_client_params)
|
21
|
+
@client.stub(:get_params).and_return(default_get_params)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
describe "#client=" do
|
26
|
+
before(:each) do
|
27
|
+
@network = Foscam::Model::Network.instance
|
28
|
+
end
|
29
|
+
it "sets the current Foscam::Client" do
|
30
|
+
@network.client = @client
|
31
|
+
@network.client.should eql(@client)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "sets the ftp parameters" do
|
35
|
+
@network.client = @client
|
36
|
+
@network.ip_address.should == default_get_params[:ip]
|
37
|
+
@network.mask.should == default_get_params[:mask]
|
38
|
+
@network.gateway.should == default_get_params[:gateway]
|
39
|
+
@network.dns.should == default_get_params[:dns]
|
40
|
+
@network.port.should == default_get_params[:port]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#save" do
|
45
|
+
before(:each) do
|
46
|
+
# @client.stub(:get_params).and_return(one_device_response)
|
47
|
+
@network = Foscam::Model::Network.instance
|
48
|
+
end
|
49
|
+
context "with valid params" do
|
50
|
+
before(:each) do
|
51
|
+
@network.stub(:is_valid?).and_return(true)
|
52
|
+
end
|
53
|
+
context "is dirty" do
|
54
|
+
context "request is successful" do
|
55
|
+
before(:each) do
|
56
|
+
params = {
|
57
|
+
:ip => "192.168.1.3",
|
58
|
+
:mask => "255.255.255.0",
|
59
|
+
:gateway => "192.168.1.1",
|
60
|
+
:dns => "192.168.1.1",
|
61
|
+
:port => 8080
|
62
|
+
}
|
63
|
+
# @network.stub(:changed?).and_return(true)
|
64
|
+
@client.should_receive(:set_network).with(params).once
|
65
|
+
@client.stub(:set_network).and_return(true)
|
66
|
+
end
|
67
|
+
it "updates the ftp attributes that changed" do
|
68
|
+
@network.client = @client
|
69
|
+
@network.ip_address = "192.168.1.3"
|
70
|
+
@network.mask = "255.255.255.0"
|
71
|
+
@network.gateway = "192.168.1.1"
|
72
|
+
@network.dns = "192.168.1.1"
|
73
|
+
@network.port = 8080
|
74
|
+
flag = @network.save
|
75
|
+
flag.should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
context "request is unsuccessful" do
|
79
|
+
before(:each) do
|
80
|
+
params = {
|
81
|
+
:ip => "192.168.1.3",
|
82
|
+
:mask => "255.255.255.0",
|
83
|
+
:gateway => "192.168.1.1",
|
84
|
+
:dns => "192.168.1.1",
|
85
|
+
:port => 8080
|
86
|
+
}
|
87
|
+
# @network.stub(:changed?).and_return(true)
|
88
|
+
@client.should_receive(:set_network).with(params).once
|
89
|
+
@client.stub(:set_network).and_return(false)
|
90
|
+
end
|
91
|
+
it "fails to update the device attributes" do
|
92
|
+
@network.client = @client
|
93
|
+
@network.ip_address = "192.168.1.3"
|
94
|
+
@network.mask = "255.255.255.0"
|
95
|
+
@network.gateway = "192.168.1.1"
|
96
|
+
@network.dns = "192.168.1.1"
|
97
|
+
@network.port = 8080
|
98
|
+
flag = @network.save
|
99
|
+
flag.should be_false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
context "is not dirty" do
|
104
|
+
before(:each) do
|
105
|
+
@network.stub(:changed?).and_return(false)
|
106
|
+
end
|
107
|
+
it "skips updating since nothing changed" do
|
108
|
+
@client.should_not_receive(:set_network)
|
109
|
+
@network.client = @client
|
110
|
+
flag = @network.save
|
111
|
+
flag.should be_false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
context "with invalid params" do
|
116
|
+
before(:each) do
|
117
|
+
@network.stub(:is_valid?).and_return(false)
|
118
|
+
end
|
119
|
+
it "skips updating since nothing changed" do
|
120
|
+
@client.should_not_receive(:set_network)
|
121
|
+
@network.client = @client
|
122
|
+
flag = @network.save
|
123
|
+
flag.should be_false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,322 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Foscam::Model::User do
|
4
|
+
|
5
|
+
def all_users_response
|
6
|
+
{
|
7
|
+
:user1_name => "user_1", :user1_pwd => "pass_1", :user1_pri => :administrator,
|
8
|
+
:user2_name => "user_2", :user2_pwd => "pass_2", :user2_pri => :administrator,
|
9
|
+
:user3_name => "user_3", :user3_pwd => "pass_3", :user3_pri => :administrator,
|
10
|
+
:user4_name => "user_4", :user4_pwd => "pass_4", :user4_pri => :administrator,
|
11
|
+
:user5_name => "user_5", :user5_pwd => "pass_5", :user5_pri => :administrator,
|
12
|
+
:user6_name => "user_6", :user6_pwd => "pass_6", :user6_pri => :administrator,
|
13
|
+
:user7_name => "user_7", :user7_pwd => "pass_7", :user7_pri => :administrator,
|
14
|
+
:user8_name => "user_8", :user8_pwd => "pass_8", :user8_pri => :administrator,
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def one_user_response
|
19
|
+
{
|
20
|
+
:user1_name => "user_1", :user1_pwd => "pass_1", :user1_pri => :administrator,
|
21
|
+
:user2_name => "", :user2_pwd => "", :user2_pri => :visitor,
|
22
|
+
:user3_name => "", :user3_pwd => "", :user3_pri => :visitor,
|
23
|
+
:user4_name => "", :user4_pwd => "", :user4_pri => :visitor,
|
24
|
+
:user5_name => "", :user5_pwd => "", :user5_pri => :visitor,
|
25
|
+
:user6_name => "", :user6_pwd => "", :user6_pri => :visitor,
|
26
|
+
:user7_name => "", :user7_pwd => "", :user7_pri => :visitor,
|
27
|
+
:user8_name => "", :user8_pwd => "", :user8_pri => :visitor,
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def valid_params
|
32
|
+
{:username => 'foobar', :password => 'secret', :privilege => :administrator}
|
33
|
+
end
|
34
|
+
before(:all) do
|
35
|
+
@client = ::Foscam::Client.new({:url => "http://192.168.0.1/", :username => "foobar", :password => "secret"})
|
36
|
+
end
|
37
|
+
describe ".all" do
|
38
|
+
it "returns an array of all the users" do
|
39
|
+
@client.stub(:get_params).and_return(all_users_response)
|
40
|
+
@client.should_receive(:get_params).once
|
41
|
+
Foscam::Model::User.client = @client
|
42
|
+
users = Foscam::Model::User.all
|
43
|
+
users.count.should == 8
|
44
|
+
index = 1
|
45
|
+
users.each do |user|
|
46
|
+
user.should be_an_instance_of(Foscam::Model::User)
|
47
|
+
user.id.should == index
|
48
|
+
user.username.should == "user_#{index}"
|
49
|
+
user.password.should == "pass_#{index}"
|
50
|
+
user.privilege.should == :administrator
|
51
|
+
index += 1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe ".create" do
|
57
|
+
it "builds a user and then saves it" do
|
58
|
+
Foscam::Model::User.any_instance.stub(:save).and_return(true)
|
59
|
+
Foscam::Model::User.any_instance.should_receive(:save).once
|
60
|
+
user = Foscam::Model::User.create(valid_params)
|
61
|
+
user.should_not be_nil
|
62
|
+
user.username.should == valid_params[:username]
|
63
|
+
user.password.should == valid_params[:password]
|
64
|
+
user.privilege.should == valid_params[:privilege]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe ".find" do
|
69
|
+
before(:each) do
|
70
|
+
@client.stub(:get_params).and_return(one_user_response)
|
71
|
+
end
|
72
|
+
context "when user exists" do
|
73
|
+
context "with valid id" do
|
74
|
+
it "returns the desired user by id" do
|
75
|
+
@client.should_receive(:get_params).once
|
76
|
+
Foscam::Model::User.client = @client
|
77
|
+
user = Foscam::Model::User.find(1)
|
78
|
+
user.should be_an_instance_of(Foscam::Model::User)
|
79
|
+
user.id.should == 1
|
80
|
+
user.username.should == "user_1"
|
81
|
+
user.password.should == "pass_1"
|
82
|
+
user.privilege.should == :administrator
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "when user doesn't exists" do
|
88
|
+
context "with valid id" do
|
89
|
+
it "returns a nil object" do
|
90
|
+
@client.should_receive(:get_params).once
|
91
|
+
Foscam::Model::User.client = @client
|
92
|
+
user = Foscam::Model::User.find(2)
|
93
|
+
user.should be_nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
context "with invalid id" do
|
97
|
+
it "returns a nil object" do
|
98
|
+
@client.should_not_receive(:get_params)
|
99
|
+
Foscam::Model::User.client = @client
|
100
|
+
user = Foscam::Model::User.find(10)
|
101
|
+
user.should be_nil
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe ".delete" do
|
108
|
+
context "with valid id" do
|
109
|
+
it "deletes the desired user" do
|
110
|
+
params = {:user1 => "", :pwd1 => "", :pri1 => 0}
|
111
|
+
@client.stub(:set_users).with(params).and_return(true)
|
112
|
+
@client.should_receive(:set_users).with(params).once
|
113
|
+
Foscam::Model::User.client = @client
|
114
|
+
flag = Foscam::Model::User.delete(1)
|
115
|
+
flag.should be_true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
context "with invalid id" do
|
119
|
+
it "deletes the desired user" do
|
120
|
+
@client.should_not_receive(:set_users)
|
121
|
+
Foscam::Model::User.client = @client
|
122
|
+
flag = Foscam::Model::User.delete(10)
|
123
|
+
flag.should be_false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "#save" do
|
129
|
+
context "a new user" do
|
130
|
+
before(:each) do
|
131
|
+
@user = Foscam::Model::User.new(valid_params)
|
132
|
+
end
|
133
|
+
|
134
|
+
context "with valid params" do
|
135
|
+
before(:each) do
|
136
|
+
@user.stub(:is_valid?).and_return(true)
|
137
|
+
end
|
138
|
+
|
139
|
+
context "with less than the maximum number of users" do
|
140
|
+
before(:each) do
|
141
|
+
@client.stub(:get_params).and_return(one_user_response)
|
142
|
+
params = {:user2 => @user.username, :pwd2 => @user.password, :pri2 => :administrator}
|
143
|
+
@client.should_receive(:set_users).with(params).once
|
144
|
+
end
|
145
|
+
context "request is successful" do
|
146
|
+
before(:each) do
|
147
|
+
@client.stub(:set_users).and_return(true)
|
148
|
+
end
|
149
|
+
it "updates the user attributes that changed" do
|
150
|
+
Foscam::Model::User.client = @client
|
151
|
+
flag = @user.save
|
152
|
+
flag.should be_true
|
153
|
+
end
|
154
|
+
end
|
155
|
+
context "request is unsuccessful" do
|
156
|
+
before(:each) do
|
157
|
+
@client.stub(:set_users).and_return(false)
|
158
|
+
end
|
159
|
+
it "fails to update the user attributes" do
|
160
|
+
Foscam::Model::User.client = @client
|
161
|
+
flag = @user.save
|
162
|
+
flag.should be_false
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
context "with the maximum number of users" do
|
167
|
+
before(:each) do
|
168
|
+
@client.stub(:get_params).and_return(all_users_response)
|
169
|
+
end
|
170
|
+
it "skips creation since no spots are available for new users" do
|
171
|
+
@client.should_not_receive(:set_users)
|
172
|
+
Foscam::Model::User.client = @client
|
173
|
+
flag = @user.save
|
174
|
+
flag.should be_false
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
context "with invalid params" do
|
179
|
+
before(:each) do
|
180
|
+
@user.stub(:is_valid?).and_return(false)
|
181
|
+
end
|
182
|
+
it "skips updating since nothing changed" do
|
183
|
+
@client.should_not_receive(:set_users)
|
184
|
+
Foscam::Model::User.client = @client
|
185
|
+
flag = @user.save
|
186
|
+
flag.should be_false
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "an existing user" do
|
192
|
+
before(:each) do
|
193
|
+
@client.stub(:get_params).and_return(one_user_response)
|
194
|
+
@user = Foscam::Model::User.find(1)
|
195
|
+
end
|
196
|
+
context "with valid params" do
|
197
|
+
before(:each) do
|
198
|
+
@user.username = "foobar"
|
199
|
+
@user.password = "secret"
|
200
|
+
@user.stub(:is_valid?).and_return(true)
|
201
|
+
end
|
202
|
+
context "is dirty" do
|
203
|
+
before(:each) do
|
204
|
+
@user.stub(:changed?).and_return(true)
|
205
|
+
params = {:user1 => @user.username, :pwd1 => @user.password, :pri1 => :administrator}
|
206
|
+
@client.should_receive(:set_users).with(params).once
|
207
|
+
end
|
208
|
+
context "request is successful" do
|
209
|
+
before(:each) do
|
210
|
+
@client.stub(:set_users).and_return(true)
|
211
|
+
end
|
212
|
+
it "updates the user attributes that changed" do
|
213
|
+
Foscam::Model::User.client = @client
|
214
|
+
flag = @user.save
|
215
|
+
flag.should be_true
|
216
|
+
end
|
217
|
+
end
|
218
|
+
context "request is unsuccessful" do
|
219
|
+
before(:each) do
|
220
|
+
@client.stub(:set_users).and_return(false)
|
221
|
+
end
|
222
|
+
it "fails to update the user attributes" do
|
223
|
+
Foscam::Model::User.client = @client
|
224
|
+
flag = @user.save
|
225
|
+
flag.should be_false
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
context "is not dirty" do
|
230
|
+
before(:each) do
|
231
|
+
@user.stub(:changed?).and_return(false)
|
232
|
+
end
|
233
|
+
it "skips updating since nothing changed" do
|
234
|
+
@client.should_not_receive(:set_users)
|
235
|
+
Foscam::Model::User.client = @client
|
236
|
+
flag = @user.save
|
237
|
+
flag.should be_false
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
context "with invalid params" do
|
242
|
+
before(:each) do
|
243
|
+
@user.stub(:is_valid?).and_return(false)
|
244
|
+
end
|
245
|
+
it "skips updating since nothing changed" do
|
246
|
+
@client.should_not_receive(:set_users)
|
247
|
+
Foscam::Model::User.client = @client
|
248
|
+
flag = @user.save
|
249
|
+
flag.should be_false
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
describe "#==" do
|
256
|
+
before(:each) do
|
257
|
+
@user = Foscam::Model::User.new(valid_params)
|
258
|
+
end
|
259
|
+
it "returns true if the other is the same object" do
|
260
|
+
flag = @user == @user
|
261
|
+
flag.should be_true
|
262
|
+
end
|
263
|
+
|
264
|
+
it "returns false if it is not an instance of Foscam::Model::User" do
|
265
|
+
flag = @user == valid_params
|
266
|
+
flag.should be_false
|
267
|
+
end
|
268
|
+
|
269
|
+
it "returns false if it is an instance of Foscam::Model::User but the ids are different" do
|
270
|
+
user2 = Foscam::Model::User.new(valid_params)
|
271
|
+
@user.instance_variable_set(:@id, 1)
|
272
|
+
user2.instance_variable_set(:@id, 2)
|
273
|
+
flag = @user == user2
|
274
|
+
flag.should be_false
|
275
|
+
end
|
276
|
+
|
277
|
+
it "returns false if either or both ids is not set" do
|
278
|
+
user2 = Foscam::Model::User.new({:username => "user_1", :password => "pass_1", :privilege => :administrator})
|
279
|
+
flag = @user == user2
|
280
|
+
flag.should be_false
|
281
|
+
@user.instance_variable_set(:@id, 1)
|
282
|
+
flag = @user == user2
|
283
|
+
flag.should be_false
|
284
|
+
@user.instance_variable_set(:@id, nil)
|
285
|
+
user2.instance_variable_set(:@id, 1)
|
286
|
+
flag = @user == user2
|
287
|
+
flag.should be_false
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
describe "#destroy" do
|
292
|
+
context "on a new user" do
|
293
|
+
before(:each) do
|
294
|
+
@user = Foscam::Model::User.new(valid_params)
|
295
|
+
end
|
296
|
+
it "should set the user attributes to be blank" do
|
297
|
+
@client.should_not_receive(:set_users)
|
298
|
+
Foscam::Model::User.client = @client
|
299
|
+
flag = @user.destroy
|
300
|
+
flag.should be_false
|
301
|
+
@user.username.should == ""
|
302
|
+
@user.password.should == ""
|
303
|
+
@user.privilege.should == 0
|
304
|
+
end
|
305
|
+
end
|
306
|
+
context "an existing user" do
|
307
|
+
before(:each) do
|
308
|
+
@client.stub(:get_params).and_return(one_user_response)
|
309
|
+
@user = Foscam::Model::User.find(1)
|
310
|
+
end
|
311
|
+
it "should save the user with blank usernames, password and privileges" do
|
312
|
+
params = {:user1 => "", :pwd1 => "", :pri1 => 0}
|
313
|
+
@client.stub(:set_users).with(params).and_return(true)
|
314
|
+
@client.should_receive(:set_users).with(params).once
|
315
|
+
Foscam::Model::User.client = @client
|
316
|
+
flag = @user.destroy
|
317
|
+
flag.should be_true
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
end
|