From: Jozef Zigmund <[email protected]>

---
 .../controllers/admin/pool_families_controller.rb  |   66 ++++++++++++++++++++
 src/app/controllers/admin/providers_controller.rb  |    2 +-
 src/app/models/pool_family.rb                      |    3 +-
 src/app/views/admin/pool_families/_form.haml       |    6 ++
 src/app/views/admin/pool_families/_list.haml       |   22 +++++++
 src/app/views/admin/pool_families/_properties.haml |    4 +
 src/app/views/admin/pool_families/edit.haml        |    7 ++
 src/app/views/admin/pool_families/index.haml       |    3 +-
 src/app/views/admin/pool_families/new.haml         |    3 +
 src/app/views/admin/pool_families/show.haml        |    5 ++
 src/config/routes.rb                               |    3 +-
 src/features/pool_family.feature                   |   47 ++++++++++++++
 src/features/step_definitions/pool_family_steps.rb |   27 ++++++++
 13 files changed, 194 insertions(+), 4 deletions(-)
 create mode 100644 src/app/views/admin/pool_families/_form.haml
 create mode 100644 src/app/views/admin/pool_families/_history.haml
 create mode 100644 src/app/views/admin/pool_families/_list.haml
 create mode 100644 src/app/views/admin/pool_families/_permissions.haml
 create mode 100644 src/app/views/admin/pool_families/_pools.haml
 create mode 100644 src/app/views/admin/pool_families/_properties.haml
 create mode 100644 src/app/views/admin/pool_families/_provider_accounts.haml
 create mode 100644 src/app/views/admin/pool_families/edit.haml
 create mode 100644 src/app/views/admin/pool_families/new.haml
 create mode 100644 src/app/views/admin/pool_families/show.haml
 create mode 100644 src/features/pool_family.feature
 create mode 100644 src/features/step_definitions/pool_family_steps.rb

diff --git a/src/app/controllers/admin/pool_families_controller.rb 
b/src/app/controllers/admin/pool_families_controller.rb
index a1a3a9a..9fe2c25 100644
--- a/src/app/controllers/admin/pool_families_controller.rb
+++ b/src/app/controllers/admin/pool_families_controller.rb
@@ -1,6 +1,72 @@
 class Admin::PoolFamiliesController < ApplicationController
   before_filter :require_user
+  before_filter :load_pool_families, :only =>[:index,:show]
 
   def index
   end
