Skip to content

Commit edfa9ae

Browse files
committed
fix spec style to use fewer mocks and nested describes
1 parent 1a7e375 commit edfa9ae

1 file changed

Lines changed: 122 additions & 159 deletions

File tree

chef/spec/unit/provider/user/windows_spec.rb

Lines changed: 122 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -27,187 +27,150 @@ class NetUser
2727
end
2828
end
2929

30-
describe Chef::Provider::User::Windows, "set_options" do
30+
describe Chef::Provider::User::Windows do
3131
before(:each) do
32-
@node = mock("Chef::Node", :null_object => true)
33-
@new_resource = mock("Chef::Resource::User",
34-
:null_object => true,
35-
:username => "adam",
36-
:comment => "Adam Jacob",
37-
:uid => 1000,
38-
:gid => 1000,
39-
:home => "/home/adam",
40-
:shell => "/usr/bin/zsh",
41-
:password => "abracadabra",
42-
:updated => nil
43-
)
44-
@current_resource = mock("Chef::Resource::User",
45-
:null_object => true,
46-
:username => "adam",
47-
:comment => "Adam Jacob",
48-
:uid => 1000,
49-
:gid => 1000,
50-
:home => "/home/adam",
51-
:shell => "/usr/bin/zsh",
52-
:password => "abracadabra",
53-
:updated => nil
54-
)
55-
@net_user = mock("Chef::Util::Windows::NetUser",
56-
:null_object => true
57-
)
32+
@node = Chef::Node.new
33+
@new_resource = Chef::Resource::User.new("monkey")
34+
@current_resource = Chef::Resource::User.new("monkey")
35+
36+
@net_user = mock("Chef::Util::Windows::NetUser")
5837
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
38+
5939
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
6040
@provider.current_resource = @current_resource
6141
end
6242

63-
field_list = {
64-
'comment' => 'full_name',
65-
'home' => 'home_dir',
66-
'gid' => 'primary_group_id',
67-
'uid' => 'user_id',
68-
'shell' => 'script_path',
69-
'password' => 'password'
70-
}
71-
field_list.each do |attribute, option|
72-
it "should check for differences in #{attribute} between the new and current resources" do
73-
@current_resource.should_receive(attribute)
74-
@new_resource.should_receive(attribute)
75-
@provider.set_options
43+
describe "when comparing the user's current attributes to the desired attributes" do
44+
before do
45+
@new_resource.comment "Adam Jacob"
46+
@new_resource.uid 1000
47+
@new_resource.gid 1000
48+
@new_resource.home "/home/adam"
49+
@new_resource.shell "/usr/bin/zsh"
50+
@new_resource.password "abracadabra"
51+
52+
@provider.current_resource = @new_resource.clone
7653
end
77-
78-
it "should set the option for #{attribute} if the new resources #{attribute} is not null" do
79-
@new_resource.stub!(attribute).and_return("hola")
80-
@provider.set_options.should eql({:name, @new_resource.username, option.to_sym, @new_resource.send(attribute)})
54+
describe "and the attributes match" do
55+
it "doesn't set the comment field to be updated" do
56+
@provider.set_options.should_not have_key(:full_name)
57+
end
58+
59+
it "doesn't set the home directory to be updated" do
60+
@provider.set_options.should_not have_key(:home_dir)
61+
end
62+
63+
it "doesn't set the group id to be updated" do
64+
@provider.set_options.should_not have_key(:primary_group_id)
65+
end
66+
67+
it "doesn't set the user id to be updated" do
68+
@provider.set_options.should_not have_key(:user_id)
69+
end
70+
71+
it "doesn't set the shell to be updated" do
72+
@provider.set_options.should_not have_key(:script_path)
73+
end
74+
75+
it "doesn't set the password to be updated" do
76+
@provider.set_options.should_not have_key(:password)
77+
end
78+
8179
end
82-
end
83-
end
80+
81+
describe "and the attributes do not match" do
82+
before do
83+
@current_resource = Chef::Resource::User.new("adam")
84+
@current_resource.comment "Adam Jacob-foo"
85+
@current_resource.uid 1111
86+
@current_resource.gid 1111
87+
@current_resource.home "/home/adam-foo"
88+
@current_resource.shell "/usr/bin/tcsh"
89+
@current_resource.password "foobarbaz"
90+
@provider.current_resource = @current_resource
91+
end
8492

85-
describe Chef::Provider::User::Windows, "create_user" do
86-
before(:each) do
87-
@node = mock("Chef::Node", :null_object => true)
88-
@new_resource = mock("Chef::Resource::User", :null_object => true)
89-
@net_user = mock("Chef::Util::Windows::NetUser",
90-
:null_object => true
91-
)
92-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
93-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
94-
@provider.stub!(:set_options).and_return({:name, "monkey"})
95-
@net_user.stub!(:add)
96-
end
93+
it "marks the full_name field to be updated" do
94+
@provider.set_options[:full_name].should == "Adam Jacob"
95+
end
9796

98-
it "should call @net_user.add with the return of set_options" do
99-
@net_user.should_receive(:add).with({:name, "monkey"})
100-
@provider.create_user
101-
end
102-
end
97+
it "marks the home_dir attribute to be updated" do
98+
@provider.set_options[:home_dir].should == '/home/adam'
99+
end
103100

