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

Reply via email to