[email protected] wrote:
> From: martyntaylor <[email protected]>
>
> ---
>  src/app/controllers/dashboard_controller.rb        |   15 +++++---
>  src/app/controllers/settings_controller.rb         |   38 
> ++++++++++++++++++++
>  src/app/controllers/users_controller.rb            |    4 --
>  src/app/services/registration_service.rb           |   23 ++++++------
>  src/db/migrate/20090803141507_create_pools.rb      |    5 +++
>  .../20100707000000_create_metadata_objects.rb      |   14 +++++++
>  src/features/authentication.feature                |   19 ----------
>  src/features/support/hooks.rb                      |   18 +++++++++-
>  src/spec/controllers/users_controller_spec.rb      |   25 +++++++++----
>  src/spec/factories/metadata_object.rb              |   14 +++++--
>  src/spec/models/registration_service_spec.rb       |   22 +++++++++++
>  11 files changed, 145 insertions(+), 52 deletions(-)
>   
ACK and pushed with a few changes to get it working:
1) rebased against later dashboard_controller changes
2) settings_controller.rb was missing the definition of 
SELF_SERVICE_DEFAULT_QUOTA and KEYS
3) self-service.haml was missing the necessary form for this UI to 
actually work. I hacked in a functional form, but it doesn't match the 
expected HTML at all, as it needs to look like 3121, the 'manage user 
treatments' page, with all the rest of the content as "static" or grayed 
out.
4) src/features/support/hooks.rb: was using @self_service_default_quota 
as the var name for all settings -- changed the variables to match the 
settings pulled