104-
describe Chef::Provider::User::Windows, "manage_user" do
105-
before(:each) do
106-
@node = mock("Chef::Node", :null_object => true)
107-
@new_resource = mock("Chef::Resource::User", :null_object => true)
108-
@net_user = mock("Chef::Util::Windows::NetUser",
109-
:null_object => true
110-
)
111-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
112-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
113-
@provider.stub!(:set_options).and_return({:name, "monkey"})
114-
@net_user.stub!(:update)
115-
end
116-
117-
it "should call @net_user.update with the return of set_options" do
118-
@net_user.should_receive(:update).with({:name, "monkey"})
119-
@provider.manage_user
101+
it "marks the primary_group_id attribute to be updated" do
102+
@provider.set_options[:primary_group_id].should == 1000
103+
end
104+
105+
it "marks the user_id attribute to be updated" do
106+
@provider.set_options[:user_id].should == 1000
107+
end
108+
109+
it "marks the script_path attribute to be updated" do
110+
@provider.set_options[:script_path].should == '/usr/bin/zsh'
111+
end
112+
113+
it "marks the password attribute to be updated" do
114+
@provider.set_options[:password].should == 'abracadabra'
115+
end
116+
end
120117
end
121-
end
122118

123-
describe Chef::Provider::User::Windows, "remove_user" do
124-
before(:each) do
125-
@node = mock("Chef::Node", :null_object => true)
126-
@new_resource = mock("Chef::Resource::User",
127-
:null_object => true,
128-
:username => "adam"
129-
)
130-
@net_user = mock("Chef::Util::Windows::NetUser",
131-
:null_object => true
132-
)
133-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
134-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
135-
@net_user.stub!(:delete)
119+
describe "when creating the user" do
120+
it "should call @net_user.add with the return of set_options" do
121+
@provider.stub!(:set_options).and_return(:name=> "monkey")
122+
@net_user.should_receive(:add).with(:name=> "monkey")
123+
@provider.create_user
124+
end
136125
end
126+
127+
describe "manage_user" do
128+
before(:each) do
129+
@provider.stub!(:set_options).and_return(:name=> "monkey")
130+
end
137131

138-
it "should call @net_user.delete" do
139-
@net_user.should_receive(:delete)
140-
@provider.remove_user
132+
it "should call @net_user.update with the return of set_options" do
133+
@net_user.should_receive(:update).with(:name=> "monkey")
134+
@provider.manage_user
135+
end
141136
end
142-
end
143137

144-
describe Chef::Provider::User::Windows, "check_lock" do
145-
before(:each) do
146-
@node = mock("Chef::Node", :null_object => true)
147-
@new_resource = mock("Chef::Resource::User", :null_object => true)
148-
@current_resource = mock("Chef::Resource::User",
149-
:null_object => true,
150-
:password => "abracadabra"
151-
)
152-
@net_user = mock("Chef::Util::Windows::NetUser",
153-
:null_object => true
154-
)
155-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
156-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
157-
@provider.current_resource = @current_resource
138+
describe "when removing the user" do
139+
it "should call @net_user.delete" do
140+
@net_user.should_receive(:delete)
141+
@provider.remove_user
142+
end
158143
end
159144

160-
it "should return true if user is locked" do
161-
@net_user.stub!(:check_enabled).and_return(true)
162-
@provider.check_lock.should eql(true)
163-
end
145+
describe "when checking if the user is locked" do
146+
before(:each) do
147+
@current_resource.password "abracadabra"
148+
end
164149

165-
it "should return false if user is not locked" do
166-
@net_user.stub!(:check_enabled).and_return(false)
167-
@provider.check_lock.should eql(false)
168-
end
169-
end
150+
it "should return true if user is locked" do
151+
@net_user.stub!(:check_enabled).and_return(true)
152+
@provider.check_lock.should eql(true)
153+
end
170154

171-
describe Chef::Provider::User::Windows, "lock_user" do
172-
before(:each) do
173-
@node = mock("Chef::Node", :null_object => true)
174-
@new_resource = mock("Chef::Resource::User",
175-
:null_object => true,
176-
:username => "adam"
177-
)
178-
@net_user = mock("Chef::Util::Windows::NetUser",
179-
:null_object => true
180-
)
181-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
182-
@net_user.stub!(:check_enabled).and_return(true)
183-
@net_user.stub!(:disable_account)
184-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
185-
end
186-
187-
it "should call @net_user.disable_account" do
188-
@net_user.should_receive(:disable_account)
189-
@provider.lock_user
155+
it "should return false if user is not locked" do
156+
@net_user.stub!(:check_enabled).and_return(false)
157+
@provider.check_lock.should eql(false)
158+
end
190159
end
191-
end
192160

193-
describe Chef::Provider::User::Windows, "unlock_user" do
194-
before(:each) do
195-
@node = mock("Chef::Node", :null_object => true)
196-
@new_resource = mock("Chef::Resource::User",
197-
:null_object => true,
198-
:username => "adam"
199-
)
200-
@net_user = mock("Chef::Util::Windows::NetUser",
201-
:null_object => true
202-
)
203-
Chef::Util::Windows::NetUser.stub!(:new).and_return(@net_user)
204-
@net_user.stub!(:check_enabled).and_return(false)
205-
@net_user.stub!(:enable_account)
206-
@provider = Chef::Provider::User::Windows.new(@node, @new_resource)
161+
describe "locking the user" do
162+
it "should call @net_user.disable_account" do
163+
@net_user.stub!(:check_enabled).and_return(true)
164+
@net_user.should_receive(:disable_account)
165+
@provider.lock_user
166+
end
207167
end
208-
209-
it "should call @net_user.enable_account" do
210-
@net_user.should_receive(:enable_account)
211-
@provider.unlock_user
168+
169+
describe "unlocking the user" do
170+
it "should call @net_user.enable_account" do
171+
@net_user.stub!(:check_enabled).and_return(false)
172+
@net_user.should_receive(:enable_account)
173+
@provider.unlock_user
174+
end
212175
end
213-
end
176+
end

0 commit comments

Comments
 (0)