On Fri, May 14, 2010 at 10:36:28AM -0400, Scott Seago wrote:
> fixed image/HWP associations and some additional fixes to spec tests and 
> controllers/forms.
> 
> Signed-off-by: Scott Seago <[email protected]>
> ---
>  src/app/controllers/cloud_accounts_controller.rb   |   19 +++---
>  src/app/controllers/provider_controller.rb         |   13 ----
>  src/app/models/cloud_account.rb                    |   61 ++++++++++++++++
>  src/app/models/hardware_profile.rb                 |   30 +++-----
>  src/app/models/image.rb                            |   18 ++---
>  src/app/models/pool.rb                             |   73 ++-----------------
>  src/app/models/provider.rb                         |   12 +++
>  src/app/util/taskomatic.rb                         |    8 ++
>  src/app/views/cloud_accounts/_form.erb             |   13 ----
>  src/app/views/cloud_accounts/_form.html.erb        |    2 +-
>  src/app/views/cloud_accounts/new.html.erb          |   10 +--
>  .../views/cloud_accounts/new_from_pool.html.erb    |   11 ---
>  src/app/views/provider/accounts.html.erb           |    2 +-
>  src/app/views/provider/new_account.html.erb        |   11 ---
>  src/app/views/provider/show.html.erb               |   21 ------
>  .../20090804135630_create_hardware_profiles.rb     |    1 -
>  src/db/migrate/20090804140143_create_images.rb     |    1 -
>  src/features/pool.feature                          |   16 ----
>  .../controllers/cloud_accounts_controller_spec.rb  |   12 +++
>  src/spec/controllers/provider_controller_spec.rb   |   10 ---
>  src/spec/factories/image.rb                        |    3 +-
>  src/spec/models/hardware_profile_spec.rb           |   55 ++-------------
>  src/spec/models/image_spec.rb                      |   27 +-------
>  23 files changed, 144 insertions(+), 285 deletions(-)
>  delete mode 100644 src/app/views/cloud_accounts/_form.erb
>  delete mode 100644 src/app/views/cloud_accounts/new_from_pool.html.erb
>  delete mode 100644 src/app/views/provider/new_account.html.erb
> 
> diff --git a/src/app/controllers/cloud_accounts_controller.rb 
> b/src/app/controllers/cloud_accounts_controller.rb
> index ea0a34a..29be676 100644
> --- a/src/app/controllers/cloud_accounts_controller.rb
> +++ b/src/app/controllers/cloud_accounts_controller.rb
> @@ -23,20 +23,21 @@ class CloudAccountsController < ApplicationController
>    before_filter :require_user
>  
>    def new
> +    @provider = Provider.find(params[:provider_id])
>      @cloud_account = CloudAccount.new
> -    @providers = []
> -    all_providers = Provider.all
> -    all_providers.each {|provider|
> -      @providers << provider if 
> authorized?(Privilege::PROVIDER_VIEW,provider)
> -    }
> +    require_privilege(Privilege::ACCOUNT_MODIFY, @provider)
>    end
>  
>    def create
> -    @cloud_account = CloudAccount.new(params[:cloud_account])
> -    @provider = Provider.find(params[:provider][:id])
> +    @provider = Provider.find(params[:cloud_account][:provider_id])
>      require_privilege(Privilege::ACCOUNT_MODIFY,@provider)
> -    @cloud_account.provider = @provider
> -    @cloud_account.save!
> +    @cloud_account = CloudAccount.new(params[:cloud_account])
> +    if request.post? && @cloud_account.save && 
> @cloud_account.populate_realms_and_images
> +      flash[:notice] = "Provider account added."
> +      redirect_to :controller => "provider", :action => "accounts", :id => 
> @provider
> +    else
> +      render :action => "new"
> +    end
>    end
>  
>    def edit
> diff --git a/src/app/controllers/provider_controller.rb 
> b/src/app/controllers/provider_controller.rb
> index 23b5ba0..7a4cefc 100644
> --- a/src/app/controllers/provider_controller.rb
> +++ b/src/app/controllers/provider_controller.rb
> @@ -67,17 +67,4 @@ class ProviderController < ApplicationController
>      require_privilege(Privilege::PROVIDER_VIEW, @provider)
>    end
>  
> -  def new_account
> -     @provider = Provider.find(params[:id])
> -     require_privilege(Privilege::ACCOUNT_MODIFY, @provider)
> -  end
> -
> -  def create_account
> -     require_privilege(Privilege::ACCOUNT_MODIFY)
> -     @acct = CloudAccount.find_or_create(params[:cloud_account])
> -     @provider = Provider.find(params[:cloud_account][:provider_id])
> -     @provider.cloud_accounts << @acct
> -     redirect_to :action => 'accounts', :id => @provider.id
> -  end
> -
>  end
> diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
> index f3dc317..9b8458d 100644
> --- a/src/app/models/cloud_account.rb
> +++ b/src/app/models/cloud_account.rb
> @@ -63,7 +63,68 @@ class CloudAccount < ActiveRecord::Base
>      provider.name + Realm::AGGREGATOR_REALM_PROVIDER_DELIMITER + username
>    end
>  
> +  def pools
> +    pools = []
> +    instances.each do |instance|
> +      pools << instance.pool
> +    end
> +  end
> +
>    def name
>      username
>    end
> +
> +  # FIXME: for already-mapped accounts, update rather than add new
> +  def populate_realms_and_images
> +    client = connect
> +    realms = client.realms
> +    # FIXME: the "self" filtering has to go as soon as we have a decent 
> image selection UI
> +    if client.driver_name == "ec2"
> +      images = client.images(:owner_id=>:self)
> +    else
> +      images = client.images
> +    end
> +    # FIXME: this should probably be in the same transaction as 
> cloud_account.save
> +    self.transaction do
> +      realms.each do |realm|
> +        #ignore if it exists
> +        #FIXME: we need to handle keeping in sync forupdates as well as
> +        # account permissions
> +        unless Realm.find_by_external_key_and_provider_id(realm.id,
> +                                                          provider.id)
> +          ar_realm = Realm.new(:external_key => realm.id,
> +                               :name => realm.name ? realm.name : realm.id,
> +                               :provider_id => provider.id)
> +          ar_realm.save!
> +        end
> +      end
> +      images.each do |image|
> +        #ignore if it exists
> +        #FIXME: we need to handle keeping in sync for updates as well as
> +        # account permissions
> +        ar_image = Image.find_by_external_key_and_provider_id(image.id,
> +                                                              provider.id)
> +        unless ar_image
> +          ar_image = Image.new(:external_key => image.id,
> +                               :name => image.name ? image.name :
> +                               (image.description ? image.description :
> +                                image.id),
> +                               :architecture => image.architecture,
> +                               :provider_id => provider.id)
> +          ar_image.save!
> +          front_end_image = Image.new(:external_key =>
> +                                      provider.name +
> +                                      
> Realm::AGGREGATOR_REALM_ACCOUNT_DELIMITER +
> +                                      ar_image.external_key,
> +                                      :name => provider.name +
> +                                      
> Realm::AGGREGATOR_REALM_ACCOUNT_DELIMITER +
> +                                      ar_image.name,
> +                                      :architecture => ar_image.architecture)
> +          front_end_image.provider_images << ar_image
> +          front_end_image.save!
> +        end
> +      end
> +    end
> +  end
> +
>  end
> diff --git a/src/app/models/hardware_profile.rb 
> b/src/app/models/hardware_profile.rb
> index 8330388..d98c2f9 100644
> --- a/src/app/models/hardware_profile.rb
> +++ b/src/app/models/hardware_profile.rb
> @@ -24,7 +24,6 @@ class HardwareProfile < ActiveRecord::Base
>    has_many :provider_instances, :class_name => "Instance",
>             :foreign_key => "provider_hardware_profile_id"
>    belongs_to :provider
> -  belongs_to :pool
>  
>    has_and_belongs_to_many :aggregator_hardware_profiles,
>                            :class_name => "HardwareProfile",
> @@ -39,10 +38,10 @@ class HardwareProfile < ActiveRecord::Base
>                            :association_foreign_key => 
> "provider_hardware_profile_id"
>  
>    validates_presence_of :external_key
> -  validates_uniqueness_of :external_key, :scope => [:provider_id, :pool_id]
> +  validates_uniqueness_of :external_key, :scope => [:provider_id]
>  
>    validates_presence_of :name
> -  validates_uniqueness_of :name
> +  validates_uniqueness_of :name, :scope => [:provider_id]
>  
>    validates_presence_of :storage
>    validates_numericality_of :storage, :greater_than => 0
> @@ -51,28 +50,21 @@ class HardwareProfile < ActiveRecord::Base
>  
>    validates_presence_of :architecture, :if => :provider
>  
> +  def provider_hardware_profile?
> +    !provider.nil?
> +  end
> +
> +  # FIXME: what about custom instance profiles?
>    def validate
> -    if (provider.nil? and pool.nil?)
> +    if provider.nil?
>        if !aggregator_hardware_profiles.empty?
>          errors.add(:aggregator_hardware_profiles,
> -                   "Aggregator profiles are not allowed for custom Instance 
> profiles")
> -      end
> -      if !provider_hardware_profiles.empty?
> -        errors.add(:provider_hardware_profiles,
> -                   "Provider profiles are not allowed for custom Instance 
> profiles")
> +                   "Aggregator profiles only allowed for provider profiles")
>        end
> -    elsif (!provider.nil? and !pool.nil?)
> -      errors.add(:provider, "provider or pool must be blank")
> -      errors.add(:pool, "provider or pool must be blank")
> -    elsif provider.nil?
> +    else
>        if !provider_hardware_profiles.empty?
>          errors.add(:provider_hardware_profiles,
> -                   "Provider profiles only allowed for provider profiles")
> -      end
> -    elsif pool.nil?
> -      if !aggregator_hardware_profiles.empty?
> -        errors.add(:aggregator_hardware_profiles,
> -                   "Aggregator profiles only allowed for pool profiles")
> +                   "Provider profiles only allowed for aggregator profiles")
>        end
>      end
>    end
> diff --git a/src/app/models/image.rb b/src/app/models/image.rb
> index 6670149..86806a4 100644
> --- a/src/app/models/image.rb
> +++ b/src/app/models/image.rb
> @@ -22,7 +22,6 @@
>  class Image < ActiveRecord::Base
>    has_many :instances
>    belongs_to :provider
> -  belongs_to :pool
>  
>    has_and_belongs_to_many :aggregator_images,
>                            :class_name => "Image",
> @@ -37,26 +36,25 @@ class Image < ActiveRecord::Base
>                            :association_foreign_key => "provider_image_id"
>  
>    validates_presence_of :external_key
> -  validates_uniqueness_of :external_key, :scope => [:provider_id, :pool_id]
> +  validates_uniqueness_of :external_key, :scope => [:provider_id]
>  
>    validates_presence_of :name
>    validates_length_of :name, :maximum => 1024
>  
>    validates_presence_of :architecture, :if => :provider
>  
> +
> +  def provider_image?
> +    !provider.nil?
> +  end
> +
>    def validate
> -    if (provider.nil? and pool.nil?)
> -      errors.add(:provider, "provider or pool must be specified")
> -      errors.add(:pool, "provider or pool must be specified")
> -    elsif (!provider.nil? and !pool.nil?)
> -      errors.add(:provider, "provider or pool must be blank")
> -      errors.add(:pool, "provider or pool must be blank")
> -    elsif provider.nil?
> +    if provider.nil?
>        if !aggregator_images.empty?
>          errors.add(:aggregator_images,
>                     "Aggregator image only allowed for provider images")
>        end
> -    elsif pool.nil?
> +    else
>        if !provider_images.empty?
>          errors.add(:provider_images,
>                     "Provider images only allowed for aggregator images")
> diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
> index 5b89a6b..a8657ee 100644
> --- a/src/app/models/pool.rb
> +++ b/src/app/models/pool.rb
> @@ -48,6 +48,14 @@ class Pool < ActiveRecord::Base
>      end
>    end
>  
> +  def images
> +    Image.find(:all, :conditions => {:provider_id => nil})
> +  end
> +
> +  def hardware_profiles
> +    HardwareProfile.find(:all, :conditions => {:provider_id => nil})
> +  end
> +
>    #FIXME: do we still allow explicit cloud/account choice via realm 
> selection?
>    #FIXME: How is account list for realm defined without explicit 
> pool-account relationship?
>    def realms
> @@ -63,69 +71,4 @@ class Pool < ActiveRecord::Base
>      realm_list
>    end
>  
> -  # FIXME: for already-mapped accounts, update rather than add new
> -  # FIXME: this needs to be revised to handle the removal of the 
> account-pool association
> -  def populate_realms_and_images(accounts=CloudAccount.all)
> -    accounts.each do |cloud_account|
> -      client = cloud_account.connect
> -      realms = client.realms
> -      if client.driver_name == "ec2"
> -        images = client.images(:owner_id=>:self)
> -      else
> -        images = client.images
> -      end
> -      # FIXME: this should probably be in the same transaction as pool.save
> -      self.transaction do
> -        realms.each do |realm|
> -          #ignore if it exists
> -          #FIXME: we need to handle keeping in sync forupdates as well as
> -          # account permissions
> -          unless Realm.find_by_external_key_and_provider_id(realm.id,
> -                                                            
> cloud_account.provider.id)
> -            ar_realm = Realm.new(:external_key => realm.id,
> -                                 :name => realm.name ? realm.name : realm.id,
> -                                 :provider_id => cloud_account.provider.id)
> -            ar_realm.save!
> -          end
> -        end
> -        images.each do |image|
> -          #ignore if it exists
> -          #FIXME: we need to handle keeping in sync for updates as well as
> -          # account permissions
> -          ar_image = Image.find_by_external_key_and_provider_id(image.id,
> -                                                     
> cloud_account.provider.id)
> -          unless ar_image
> -            ar_image = Image.new(:external_key => image.id,
> -                                 :name => image.name ? image.name :
> -                                          (image.description ? 
> image.description :
> -                                                               image.id),
> -                                 :architecture => image.architecture,
> -                                 :provider_id => cloud_account.provider.id)
> -            ar_image.save!
> -          end
> -          front_end_image = Image.new(:external_key =>
> -                                         
> cloud_account.account_prefix_for_realm +
> -                                         
> Realm::AGGREGATOR_REALM_ACCOUNT_DELIMITER +
> -                                         ar_image.external_key,
> -                                  :name => ar_image.name,
> -                                  :architecture => ar_image.architecture,
> -                                  :pool_id => id)
> -          front_end_image.save!
> -        end
> -        cloud_account.provider.hardware_profiles.each do |hardware_profile|
> -          front_hardware_profile = HardwareProfile.new(:external_key =>
> -                                         
> cloud_account.account_prefix_for_realm +
> -                                                       
> hardware_profile.external_key,
> -                               :name => hardware_profile.name,
> -                               :memory => hardware_profile.memory,
> -                               :storage => hardware_profile.storage,
> -                               :architecture => 
> hardware_profile.architecture,
> -                               :pool_id => id)
> -          front_hardware_profile.save!
> -        end
> -      end
> -    end
> -  end
> -
> -
>  end
> diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
> index 4e4e3b7..20b9e1e 100644
> --- a/src/app/models/provider.rb
> +++ b/src/app/models/provider.rb
> @@ -61,6 +61,18 @@ class Provider < ActiveRecord::Base
>                                 :architecture => 
> hardware_profile.architecture,
>                                 :provider_id => id)
>          ar_hardware_profile.save!
> +        front_hwp = HardwareProfile.new(:external_key =>
> +                                        name +
> +                                        
> Realm::AGGREGATOR_REALM_ACCOUNT_DELIMITER +
> +                                        ar_hardware_profile.external_key,
> +                                        :name => name +
> +                                        
> Realm::AGGREGATOR_REALM_ACCOUNT_DELIMITER +
> +                                        ar_hardware_profile.name,
> +                                        :memory => 
> ar_hardware_profile.memory,
> +                                        :storage => 
> ar_hardware_profile.storage,
> +                                        :architecture => 
> ar_hardware_profile.architecture)
> +        front_hwp.provider_hardware_profiles << ar_hardware_profile
> +        front_hwp.save!
>        end
>      end
>    end
> diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
> index c0dcbef..e66bb62 100644
> --- a/src/app/util/taskomatic.rb
> +++ b/src/app/util/taskomatic.rb
> @@ -50,6 +50,14 @@ class Taskomatic
>      begin
>        client = @task.instance.cloud_account.connect
>        realm = @task.instance.realm.external_key rescue nil
> +
> +      # Map aggregator HWP/image to back-end provider HWP/image in instance
> +      unless @task.instance.image.provider_image?
> +        @task.instance.image = @task.instance.image.provider_images[0]
> +      end
> +      unless @task.instance.hardware_profile.provider_hardware_profile?
> +        @task.instance.hardware_profile = 
> @task.instance.hardware_profile.provider_hardware_profiles[0]
> +      end
>        dcloud_instance = 
> client.create_instance(@task.instance.image.external_key,
>                                                 :flavor => 
> @task.instance.hardware_profile.external_key,
>                                                 :realm => realm,
> diff --git a/src/app/views/cloud_accounts/_form.erb 
> b/src/app/views/cloud_accounts/_form.erb
> deleted file mode 100644
> index 4fa1a79..0000000
> --- a/src/app/views/cloud_accounts/_form.erb
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -<ul>
> -  <li>
> -    <%= form.label :username, "Cloud Account username" %>
> -    <%= form.text_field :username %>
> -  </li>
> -  <li>
> -    <%= form.label :password, "Cloud Account password" %>
> -    <%= form.password_field :password %>
> -  </li>
> -  <li>
> -     <%= select("provider", "id", @providers.map{|p| [p.name,p.id]} , { 
> :include_blank => false }) %>
> -  </li>
> -</ul>
> diff --git a/src/app/views/cloud_accounts/_form.html.erb 
> b/src/app/views/cloud_accounts/_form.html.erb
> index 9b7b176..0d71953 100644
> --- a/src/app/views/cloud_accounts/_form.html.erb
> +++ b/src/app/views/cloud_accounts/_form.html.erb
> @@ -3,7 +3,7 @@
>  <%= hidden_field :cloud_account,  :id %>
>  <%= hidden_field :cloud_account, :provider_id, :value => @provider.id %>
>  <ul>
> -<% if @cloud_account.nil? %>
> +<% if @cloud_account.id.nil? %>
>  <li><label>UserName<span>UserName for the account you wish to connect to 
> this pool.</span></label><%= text_field :cloud_account, :username %></li>
>  <% end %>
>  <li><label>Password<span>Password for the account you wish to connect to 
> this pool.</span></label><%=password_field :cloud_account, :password %></li>
> diff --git a/src/app/views/cloud_accounts/new.html.erb 
> b/src/app/views/cloud_accounts/new.html.erb
> index 40f32cb..c8e6d60 100644
> --- a/src/app/views/cloud_accounts/new.html.erb
> +++ b/src/app/views/cloud_accounts/new.html.erb
> @@ -1,14 +1,10 @@
> -<% if @providers.size == 0 %>
> -<h1>No Providers available to associate with a new cloud account</h1>
> -<% else %>
> -<h2 class="greeting">New Cloud Account</h2>
> -
>  <div class="dcloud_form">
> +  <%= error_messages_for 'account' %>
> +
> +  <h2>Add a new Account from this Provider</h2><br />
>    <% form_for @cloud_account, :url => { :action => "create" } do |f| %>
>      <%= f.error_messages %>
>        <%= render :partial => "form", :object => f %>
> -    <%= f.submit "Create Cloud Account", :class => "submit" %>
>    <% end %>
>    <%= link_to "Cancel", root_path, :class => 'actionlink'  %>
>  </div>
> -<% end %>
> diff --git a/src/app/views/cloud_accounts/new_from_pool.html.erb 
> b/src/app/views/cloud_accounts/new_from_pool.html.erb
> deleted file mode 100644
> index 747df03..0000000
> --- a/src/app/views/cloud_accounts/new_from_pool.html.erb
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -<h2 class="greeting">New Cloud Account</h2>
> -
> -<div class="dcloud_form">
> -  <% form_for @cloud_account, :url => { :action => "create_from_pool" } do 
> |f| %>
> -    <%= f.error_messages %>
> -      <%= render :partial => "form", :object => f %>
> -    <%= hidden_field :pool, :id %>
> -    <%= f.submit "Create Cloud Account", :class => "submit" %>
> -  <% end %>
> -  <%= link_to "Cancel", root_path, :class => 'actionlink'  %>
> -</div>
> diff --git a/src/app/views/provider/accounts.html.erb 
> b/src/app/views/provider/accounts.html.erb
> index a763a33..ddc8f27 100644
> --- a/src/app/views/provider/accounts.html.erb
> +++ b/src/app/views/provider/accounts.html.erb
> @@ -20,4 +20,4 @@
>      </tbody>
>    </table>
>  <% end %>
> -<%= link_to "Add an account", {:action => "new_account", :id => @provider}, 
> :class => "actionlink" %>
> +<%= link_to "Add an account", {:controller => "cloud_accounts", :action => 
> "new", :provider_id => @provider}, :class => "actionlink" %>
> diff --git a/src/app/views/provider/new_account.html.erb 
> b/src/app/views/provider/new_account.html.erb
> deleted file mode 100644
> index eed474f..0000000
> --- a/src/app/views/provider/new_account.html.erb
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -<div class="dcloud_form">
> -  <%= error_messages_for 'pool' %>
> -  <%= error_messages_for 'account' %>
> -
> -  <h2>Create an Account for this Provider</h2><br />
> -
> -  <% form_tag :action => 'create_account' do |form| -%>
> -    <%= render :partial => 'cloud_accounts/form' %>
> -  <% end %>
> -
> -</div>
> diff --git a/src/app/views/provider/show.html.erb 
> b/src/app/views/provider/show.html.erb
> index 0897828..f4213a9 100644
> --- a/src/app/views/provider/show.html.erb
> +++ b/src/app/views/provider/show.html.erb
> @@ -1,24 +1,3 @@
> -<% if @provider.pools.size == 0 %>
> -<h1>There are no pools to display</h1>
> -<% else %>
> -    <table>
> -      <thead>
> -        <tr>
> -        <th scope="col">Name</th>
> -        <th scope="col">Instances</th>
> -        </tr>
> -      </thead>
> -      <tbody>
> -  <%[email protected] {|pool| %>
> -        <tr>
> -          <td><%= pool.name %></td>
> -          <td><%= pool.instances.count %></td>
> -        </tr>
> -      <% } %>
> -    </tbody>
> -  </table>
> -<% end %>
> -<%= link_to "Add a pool",     {:controller => "pool", :action => "new", 
> :provider => @provider}, :class => "actionlink" %>
>  <%= link_to "Realms",  {:action => "realms", :id => @provider.id}, 
> :class=>"actionlink"%>
>  <%= link_to "Accounts",  {:action => "accounts", :id => @provider.id}, 
> :class=>"actionlink"%>
>  <%= link_to "User access",  {:controller => "permissions", :action => 
> "list", :provider_id => @provider.id}, :class=>"actionlink" if 
> has_view_perms? %>
> diff --git a/src/db/migrate/20090804135630_create_hardware_profiles.rb 
> b/src/db/migrate/20090804135630_create_hardware_profiles.rb
> index f3e1b65..95bc0ce 100644
> --- a/src/db/migrate/20090804135630_create_hardware_profiles.rb
> +++ b/src/db/migrate/20090804135630_create_hardware_profiles.rb
> @@ -28,7 +28,6 @@ class CreateHardwareProfiles < ActiveRecord::Migration
>        t.float   :storage, :null => false
>        t.string  :architecture, :null => false
>        t.integer :provider_id
> -      t.integer :pool_id
>        t.integer :lock_version, :default => 0
>        t.timestamps
>      end
> diff --git a/src/db/migrate/20090804140143_create_images.rb 
> b/src/db/migrate/20090804140143_create_images.rb
> index bb3db82..8c9c962 100644
> --- a/src/db/migrate/20090804140143_create_images.rb
> +++ b/src/db/migrate/20090804140143_create_images.rb
> @@ -26,7 +26,6 @@ class CreateImages < ActiveRecord::Migration
>        t.string  :name, :null => false, :limit => 1024
>        t.string  :architecture, :null => false
>        t.integer :provider_id
> -      t.integer :pool_id
>        t.integer :lock_version, :default => 0
>        t.timestamps
>      end
> diff --git a/src/features/pool.feature b/src/features/pool.feature
> index c96c2a9..5d8f219 100644
> --- a/src/features/pool.feature
> +++ b/src/features/pool.feature
> @@ -45,19 +45,3 @@ Feature: Manage Pools
>         When I follow "Realms"
>         Then I should see "Europe"
>         And I should see "United States"
> -
> -  Scenario: View Pool's Images
> -     Given I own a pool named "mockpool"
> -     And the Pool has the following Images:
> -     | name      | architecture |
> -     | Fedora 10 | x86_64       |
> -     | Fedora 10 | i386         |
> -     | JBoss     | i386         |
> -     And I am on the homepage
> -     When I follow "mockpool"
> -     Then I should be on the show pool page
> -     When I follow "View Images"
> -     Then I should see the following:
> -     | Fedora 10 | x86_64 |
> -     | Fedora 10 | i386   |
> -     | JBoss     | i386   |
> diff --git a/src/spec/controllers/cloud_accounts_controller_spec.rb 
> b/src/spec/controllers/cloud_accounts_controller_spec.rb
> index f1d4a0d..d3e0f18 100644
> --- a/src/spec/controllers/cloud_accounts_controller_spec.rb
> +++ b/src/spec/controllers/cloud_accounts_controller_spec.rb
> @@ -48,4 +48,16 @@ describe CloudAccountsController do
>      response.should_not be_success
>    end
>  
> +  it "should provide ui to create new account" do
> +     UserSession.create(@admin)
> +     get :new, :provider_id => @provider.id
> +     response.should be_success
> +     response.should render_template("new")
> +  end
> +
> +  it "should fail to grant access to account UIs for unauthenticated user" do
> +     get :new
> +     response.should_not be_success
> +  end
> +
>  end
> diff --git a/src/spec/controllers/provider_controller_spec.rb 
> b/src/spec/controllers/provider_controller_spec.rb
> index de894ca..096af3d 100644
> --- a/src/spec/controllers/provider_controller_spec.rb
> +++ b/src/spec/controllers/provider_controller_spec.rb
> @@ -17,19 +17,9 @@ describe ProviderController do
>       response.should render_template("accounts")
>    end
>  
> -  it "should provide ui to create new account" do
> -     UserSession.create(@admin)
> -     get :new_account, :id => @provider.id
> -     response.should be_success
> -     response.should render_template("new_account")
> -  end
> -
>    it "should fail to grant access to account UIs for unauthenticated user" do
>       get :accounts
>       response.should_not be_success
> -
> -     get :new_account
> -     response.should_not be_success
>    end
>  
>    it "should provide ui to view hardware profiles" do
> diff --git a/src/spec/factories/image.rb b/src/spec/factories/image.rb
> index dc55ac0..cc0bc17 100644
> --- a/src/spec/factories/image.rb
> +++ b/src/spec/factories/image.rb
> @@ -8,7 +8,6 @@ Factory.define :image do |i|
>    i.provider { |p| Provider.new }
>  end
>  
> -Factory.define :pool_image, :parent => :image do |i|
> +Factory.define :front_end_image, :parent => :image do |i|
>    i.provider nil
> -  i.association(:pool)
>  end
> diff --git a/src/spec/models/hardware_profile_spec.rb 
> b/src/spec/models/hardware_profile_spec.rb
> index 78fc0a2..e2b09b4 100644
> --- a/src/spec/models/hardware_profile_spec.rb
> +++ b/src/spec/models/hardware_profile_spec.rb
> @@ -55,69 +55,28 @@ describe HardwareProfile do
>      @hp.should_not be_valid
>    end
>  
> -  it "should reject Aggregator profiles for custom Instance profiles" do
> +  it "should allow Aggregator profiles only for provider profiles" do
> +    @hp.provider = nil
> +
>      @hp.aggregator_hardware_profiles << @hp
> -    @hp.should_not be_valid
>      @hp.should have(1).error_on(:aggregator_hardware_profiles)
>      @hp.errors.on(:aggregator_hardware_profiles).should eql(
> -      "Aggregator profiles are not allowed for custom Instance profiles")
> +      "Aggregator profiles only allowed for provider profiles")
>  
>      @hp.aggregator_hardware_profiles.clear
>      @hp.should be_valid
> - end
> -
> -  it "should reject Provider profiles for custom Instance profiles" do
> -    @hp.provider_hardware_profiles << @hp
> -    @hp.should_not be_valid
> -    @hp.should have(1).error_on(:provider_hardware_profiles)
> -    @hp.errors.on(:provider_hardware_profiles).should eql(
> -      "Provider profiles are not allowed for custom Instance profiles")
> -
> -    @hp.provider_hardware_profiles.clear
> -    @hp.should be_valid
>    end
>  
> -  it "should require either provider or pool to be blank" do
> +  it "should allow Provider profiles only for aggregator profiles" do
>      @hp.provider = Provider.new
> -    @hp.pool = Pool.new
> -    @hp.should_not be_valid
> -    @hp.should have(1).error_on(:provider)
> -    @hp.errors.on(:provider).should eql("provider or pool must be blank")
> -    @hp.should have(1).error_on(:pool)
> -    @hp.errors.on(:pool).should eql("provider or pool must be blank")
> -
> -    @hp.provider = nil
> -    @hp.should be_valid
>  
> -    @hp.provider = Provider.new
> -    @hp.pool = nil
> -    @hp.should be_valid
> -  end
> -
> -  it "should allow Provider profiles only for provider profiles" do
> -    @hp.provider = nil
> -    @hp.pool = Pool.new
> -
> -    @hp.provider_hardware_profiles << @hp
> +    @hp.aggregator_hardware_profiles << @hp
>      @hp.should have(1).error_on(:provider_hardware_profiles)
>      @hp.errors.on(:provider_hardware_profiles).should eql(
> -      "Provider profiles only allowed for provider profiles")
> +      "Provider profiles only allowed for aggregator profiles")
>  
>      @hp.provider_hardware_profiles.clear
>      @hp.should be_valid
>    end
>  
> -  it "should allow Aggregator profiles only for pool profiles" do
> -    @hp.provider = Provider.new
> -    @hp.pool = nil
> -
> -    @hp.aggregator_hardware_profiles << @hp
> -    @hp.should have(1).error_on(:aggregator_hardware_profiles)
> -    @hp.errors.on(:aggregator_hardware_profiles).should eql(
> -      "Aggregator profiles only allowed for pool profiles")
> -
> -    @hp.aggregator_hardware_profiles.clear
> -    @hp.should be_valid
> -  end
> -
>  end
> diff --git a/src/spec/models/image_spec.rb b/src/spec/models/image_spec.rb
> index de68475..a0fd8ca 100644
> --- a/src/spec/models/image_spec.rb
> +++ b/src/spec/models/image_spec.rb
> @@ -46,33 +46,8 @@ describe Image do
>      i.should be_valid
>    end
>  
> -  it "should have either a provider or a pool specified" do
> -    i = Factory.build(:image, :provider => nil, :pool => nil)
> -    i.should have(1).error_on(:provider)
> -    i.should have(1).error_on(:pool)
> -    i.errors.on(:provider).should eql(
> -      "provider or pool must be specified")
> -    i.errors.on(:pool).should eql(
> -      "provider or pool must be specified")
> -
> -    i.provider = @provider
> -    i.should be_valid
> -
> -    i.pool = Factory.build(:pool)
> -    i.should have(1).error_on(:provider)
> -    i.should have(1).error_on(:pool)
> -    i.errors.on(:provider).should eql(
> -      "provider or pool must be blank")
> -    i.errors.on(:pool).should eql(
> -      "provider or pool must be blank")
> -
> -    i.provider = nil
> -    i.should be_valid
> -  end
> -
>    it "should have provider images only if it has a provider" do
> -    i = Factory.create(:image, :pool => Pool.new,
> -                     :provider => nil)
> +    i = Factory.create(:image, :provider => nil)
>  
>      i.aggregator_images << i
>      i.should have(1).error_on(:aggregator_images)
> -- 
> 1.6.2.5
> 
> _______________________________________________
> deltacloud-devel mailing list
> [email protected]
> https://fedorahosted.org/mailman/listinfo/deltacloud-devel

ACK ACK! ACK ACK! </mars attacks>
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to