Scott
> diff --git a/src/app/controllers/dashboard_controller.rb 
> b/src/app/controllers/dashboard_controller.rb
> index 5a83efb..c5a842a 100644
> --- a/src/app/controllers/dashboard_controller.rb
> +++ b/src/app/controllers/dashboard_controller.rb
> @@ -67,11 +67,16 @@ class DashboardController < ApplicationController
>      # FIXME filter to just those that the user has access to
>      @cloud_accounts = CloudAccount.find(:all)
>  
> -    # FIXME remove general role based permission check, replace w/
> -    # more granular / per-permission-object permission checks on the
> -    # dashboard in the future (here and in dashboard views)
> -    @is_admin = @current_user.permissions.collect { |p| p.role }.
> -                              find { |r| r.name == "Administrator" }
> +
> +    # Now need to check any permissions are set since default permission and 
> pool
> +    # may not be set for the admin user
> +    if @current_user.permissions
> +      # FIXME remove general role based permission check, replace w/
> +      # more granular / per-permission-object permission checks on the
> +      # dashboard in the future (here and in dashboard views)
> +      @is_admin = @current_user.permissions.collect { |p| p.role }.
> +                                find { |r| r.name == "Administrator" }
> +    end
>  
>      @hide_getting_started = true
>      #...@hide_getting_started = 
> cookies["#...@current_user.login}_hide_getting_started"]
> diff --git a/src/app/controllers/settings_controller.rb 
> b/src/app/controllers/settings_controller.rb
> index 742e01e..20a8412 100644
> --- a/src/app/controllers/settings_controller.rb
> +++ b/src/app/controllers/settings_controller.rb
> @@ -35,4 +35,42 @@ class SettingsController < ApplicationController
>      @pools = Pool.list_for_user(@current_user, Privilege::POOL_VIEW)
>    end
>  
> + def self_service
> +   @providers = Provider.list_for_user(@current_user, 
> Privilege::PROVIDER_VIEW)
> +   @pools = Pool.list_for_user(@current_user, Privilege::POOL_VIEW)
> +   if !is_admin?
> +     raise PermissionError.new('You have insufficient privileges to perform 
> action.')
> +     return
> +   end
> +   @self_service_default_quota = 
> MetadataObject.lookup(SELF_SERVICE_DEFAULT_QUOTA)
> + end
> +
> + def update
> +   KEYS.each do |key|
> +     if params[key]
> +       if key == SELF_SERVICE_DEFAULT_QUOTA
> +         self_service_default_quota = MetadataObject.lookup(key)
> +         self_service_default_quota.update_attributes(params[key])
> +       elsif key == SELF_SERVICE_DEFAULT_POOL
> +         if Pool.exists?(params[key])
> +           MetadataObject.set(key, Pool.find(params[key]))
> +         end
> +       elsif key == SELF_SERVICE_DEFAULT_ROLE
> +         if Role.exists?(params[key])
> +           MetadataObject.set(key, Role.find(params[key]))
> +         end
> +       else
> +         MetadataObject.set(key, params[key])
> +       end
> +     end
> +   end
> +   flash[:notice] = "Settings Updated!"
> +   redirect_to :action => 'self_service'
> + end
> +
> + private
> + def is_admin?
> +   is_admin = @current_user.permissions.collect { |p| p.role }.find { |r| 
> r.name == "Administrator" }
> +   return is_admin == nil ? false : true
> + end
>  end
> diff --git a/src/app/controllers/users_controller.rb 
> b/src/app/controllers/users_controller.rb
> index 8488509..f61c6d2 100644
> --- a/src/app/controllers/users_controller.rb
> +++ b/src/app/controllers/users_controller.rb
> @@ -31,10 +31,6 @@ class UsersController < ApplicationController
>      require_privilege(Privilege::USER_MODIFY) unless current_user.nil?
>      @user = User.new(params[:user])
>  
> -    #TODO Set Quota Values to SelfService Settings Default Quota
> -    @user_quota = Quota.new
> -    @user.quota_id = @user_quota.id
> -
>      @registration = RegistrationService.new(@user)
>      if @registration.save
>        flash[:notice] = "User registered!"
> diff --git a/src/app/services/registration_service.rb 
> b/src/app/services/registration_service.rb
> index 140b92e..0baca83 100644
> --- a/src/app/services/registration_service.rb
> +++ b/src/app/services/registration_service.rb
> @@ -14,21 +14,22 @@ class RegistrationService
>      begin
>      User.transaction do
>        @user.save!
> -      @pool = Pool.create!({ :name => @user.login, :zone => Zone.default})
>  
> -      @quota = Quota.new
> -      @quota.save!
> +      allow_self_service_logins = 
> MetadataObject.lookup("allow_self_service_logins")
> +      self_service_default_pool = 
> MetadataObject.lookup("self_service_default_pool")
> +      self_service_default_role = 
> MetadataObject.lookup("self_service_default_role")
> +      self_service_default_quota = 
> MetadataObject.lookup("self_service_default_quota")
>  
> -      @pool.quota_id = @quota.id
> -      @pool.save!
> +      @user_quota = Quota.new(:maximum_running_instances => 
> self_service_default_quota.maximum_running_instances,
> +                              :maximum_total_instances => 
> self_service_default_quota.maximum_total_instances)
> +      @user_quota.save!
> +      @user.quota = @user_quota
> +      @user.save!
>  
> -      raise "Role 'Instance Creator and User' doesn't exist" unless
> -        role = Role.find_by_name("Instance Creator and User")
> +      Permission.create!({:user => @user, :role => 
> self_service_default_role, :permission_object => self_service_default_pool})
>  
> -      Permission.create!({:user => @user,
> -                          :role => role,
> -                          :permission_object => @pool})
> -    end
> +      return true
> +     end
>      rescue
>        Rails.logger.error $!.message
>        Rails.logger.error $!.backtrace.join("\n  ")
> diff --git a/src/db/migrate/20090803141507_create_pools.rb 
> b/src/db/migrate/20090803141507_create_pools.rb
> index e0c1dc7..58e3c3d 100644
> --- a/src/db/migrate/20090803141507_create_pools.rb
> +++ b/src/db/migrate/20090803141507_create_pools.rb
> @@ -30,6 +30,11 @@ class CreatePools < ActiveRecord::Migration
>        t.timestamps
>      end
>  
> +    quota = Quota.new
> +    quota.save!
> +
> +    default_pool = Pool.new(:name => "default_pool", :quota => quota, :zone 
> => Zone.first)
> +    default_pool.save!
>    end
>  
>    def self.down
> diff --git a/src/db/migrate/20100707000000_create_metadata_objects.rb 
> b/src/db/migrate/20100707000000_create_metadata_objects.rb
> index 2f3eeb5..16dfbfa 100644
> --- a/src/db/migrate/20100707000000_create_metadata_objects.rb
> +++ b/src/db/migrate/20100707000000_create_metadata_objects.rb
> @@ -31,6 +31,20 @@ class CreateMetadataObjects < ActiveRecord::Migration
>  
>      default_zone = Zone.first
>      MetadataObject.set("default_zone", default_zone) if default_zone
> +
> +    default_pool = Pool.find_by_name("default_pool")
> +
> +    default_quota = Quota.new
> +    default_quota.save!
> +
> +    default_role = Role.find_by_name("Instance Creator and User")
> +    settings = {"allow_self_service_logins" => "true",
> +                "self_service_default_quota" => default_quota,
> +                "self_service_default_pool" => default_pool,
> +                "self_service_default_role" => default_role}
> +    settings.each_pair do |key, value|
> +      MetadataObject.set(key, value)
> +    end
>    end
>  
>    def self.down
> diff --git a/src/features/authentication.feature 
> b/src/features/authentication.feature
> index e160dfb..8525311 100644
> --- a/src/features/authentication.feature
> +++ b/src/features/authentication.feature
> @@ -19,25 +19,6 @@ Feature: User authentication
>      And I press "Create Account"
>      Then I should be on testuser's user page
>      And I should see "User registered!"
> -    And I should have one private pool named "testuser"
> -
> -  @register
> -  Scenario: Register as new user fails even if user is valid
> -    Given I am on the homepage
> -    And there are not any roles
> -    When I follow "Create one now"
> -    Then I should be on the new account page
> -    And I should see "New Account"
> -    When I fill in the following:
> -      | Choose a username | testuser             |
> -      | Choose a password | secret               |
> -      | Confirm password  | secret               |
> -      | First name        | Joe                  |
> -      | Last name         | Tester               |
> -      | Email             | [email protected] |
> -    And I press "Create Account"
> -    Then I should see "New Account"
> -    And I should see "user registration failed"
>  
>    Scenario: Log in as registered user
>      Given I am a registered user
> diff --git a/src/features/support/hooks.rb b/src/features/support/hooks.rb
> index 356cf0d..49842fc 100644
> --- a/src/features/support/hooks.rb
> +++ b/src/features/support/hooks.rb
> @@ -1,3 +1,19 @@
>  Before do
>    @default_zone_metadata = Factory.create(:default_zone_metadata)
> -end
> +  @allow_self_service_logins = Factory(:metadata_object, :key => 
> "allow_self_service_logins", :value => "true")
> +
> +  @default_quota = Factory(:unlimited_quota)
> +  @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_quota",
> +                                                          :value => 
> @default_quota,
> +                                                          :object_type => 
> "Quota")
> +
> +  @default_pool = Factory(:pool, :name => "default_pool")
> +  @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_pool",
> +                                                        :value => 
> @default_pool,
> +                                                        :object_type => 
> "Pool")
> +
> +  @default_role = Role.find(:first, :conditions => ['name = ?', 'Instance 
> Creator and User'])
> +  @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_role",
> +                                                        :value => 
> @default_role,
> +                                                        :object_type => 
> "Role")
> +end
> \ No newline at end of file
> diff --git a/src/spec/controllers/users_controller_spec.rb 
> b/src/spec/controllers/users_controller_spec.rb
> index 5add3c7..debc675 100644
> --- a/src/spec/controllers/users_controller_spec.rb
> +++ b/src/spec/controllers/users_controller_spec.rb
> @@ -7,6 +7,23 @@ describe UsersController do
>      @admin_permission = Factory :admin_permission
>      @admin = @admin_permission.user
>      activate_authlogic
> +
> +    @allow_self_service_logins = Factory(:metadata_object, :key => 
> "allow_self_service_logins", :value => "true")
> +
> +    @default_quota = Factory(:unlimited_quota)
> +    @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_quota",
> +                                                            :value => 
> @default_quota,
> +                                                            :object_type => 
> "Quota")
> +
> +    @default_pool = Factory(:pool, :name => "default_pool")
> +    @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_pool",
> +                                                          :value => 
> @default_pool,
> +                                                          :object_type => 
> "Pool")
> +
> +    @default_role = Role.find(:first, :conditions => ['name = ?', 'Instance 
> Creator and User'])
> +    @self_service_default_quota = Factory(:metadata_object, :key => 
> "self_service_default_role",
> +                                                          :value => 
> @default_role,
> +                                                          :object_type => 
> "Role")
>    end
>  
>    it "should call new method" do
> @@ -29,14 +46,6 @@ describe UsersController do
>                                     :password => "testpass",
>                                     :password_confirmation => "testpass" }
>          }.should change{ User.count }
> -        p = Pool.find_by_name("tuser2")
> -        p.should_not be_nil
> -
> -        p.name.should == "tuser2"
> -        p.permissions.size.should == 1
> -        p.permissions.any? {
> -          |perm| perm.role.name.eql?('Instance Creator and User')
> -        }.should be_true
>          user = User.find(:first, :conditions => ['login = ?', "tuser2"])
>          response.should redirect_to(user_url(user))
>        end
> diff --git a/src/spec/factories/metadata_object.rb 
> b/src/spec/factories/metadata_object.rb
> index 04e8404..5dcf989 100644
> --- a/src/spec/factories/metadata_object.rb
> +++ b/src/spec/factories/metadata_object.rb
> @@ -1,5 +1,11 @@
> -Factory.define :default_zone_metadata, :class => MetadataObject  do |o|
> -  o.key 'default_zone'
> -  o.value {Factory.create(:zone).id}
> -  o.object_type 'Zone'
> +Factory.define :metadata_object do |o|
> +  o.key 'key'
> +  o.value 'value'
> +  o.object_type nil
>  end
> +
> +Factory.define :default_zone_metadata, :parent => :metadata_object do |o|
> +   o.key 'default_zone'
> +   o.value Factory.create(:zone).id
> +   o.object_type 'Zone'
> +end
> \ No newline at end of file
> diff --git a/src/spec/models/registration_service_spec.rb 
> b/src/spec/models/registration_service_spec.rb
> index 40f16f2..2a97d11 100644
> --- a/src/spec/models/registration_service_spec.rb
> +++ b/src/spec/models/registration_service_spec.rb
> @@ -39,4 +39,26 @@ describe RegistrationService do
>        end
>      end
>    end
> +
> +  it "should register a user with default pool/quota/role when default 
> settings set" do
> +    @user = Factory :user
> +    @pool = Factory(:pool, :name => "default_pool")
> +    @role = Role.find_by_name("Instance Creator and User")
> +    @quota = Factory :quota
> +
> +    MetadataObject.set("allow_self_service_logins", "true")
> +    MetadataObject.set("self_service_default_pool", @pool)
> +    MetadataObject.set("self_service_default_role", @role)
> +    MetadataObject.set("self_service_default_quota", @quota)
> +
> +    @registration_service = RegistrationService.new(@user)
> +    @registration_service.save
> +
> +    @pools = Pool.list_for_user(@user, Privilege::INSTANCE_VIEW)
> +    @pools.size.should == 1
> +    @pools[0].name.should == "default_pool"
> +
> +    @user.quota.maximum_running_instances.should == 
> @quota.maximum_running_instances
> +    @user.quota.maximum_total_instances.should == 
> @quota.maximum_total_instances
> +  end
>  end
>   

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to