From: mtaylor <[email protected]>
---
src/features/provider.feature | 139 +++++++++++++++++++++++
src/features/step_definitions/provider_steps.rb | 54 +++++++++
src/features/support/env.rb | 14 ++-
src/features/support/paths.rb | 34 +++++-
4 files changed, 234 insertions(+), 7 deletions(-)
create mode 100644 src/features/provider.feature
create mode 100644 src/features/step_definitions/provider_steps.rb
diff --git a/src/features/provider.feature b/src/features/provider.feature
new file mode 100644
index 0000000..1f468a1
--- /dev/null
+++ b/src/features/provider.feature
@@ -0,0 +1,139 @@
+Feature: Manage Providers
+ In order to manage my cloud infrastructure
+ As a user
+ I want to manage my cloud providers
+
+ Scenario: Create a new Provider
+ Given I am on the homepage
+ And I am an authorised user
+ And I am logged in
+ And there is not a provider named "mockProvider"
+ When I follow "Add a provider"
+ Then I should be on the new provider page
+ And I should see "Add a cloud provider"
+ When I fill in the following:
+ | provider_name | mockProvider
|
+ | provider_cloud_type | mock
|
+ | provider_url | http://mockprovider:3001/api |
+ And I press "Save"
+ Then I should see "Provider added"
+ And I should see "mockProvider"
+ And there should exist a provider named "mockProvider"
+
+ Scenario: Add a pool to a Provider
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And there is not a portal pool named "mockPool"
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "Add a pool"
+ Then I should be on the new portal pool page
+ When I fill in "portal_pool_name" with "mockPool"
+ And I press "Save"
+ Then I should be on the show portal pool page
+ And I should see "Pool added"
+ And I should have a portal pool named "mockPool"
+
+ Scenario: View a Provider's Realms
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And the provider has the following Realms named "Europe, United States"
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "Realms"
+ Then I should be on the provider's realms page
+ Then I should see "Europe"
+ And I should see "United States"
+
+ Scenario: Add a Cloud Account to a Provider
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And the provider has no cloud accounts
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "Accounts"
+ Then I should be on the provider's cloud accounts page
+ And I should see "There are no accounts to display"
+ When I follow "Add an Account"
+ When I fill in the following:
+ | account_username | mockuser |
+ | account_password | secret |
+ And I press "Save"
+ Then I should be on the provider's cloud accounts page
+ Then I should see "Username"
+ And I should see "mockuser"
+ And the provider should have 1 cloud account
+
+ Scenario: View Provider's Cloud Accounts
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And the provider has cloud accounts with usernames: "mockuser1,
mockuser2, mockuser3"
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "Accounts"
+ Then I should be on the provider's cloud accounts page
+ And I should see "mockuser1"
+ And I should see "mockuser2"
+ And I should see "mockuser3"
+
+ Scenario: Add permissions to the Provider
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And there is a user with login "mockuser1"
+ And there are no permissions defined on the provider
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "provider_permissions"
+ Then I should be on the provider's permissions page
+ And I should see "There are no permissions defined on mockProvider"
+ When I follow "Add a new permission record"
+ Then I should see "Add new Permission"
+ When I select "mockuser1" from "permission_user_id"
+ And I select "Provider Administrator" from "permission_role_id"
+ And I press "Save"
+ Then I should see "Permission record added"
+ And I should see "mockuser1"
+ And I should see "Provider Administrator"
+ And the provider should have 1 permission defined
+
+ Scenario: View Permissions on the Provider
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And there exists users with the following permissions on the provider
+ | login | permission |
+ | mockuser1 | Provider Administrator |
+ | mockuser2 | Pool Administrator |
+ | mockuser3 | Pool Creator |
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "provider_permissions"
+ Then I should be on the provider's permissions page
+ And I should see "mockuser1"
+ And I should see "Provider Administrator"
+ And I should see "mockuser2"
+ And I should see "Pool Administrator"
+ And I should see "mockuser3"
+ And I should see "Pool Creator"
+
+ Scenario: Delete a provider
+ Given I am an authorised user
+ And I am logged in
+ And there is a provider named "mockProvider"
+ And I am on the homepage
+ When I follow "mockProvider"
+ Then I should be on the show provider page
+ When I follow "Delete Provider"
+ Then I should not see "mockProvider"
+
\ No newline at end of file
diff --git a/src/features/step_definitions/provider_steps.rb
b/src/features/step_definitions/provider_steps.rb
new file mode 100644
index 0000000..a03e987
--- /dev/null
+++ b/src/features/step_definitions/provider_steps.rb
@@ -0,0 +1,54 @@
+Given /^there is not a provider named "([^\"]*)"$/ do |name|
+ Provider.find_by_name(name).should be_nil
+end
+
+Then /^there should exist a provider named "([^\"]*)"$/ do |name|
+ Provider.find_by_name(name).should_not be_nil
+end
+
+Given /^there is a provider named "([^\"]*)"$/ do |name|
+ @provider = Factory(:provider, :name => name)
+ @provider.permissions << @admin_permission
+end
+
+Given /^the provider has the following Realms named "([^\"]*)"$/ do |names|
+ names.split(", ").each do |name|
+ @provider.realms << Factory(:realm, :name => name, :provider => @provider)
+ end
+end
+
+Given /^the provider has no cloud accounts$/ do
+ @provider.cloud_accounts.size.should == 0
+end
+
+Then /^the provider should have 1 cloud account$/ do
+ @provider = Provider.find_by_id(@provider.id)
+ @provider.cloud_accounts.size.should == 1
+end
+
+Given /^the provider has cloud accounts with usernames: "([^\"]*)"$/ do
|usernames|
+ usernames.split(", ").each do |username|
+ @provider.cloud_accounts << Factory(:cloud_account, :username => username,
:provider => @provider)
+ end
+end
+
+Given /^there is a user with login "([^\"]*)"$/ do |login|
+ Factory(:user, :login => login)
+end
+
+Given /^there are no permissions defined on the provider$/ do
+ @provider.permissions.size.should == 0
+end
+
+Then /^the provider should have 1 permission defined$/ do
+ @provider = Provider.find_by_id(@provider.id)
+ @provider.permissions.size.should == 1
+end
+
+Given /^there exists users with the following permissions on the provider$/ do
|table|
+ table.hashes.each do |hash|
+ user = Factory(:user, :login => hash["login"])
+ role = Role.find_by_name(hash["permission"])
+ Factory(:admin_permission, :user => user, :role => role,
:permission_object => @provider)
+ end
+end
\ No newline at end of file
diff --git a/src/features/support/env.rb b/src/features/support/env.rb
index 2d6e9a1..e7c121a 100644
--- a/src/features/support/env.rb
+++ b/src/features/support/env.rb
@@ -27,7 +27,19 @@ Provider.class_eval do
if !nil_or_empty(url)
# errors.add("url", "must be a valid provider url") unless
valid_framework?
end
- end
+ end
+end
+
+ProviderController.class_eval do
+ alias_method :original_new, :new
+ def new
+ require_privilege(Privilege::PROVIDER_MODIFY)
+ @provider = Provider.new(params[:provider])
+ if request.post? && @provider.save # &&
@provider.populate_hardware_profiles
+ flash[:notice] = "Provider added."
+ redirect_to :action => "show", :id => @provider
+ end
+ end
end
# If you set this to false, any error raised from within your app will bubble
diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb
index 5fc4127..8d533e9 100644
--- a/src/features/support/paths.rb
+++ b/src/features/support/paths.rb
@@ -14,9 +14,6 @@ module NavigationHelpers
when /the new account page/
register_path
- when /the provider list page/
- '/'
-
when /the login page/
login_path
@@ -25,10 +22,12 @@ module NavigationHelpers
when /the login error page/
user_session_path
-
- when /the new provider page/
- new_provider_path
+
+ # Users Paths
+ when /the show user page/
+ user_path
+ # Portal Pool Paths
when /the new portal pool page/
new_portal_pool_path
@@ -40,6 +39,29 @@ module NavigationHelpers
when /the portal pool hardware profiles page/
hardware_profiles_portal_pool_path
+
+ # Provider Paths
+ when /the provider list page/
+ '/'
+
+ when /the new provider page/
+ new_provider_path
+
+ when /the show provider page/
+ polymorphic_path(@provider)
+
+ when /the provider's cloud accounts page/
+ polymorphic_path(@provider, :action => 'accounts')
+
+ when /the provider's realms page/
+ polymorphic_path(@provider, :action => 'realms')
+
+ when /the provider's permissions page/
+ polymorphic_path(Permission.new, :action => 'list', :provider_id =>
@provider.id )
+
+ when /the new provider permission page/
+ polymorphic_path(Permission.new, :action => 'new', :permission_object_id
=> @provider.id, :permission_object_type => 'Provider')
+
# Add more mappings here.
# Here is an example that pulls values out of the Regexp:
#
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel