Hey Jozef,
It looks good, but I've found a few issues:
There are four trailing whitespaces, inline.
Next, I can create multiple families using the same name. I'm not sure
it is a problem but I do find it confusing. Unless you know better,
please fix that one, too.
Finally, there's this error:
1. Select Admin > Pool Families from the navigation
2. Click on the "default" pool family
3. In the details pane, click on the "History" tab
I'm getting this error:
Internal Server Error
Missing template admin/pool_families/_history.erb in view path
app/views
The same goes for Permissions, Provider Accounts and Pools.
Please put the following files (empty if you must) into the views:
admin/pool_families/_history.haml
admin/pool_families/_permissions.haml
admin/pool_families/_provider_accounts.haml
admin/pool_families/_pools.haml
Please resend the patch after you fix these.
Thanks,
Thomas
On 01/11/2011 04:28 PM, jzigmund(a)redhat.com wrote:
From: Jozef Zigmund<jzigmund(a)redhat.com>
This patch contains updated controller for basic CRUD operations, views for actions and
cucumber tests.
---
.../controllers/admin/pool_families_controller.rb | 67 ++++++++++++++++++++
src/app/controllers/admin/providers_controller.rb | 2 +-
src/app/models/pool_family.rb | 2 +-
src/app/views/admin/pool_families/_form.haml | 6 ++
src/app/views/admin/pool_families/_list.haml | 23 +++++++
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 | 28 ++++++++
13 files changed, 196 insertions(+), 4 deletions(-)
create mode 100644 src/app/views/admin/pool_families/_form.haml
create mode 100644 src/app/views/admin/pool_families/_list.haml
create mode 100644 src/app/views/admin/pool_families/_properties.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..cfe7025 100644
--- a/src/app/controllers/admin/pool_families_controller.rb
+++ b/src/app/controllers/admin/pool_families_controller.rb
@@ -1,6 +1,73 @@
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
+
New line at EOF ^^^
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..6925680 100644
--- a/src/app/models/pool_family.rb
+++ b/src/app/models/pool_family.rb
@@ -20,7 +20,7 @@
# 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
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/_list.haml
b/src/app/views/admin/pool_families/_list.haml
new file mode 100644
index 0000000..7c31719
--- /dev/null
+++ b/src/app/views/admin/pool_families/_list.haml
@@ -0,0 +1,23 @@
+- 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:
+ = link_to "All", @url_params.merge(:select => 'all')
+ %span> ,
+ = link_to "None", @url_params.merge(:select => 'none')
+
+ %table#pool_famlies_table
+ = sortable_table_header @header
+ - unless @pool_families.blank?
Trailing space at EOL ^^^
+ - @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
+
Trailing whitespace ^^^
+ %td
+ xx %
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/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..2de705e
--- /dev/null
+++ b/src/features/step_definitions/pool_family_steps.rb
@@ -0,0 +1,28 @@
+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
+
Newline at EOF ^^^