+
+  def new
+    @pool_family = PoolFamily.new
+  end
+
+  def create
+    @pool_family = PoolFamily.new(params[:pool_family])
+    unless @pool_family.save
+      flash.now[:warning] = "Pool family's creation failed."
+      render :new and return
+    else
+      flash[:notice] = "Pool family was added."
+      redirect_to admin_pool_families_path
+    end
+  end
+
+  def edit
+    @pool_family = PoolFamily.find(params[:id])
+  end
+
+  def update
+    @pool_family = PoolFamily.find(params[:id])
+    unless @pool_family.update_attributes(params[:pool_family])
+      flash[:error] = "Pool Family wasn't updated!"
+      render :action => 'edit' and return
+    else
+      flash[:notice] = "Pool Family was updated!"
+      redirect_to admin_pool_families_path
+    end
+  end
+
+  def show
+    @pool_family = PoolFamily.find(params[:id])
+    @url_params = params.clone
+    @tab_captions = ['Properties', 'History', 'Permissions', 'Provider 
Accounts', 'Pools']
+    @details_tab = params[:details_tab].blank? ? 'properties' : 
params[:details_tab]
+    respond_to do |format|
+      format.js do
+        if @url_params.delete :details_pane
+          render :partial => 'layouts/details_pane' and return
+        end
+        render :parial => @details_tab and return
+      end
+      format.html { render :show }
+    end
+  end
+
+  def multi_destroy
+    PoolFamily.destroy(params[:pool_family_selected])
+    redirect_to admin_pool_families_path
+  end
+
+  protected
+
+  def load_pool_families
+    @header = [{ :name => "Name", :sort_attr => :name},
+               { :name => "Quota limit", :sort_attr => :name},
+               { :name => "Quota currently in use", :sort_attr => :name},
+    ]
+    @pool_families = PoolFamily.paginate(:all,
+                                         :page => params[:page] || 1,
+                                         :order => ( params[:order_field] || 
'name' ) + ' ' + (params[:order_dir] || 'asc')
+                                        )
+    @url_params = params.clone
+  end
 end
diff --git a/src/app/controllers/admin/providers_controller.rb 
b/src/app/controllers/admin/providers_controller.rb
index 5f2f437..aac2c1d 100644
--- a/src/app/controllers/admin/providers_controller.rb
+++ b/src/app/controllers/admin/providers_controller.rb
@@ -28,7 +28,7 @@ class Admin::ProvidersController < ApplicationController
         end
         render :partial => @details_tab and return
       end
-      format.html { render :action => 'show'}
+      format.html { render :action => 'show' }
     end
   end
 
diff --git a/src/app/models/pool_family.rb b/src/app/models/pool_family.rb
index c070ee8..bc96fee 100644
--- a/src/app/models/pool_family.rb
+++ b/src/app/models/pool_family.rb
@@ -20,13 +20,14 @@
 # Likewise, all the methods added will be available for all controllers.
 
 class PoolFamily < ActiveRecord::Base
-
+  include PermissionedObject
   DEFAULT_POOL_FAMILY_KEY = "default_pool_family"
 
   has_many :pools,  :dependent => :destroy
   has_and_belongs_to_many :cloud_accounts
 
   validates_presence_of :name
+  validates_uniqueness_of :name
   def self.default
     MetadataObject.lookup(DEFAULT_POOL_FAMILY_KEY)
   end
diff --git a/src/app/views/admin/pool_families/_form.haml 
b/src/app/views/admin/pool_families/_form.haml
new file mode 100644
index 0000000..362b67c
--- /dev/null
+++ b/src/app/views/admin/pool_families/_form.haml
@@ -0,0 +1,6 @@
+= form.error_message_on :name, 'Name'
+%fieldset.clear
+  = form.label :name,'Pool Family Name :'
+  = form.text_field :name, :title => 'pool_family_name', :value => 
@pool_family.name, :class => "clear grid_4 alpha"
+%fieldset.clear
+  = form.submit "Save",  :class => "submit formbutton"
diff --git a/src/app/views/admin/pool_families/_history.haml 
b/src/app/views/admin/pool_families/_history.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/pool_families/_list.haml 
b/src/app/views/admin/pool_families/_list.haml
new file mode 100644
index 0000000..a824676
--- /dev/null
+++ b/src/app/views/admin/pool_families/_list.haml
@@ -0,0 +1,22 @@
+- form_tag do
+  = link_to "Create", new_admin_pool_family_path, :class => "button"
+  = restful_submit_tag "Delete", 'destroy', 
multi_destroy_admin_pool_families_path, 'DELETE', :id => 'delete_button'
+
+  %p
+    Select:&nbsp;
+    = link_to "All", @url_params.merge(:select => 'all')
+    %span> ,&nbsp;
+    = link_to "None", @url_params.merge(:select => 'none')
+
+  %table#pool_famlies_table
+    = sortable_table_header @header
+    - unless @pool_families.blank?
+      - @pool_families.each do |pool_family|
+        %tr
+          %td
+            - selected = @url_params[:select] == 'all'
+            %input{:name => "pool_family_selected[]", :type => "checkbox", 
:value => pool_family.id, :id => "pool_family_checkbox_#{pool_family.id}", 
:checked => selected }
+            = link_to pool_family.name, admin_pool_family_path(pool_family)
+          %td
+          %td
+            xx %
diff --git a/src/app/views/admin/pool_families/_permissions.haml 
b/src/app/views/admin/pool_families/_permissions.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/pool_families/_pools.haml 
b/src/app/views/admin/pool_families/_pools.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/pool_families/_properties.haml 
b/src/app/views/admin/pool_families/_properties.haml
new file mode 100644
index 0000000..02d197e
--- /dev/null
+++ b/src/app/views/admin/pool_families/_properties.haml
@@ -0,0 +1,4 @@
+%h3
+  Properties for
+  = @pool_family.name
+= link_to "Edit", edit_admin_pool_family_path(@pool_family), {:class => 
'button'}
diff --git a/src/app/views/admin/pool_families/_provider_accounts.haml 
b/src/app/views/admin/pool_families/_provider_accounts.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/pool_families/edit.haml 
b/src/app/views/admin/pool_families/edit.haml
new file mode 100644
index 0000000..1c09438
--- /dev/null
+++ b/src/app/views/admin/pool_families/edit.haml
@@ -0,0 +1,7 @@
+%h3
+  Editing
+  = @pool_family.name
+  Pool Family
+
+-form_for @pool_family, :url => admin_pool_family_path(@pool_family), :html => 
{ :method => :put } do |f|
+  = render :partial => 'form', :locals => { :form => f, :cancel_path => 
admin_providers_path }
diff --git a/src/app/views/admin/pool_families/index.haml 
b/src/app/views/admin/pool_families/index.haml
index e50f43b..62ccbc6 100644
--- a/src/app/views/admin/pool_families/index.haml
+++ b/src/app/views/admin/pool_families/index.haml
@@ -1 +1,2 @@
-admin/pool_families/index.haml
+- content_for :list do
+  = render :partial => 'list'
diff --git a/src/app/views/admin/pool_families/new.haml 
b/src/app/views/admin/pool_families/new.haml
new file mode 100644
index 0000000..7dbac4c
--- /dev/null
+++ b/src/app/views/admin/pool_families/new.haml
@@ -0,0 +1,3 @@
+%h2 Create a new Pool family
+- form_for @pool_family, :url => admin_pool_families_path do |f|
+  = render :partial => "form", :locals => { :form => f, :cancel_path => 
admin_pool_families_path }
diff --git a/src/app/views/admin/pool_families/show.haml 
b/src/app/views/admin/pool_families/show.haml
new file mode 100644
index 0000000..0c36221
--- /dev/null
+++ b/src/app/views/admin/pool_families/show.haml
@@ -0,0 +1,5 @@
+- content_for 'list' do
+  = render :partial => 'list'
+
+- content_for 'details' do
+  = render :partial => 'layouts/details_pane'
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 6d9b5cf..b3049f7 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -47,12 +47,13 @@ ActionController::Routing::Routes.draw do |map|
   map.connect '/set_layout', :controller => 'application', :action => 
'set_layout'
 
   map.namespace 'admin' do |r|
-    r.resources :hardware_profiles, :pool_families, :realms
+    r.resources :hardware_profiles, :realms
     r.resources :providers, :collection => { :multi_destroy => :delete }
     r.resources :users, :collection => { :multi_destroy => :delete }
     r.resources :provider_accounts, :collection => { :multi_destroy => :delete 
}
     r.resources :roles, :collection => { :multi_destroy => :delete }
     r.resources :settings, :collection => { :self_service => :get, 
:general_settings => :get }
+    r.resources :pool_families, :collection => { :multi_destroy => :delete }
   end
 
   map.resources :pools
diff --git a/src/features/pool_family.feature b/src/features/pool_family.feature
new file mode 100644
index 0000000..64c5635
--- /dev/null
+++ b/src/features/pool_family.feature
@@ -0,0 +1,47 @@
+Feature: Pool Families
+  In order to manage my cloud infrastructure
+  As a user
+  I want to manage pool families
+
+  Background:
+    Given I am an authorised user
+    And I am logged in
+    And I am using new UI
+
+  Scenario: List pool families
+    Given I am on the homepage
+    And there are these pool families:
+    | name      |
+    | pool_family1 |
+    | pool_family2 |
+    | pool_family3 |
+    When I go to the admin pool families page
+    Then I should see the following:
+    | pool_family1 |
+    | pool_family2 |
+    | pool_family3 |
+
+  Scenario: Show pool family details
+    Given there is a pool family named "testpoolfamily"
+    And I am on the admin pool families page
+    When I follow "testpoolfamily"
+    Then I should see "Name"
+
+  Scenario: Create a new Pool family
+    Given I am on the admin pool families page
+    And there is not a pool family named "testpoolfamily"
+    When I follow "Create"
+    Then I should be on the new admin pool family page
+    When I fill in "pool_family[name]" with "testpoolfamily"
+    And I press "Save"
+    Then I should be on the admin pool families page
+    And I should see "Pool family was added."
+    And I should have a pool family named "testpoolfamily"
+
+  Scenario: Delete a pool family
+    Given I am on the homepage
+    And there is a pool family named "poolfamily1"
+    When I go to the admin pool families page
+    And I check "poolfamily1" pool family
+    And I press "Delete"
+    Then there should not exist a pool family named "poolfamily1"
diff --git a/src/features/step_definitions/pool_family_steps.rb 
b/src/features/step_definitions/pool_family_steps.rb
new file mode 100644
index 0000000..9585a21
--- /dev/null
+++ b/src/features/step_definitions/pool_family_steps.rb
@@ -0,0 +1,27 @@
+Given /^there are these pool families:$/ do |table|
+  table.hashes.each do |hash|
+    Factory(:pool_family, :name => hash['name'])
+  end
+end
+
+Given /^there is a pool family named "([^\"]*)"$/ do |name|
+  @provider = Factory(:pool_family, :name => name)
+end
+
+Given /^there is not a pool family named "([^"]*)"$/ do |name|
+  pool_family = PoolFamily.find_by_name(name)
+  if pool_family then pool_family.destroy end
+end
+
+Then /^I should have a pool family named "([^\"]*)"$/ do |name|
+  PoolFamily.find_by_name(name).should_not be_nil
+end
+
+When /^(?:|I )check "([^"]*)" pool family$/ do |name|
+  poolfamily = PoolFamily.find_by_name(name)
+  check("pool_family_checkbox_#{poolfamily.id}")
+end
+
+Then /^there should not exist a pool family named "([^\"]*)"$/ do |name|
+  PoolFamily.find_by_name(name).should be_nil
+end
-- 
1.7.3.4

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

Reply via email to