From: Tomas Sedovic tsedovic@redhat.com
--- src/spec/factories/cloud_account.rb | 9 ++++ src/spec/models/cloud_account_spec.rb | 76 +++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 0 deletions(-) create mode 100644 src/spec/factories/cloud_account.rb create mode 100644 src/spec/models/cloud_account_spec.rb
diff --git a/src/spec/factories/cloud_account.rb b/src/spec/factories/cloud_account.rb new file mode 100644 index 0000000..39d40c6 --- /dev/null +++ b/src/spec/factories/cloud_account.rb @@ -0,0 +1,9 @@ +Factory.define :cloud_account do |ca| + ca.sequence(:username) { |n| "user#{n}" } + ca.password 'asdf' + ca.provider_id 1 +end + +Factory.define :mock_cloud_account, :parent => :cloud_account do |ca| + ca.username 'John Doe' +end diff --git a/src/spec/models/cloud_account_spec.rb b/src/spec/models/cloud_account_spec.rb new file mode 100644 index 0000000..cc205d3 --- /dev/null +++ b/src/spec/models/cloud_account_spec.rb @@ -0,0 +1,76 @@ +require 'spec_helper' + +describe CloudAccount do + + before(:each) do + @cloud_account = Factory.build :mock_cloud_account + @client = mock('DeltaCloud', :null_object => true) + @cloud_account.stub!(:connect).and_return(@client) + end + + it "should require a provider to be set" do + @cloud_account.provider_id = nil + @cloud_account.should_not be_valid + + @cloud_account.provider_id = 1 + @cloud_account.should be_valid + end + + it "should have a unique username" do + @cloud_account.save! + cloud_account2 = Factory.build :cloud_account + cloud_account2.username = @cloud_account.username + cloud_account2.should_not be_valid + + cloud_account2.username = 'unique username' + cloud_account2.should be_valid + end + + it "should require a password to be set" do + [nil, ''].each do |invalid_value| + @cloud_account.password = invalid_value + @cloud_account.should_not be_valid + end + + @cloud_account.password = "2CufFHQjoBL5fKDW9R" + @cloud_account.should be_valid + end + + it "should log connection errors" do + cloud_account = Factory.build :cloud_account + cloud_account.provider = Provider.new(:url => 'http://invalid.provider/url') + logger = mock('Logger', :null_object => true) + cloud_account.stub!(:logger).and_return(logger) + + logger.should_receive(:error).twice + cloud_account.connect.should be_nil + end + + it "should create new account if it doesn't exist yet" do + account = @cloud_account.attributes + CloudAccount.find_by_username_and_provider_id( + account["username"], account["provider_id"]).should be_nil + + + ca1 = CloudAccount.find_or_create(account) + ca1.should_not be_nil + + ca1.save! + + ca2 = CloudAccount.find_or_create(account) + ca2.should_not be_nil + ca2.should == ca1 + end + + it "should provide the correct name" do + @cloud_account.name.should eql('John Doe') + end + + it "should provide correct account prefix for realm" do + @cloud_account.provider = Provider.new(:name => "PerfectProvider(tm)") + @cloud_account.account_prefix_for_realm.should \ + eql("PerfectProvider(tm):John Doe") + end + + +end