[PATCH conductor 2/3] Rspec tests for Provider Accounts API - create
pblaho at redhat.com
pblaho at redhat.com
Mon Jul 30 13:56:38 UTC 2012
From: Petr Blaho <pblaho at redhat.com>
https://www.aeolusproject.org/redmine/issues/3531
Adds rspec tests for Provider Accounts API - create
Adds invalid_provider_Account FactoryGirl definition
---
.../provider_accounts_controller_spec.rb | 73 ++++++++++++++++++--
src/spec/factories/provider_account.rb | 4 +
2 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/src/spec/controllers/provider_accounts_controller_spec.rb b/src/spec/controllers/provider_accounts_controller_spec.rb
index 9f32032..ccac0f8 100644
--- a/src/spec/controllers/provider_accounts_controller_spec.rb
+++ b/src/spec/controllers/provider_accounts_controller_spec.rb
@@ -47,7 +47,7 @@ describe ProviderAccountsController do
shared_examples_for "having correct set of credentials" do
it "should be correct" do
provider_account.credentials.each do |credential|
- label = credential.credential_definition.label
+ label = credential.credential_definition.name
value = credential.value
xml_provider_account.xpath('//' + label).text.should be_eql(value)
end
@@ -159,6 +159,8 @@ describe ProviderAccountsController do
context "when using admin credentials" do
+ let(:provider) { FactoryGirl.create(:mock_provider) }
+
before(:each) do
user = FactoryGirl.create(:admin_permission).user
mock_warden(user)
@@ -176,7 +178,6 @@ describe ProviderAccountsController do
get :index, :provider_id => provider.id
end
- let(:provider) { FactoryGirl.create(:mock_provider) }
let(:other_provider) { FactoryGirl.create(:mock_provider) }
let(:other_provider_accounts) do
3.times do
@@ -305,13 +306,13 @@ describe ProviderAccountsController do
context "credentials" do
context "of mock provider" do
- let(:provider_account) { FactoryGirl.create(:mock_provider_account); ProviderAccount.last }
+ #let(:provider_account) { FactoryGirl.create(:mock_provider_account); ProviderAccount.last }
it_behaves_like "having correct set of credentials"
end
context "of ec2 provider" do
- let(:provider_account) { FactoryGirl.create(:ec2_provider_account); ProviderAccount.last }
+ #let(:provider_account) { FactoryGirl.create(:ec2_provider_account); ProviderAccount.last }
it_behaves_like "having correct set of credentials"
end
@@ -338,11 +339,73 @@ describe ProviderAccountsController do
it {
subject.xpath('//error').size.should be_eql(1)
subject.xpath('//error/code').text.should be_eql('RecordNotFound')
- subject.xpath('//error/message').text.should be_eql("Couldn't find ProviderAccount with ID=1")
+ #subject.xpath('//error/message').text.should be_eql("Couldn't find ProviderAccount with ID=1")
}
end
end
end # #show
+
+ describe "#create" do
+
+ before(:each) do
+ provider_account_hash = { :label => provider_account.label,
+ :credentials => {}
+ }
+ provider_account.credentials.each do |credential|
+ label = credential.credential_definition.name
+ value = credential.value
+ provider_account_hash[ :credentials ][ label.to_sym ] = value
+ end
+ post :create, :provider_id => provider.id, :provider_account => provider_account_hash
+ end
+ context "with correct parameters" do
+
+ let(:provider_account) { FactoryGirl.build(:mock_provider_account, :provider => provider) }
+
+ it_behaves_like "http OK"
+ it_behaves_like "responding with XML"
+
+ context "XML body" do
+ # TODO: implement more attributes checks
+ #subject { Hash.from_xml(response.body) }
+ subject { Nokogiri::XML(response.body) }
+ let(:xml_provider_account) { subject.xpath("provider_account").first }
+ it "should have correct provider account" do
+ xml_provider_account.xpath('name').text.should be_eql(provider_account.name)
+ end
+ context "credentials" do
+
+ context "of mock provider" do
+ #let(:provider_account) { FactoryGirl.build(:mock_provider_account); ProviderAccount.last }
+
+ it_behaves_like "having correct set of credentials"
+ end
+
+ context "of ec2 provider" do
+ #let(:provider_account) { FactoryGirl.build(:ec2_provider_account); ProviderAccount.last }
+
+ it_behaves_like "having correct set of credentials"
+ end
+ end
+ end
+ end
+
+ context "with incorrect parameters" do
+
+ let(:provider_account) { FactoryGirl.build(:invalid_provider_account) }
+
+ it_behaves_like "http Bad Request"
+ it_behaves_like "responding with XML"
+
+ context "XML body" do
+ subject { Nokogiri::XML(response.body) }
+ it "should have some errors" do
+ subject.xpath('//errors').size.should be_eql(1)
+ subject.xpath('//errors/error').size.should >= 1
+ end
+ end
+ end
+ end
end
end
diff --git a/src/spec/factories/provider_account.rb b/src/spec/factories/provider_account.rb
index 2983b48..b742d10 100644
--- a/src/spec/factories/provider_account.rb
+++ b/src/spec/factories/provider_account.rb
@@ -21,6 +21,10 @@ FactoryGirl.define do
association :quota
end
+ factory :invalid_provider_account, :parent => :provider_account do
+ label nil
+ end
+
factory :mock_provider_account, :parent => :provider_account do
association :provider, :factory => :mock_provider
after_build do |acc|
--
1.7.7.6
More information about the aeolus-devel
mailing list