diff options
Diffstat (limited to 'spec/unit/knife/client_create_spec.rb')
-rw-r--r-- | spec/unit/knife/client_create_spec.rb | 100 |
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 |