summaryrefslogtreecommitdiff
path: root/spec/unit/knife/client_create_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/knife/client_create_spec.rb')
-rw-r--r--spec/unit/knife/client_create_spec.rb100
1 files changed, 57 insertions, 43 deletions
diff --git a/spec/unit/knife/client_create_spec.rb b/spec/unit/knife/client_create_spec.rb
index 59238d69ec..10d386b5ff 100644
--- a/spec/unit/knife/client_create_spec.rb
+++ b/spec/unit/knife/client_create_spec.rb
@@ -21,82 +21,96 @@ require 'spec_helper'
Chef::Knife::ClientCreate.load_deps
describe Chef::Knife::ClientCreate do
+ let(:stderr) { StringIO.new }
+
+ let(:default_client_hash) do
+ {
+ "name" => "adam",
+ "validator" => false,
+ "admin" => false
+ }
+ end
+
+ let(:client) do
+ c = double("Chef::ApiClient")
+ allow(c).to receive(:save).and_return({"private_key" => ""})
+ allow(c).to receive(:to_s).and_return("client[adam]")
+ c
+ end
+
+ let(:knife) do
+ k = Chef::Knife::ClientCreate.new
+ k.name_args = [ "adam" ]
+ k.ui.config[:disable_editing] = true
+ allow(k.ui).to receive(:stderr).and_return(stderr)
+ allow(k.ui).to receive(:stdout).and_return(stderr)
+ k
+ end
+
before(:each) do
Chef::Config[:node_name] = "webmonkey.example.com"
- @knife = Chef::Knife::ClientCreate.new
- @knife.config = {
- :file => nil,
- :admin => false,
- :validator => false
- }
- @knife.name_args = [ "adam" ]
- @client = Chef::ApiClient.new
- @client.stub(:save).and_return({ 'private_key' => '' })
- @knife.stub(:edit_data).and_return(@client)
- @knife.stub(:puts)
- Chef::ApiClient.stub(:new).and_return(@client)
- @stderr = StringIO.new
- @knife.ui.stub(:stderr).and_return(@stderr)
end
describe "run" do
- it "should create a new Client" do
- Chef::ApiClient.should_receive(:new).and_return(@client)
- @knife.run
- @stderr.string.should match /created client.+adam/i
+ it "should create and save the ApiClient" do
+ expect(Chef::ApiClient).to receive(:from_hash).and_return(client)
+ expect(client).to receive(:save)
+ knife.run
+ end
+
+ it "should print a message upon creation" do
+ expect(Chef::ApiClient).to receive(:from_hash).and_return(client)
+ expect(client).to receive(:save)
+ knife.run
+ expect(stderr.string).to match /Created client.*adam/i
end
it "should set the Client name" do
- @client.should_receive(:name).with("adam")
- @knife.run
+ expect(Chef::ApiClient).to receive(:from_hash).with(hash_including("name" => "adam")).and_return(client)
+ knife.run
end
it "by default it is not an admin" do
- @client.should_receive(:admin).with(false)
- @knife.run
+ expect(Chef::ApiClient).to receive(:from_hash).with(hash_including("admin" => false)).and_return(client)
+ knife.run
end
it "by default it is not a validator" do
- @client.should_receive(:validator).with(false)
- @knife.run
+ expect(Chef::ApiClient).to receive(:from_hash).with(hash_including("validator" => false)).and_return(client)
+ knife.run
end
it "should allow you to edit the data" do
- @knife.should_receive(:edit_data).with(@client)
- @knife.run
- end
-
- it "should save the Client" do
- @client.should_receive(:save)
- @knife.run
+ expect(knife).to receive(:edit_hash).with(default_client_hash).and_return(default_client_hash)
+ allow(Chef::ApiClient).to receive(:from_hash).and_return(client)
+ knife.run
end
describe "with -f or --file" do
it "should write the private key to a file" do
- @knife.config[:file] = "/tmp/monkeypants"
- @client.stub(:save).and_return({ 'private_key' => "woot" })
+ knife.config[:file] = "/tmp/monkeypants"
+ allow_any_instance_of(Chef::ApiClient).to receive(:save).and_return({ 'private_key' => "woot" })
filehandle = double("Filehandle")
- filehandle.should_receive(:print).with('woot')
- File.should_receive(:open).with("/tmp/monkeypants", "w").and_yield(filehandle)
- @knife.run
+ expect(filehandle).to receive(:print).with('woot')
+ expect(File).to receive(:open).with("/tmp/monkeypants", "w").and_yield(filehandle)
+ knife.run
end
end
describe "with -a or --admin" do
it "should create an admin client" do
- @knife.config[:admin] = true
- @client.should_receive(:admin).with(true)
- @knife.run
+ knife.config[:admin] = true
+ expect(Chef::ApiClient).to receive(:from_hash).with(hash_including("admin" => true)).and_return(client)
+ knife.run
end
end
describe "with --validator" do
it "should create an validator client" do
- @knife.config[:validator] = true
- @client.should_receive(:validator).with(true)
- @knife.run
+ knife.config[:validator] = true
+ expect(Chef::ApiClient).to receive(:from_hash).with(hash_including("validator" => true)).and_return(client)
+ knife.run
end
end
-
end
end