diff --git a/.gitmodules b/.gitmodules
index 844ff5c..3ee9458 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -25,3 +25,6 @@
[submodule "extras/puppet"]
path = extras/puppet
url = git://github.com/ohadlevy/puppet-foreman.git
+[submodule "vendor/plugins/has_many_polymorphs"]
+ path = vendor/plugins/has_many_polymorphs
+ url = git://github.com/fauna/has_many_polymorphs.git
diff --git a/app/controllers/usergroups_controller.rb b/app/controllers/usergroups_controller.rb
new file mode 100644
index 0000000..ed608b3
--- /dev/null
+++ b/app/controllers/usergroups_controller.rb
@@ -0,0 +1,45 @@
+class UsergroupsController < ApplicationController
+ def index
+ @usergroups = Usergroup.all
+ end
+
+ def new
+ @usergroup = Usergroup.new
+ end
+
+ def create
+ @usergroup = Usergroup.new(params[:usergroup])
+ if @usergroup.save
+ flash[:foreman_notice] = "Successfully created usergroup."
+ redirect_to usergroups_path
+ else
+ render :action => 'new'
+ end
+ end
+
+ def edit
+ @usergroup = Usergroup.find(params[:id])
+ end
+
+ def update
+ @usergroup = Usergroup.find(params[:id])
+
+ if @usergroup.update_attributes(params[:usergroup])
+ flash[:foreman_notice] = "Successfully updated usergroup."
+ redirect_to usergroups_path
+ else
+ render :action => 'edit'
+ end
+ end
+
+ def destroy
+ @usergroup = Usergroup.find(params[:id])
+ if @usergroup.destroy
+ flash[:foreman_notice] = "Successfully destroyed usergroup."
+ else
+ logger.error @usergroup.errors.full_messages
+ flash[:foreman_error] = @usergroup.errors.full_messages.join "
"
+ end
+ redirect_to usergroups_path
+ end
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 2118d97..7f38304 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -10,9 +10,11 @@ class UsersController < ApplicationController
columns[:firstname].label = "First name"
columns[:lastname].label = "Surname"
columns[:admin].label = "Admin"
- config.columns = [:firstname, :lastname, :login, :mail, :admin, :auth_source, :last_login_on]
+ config.columns = [:firstname, :lastname, :login, :mail, :admin, :auth_source, :usergroups, :last_login_on]
+ config.update.columns = [:firstname, :lastname, :login, :mail, :admin, :auth_source, :last_login_on]
config.columns[:auth_source].form_ui = :select
config.columns[:admin].form_ui = :checkbox
+ config.columns[:usergroups].clear_link
list.sorting = {:last_login_on => 'DESC' }
config.update.columns.exclude :last_login_on
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 368f489..f37cf99 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -10,7 +10,7 @@ module ApplicationHelper
end
def edit_habtm klass, association
- render :partial => 'common/edit_habtm', :locals =>{ :klass => klass, :associations => association.all}
+ render :partial => 'common/edit_habtm', :locals =>{ :klass => klass, :associations => association.all.delete_if{|e| e == klass}}
end
def link_to_remove_fields(name, f)
diff --git a/app/helpers/usergroups_helper.rb b/app/helpers/usergroups_helper.rb
new file mode 100644
index 0000000..1764f18
--- /dev/null
+++ b/app/helpers/usergroups_helper.rb
@@ -0,0 +1,2 @@
+module UsergroupsHelper
+end
diff --git a/app/models/host.rb b/app/models/host.rb
index c14f77e..ce90a83 100644
--- a/app/models/host.rb
+++ b/app/models/host.rb
@@ -12,6 +12,7 @@ class Host < Puppet::Rails::Host
has_many :reports, :dependent => :destroy
has_many :host_parameters, :dependent => :destroy
accepts_nested_attributes_for :host_parameters, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
+ belongs_to :owner, :polymorphic => true
named_scope :recent, lambda { |*args| {:conditions => ["last_report > ?", (args.first || (SETTINGS[:run_interval] + 5.minutes).ago)]} }
named_scope :out_of_sync, lambda { |*args| {:conditions => ["last_report < ?", (args.first || (SETTINGS[:run_interval] + 5.minutes).ago)]} }
@@ -80,6 +81,10 @@ class Host < Puppet::Rails::Host
before_validation :normalize_addresses, :normalize_hostname
+ def <=>(other)
+ self.name <=> other.name
+ end
+
# Returns the name of this host as a string
# String: the host's name
def to_label
@@ -99,6 +104,21 @@ class Host < Puppet::Rails::Host
20
end
+ # method to return the correct owner list for host edit owner select dropbox
+ def is_owned_by
+ owner.id_and_type if owner
+ end
+
+ # virtual attributes which sets the owner based on the user selection
+ # supports a simple user, or a usergroup
+ # selection parameter is expected to be an ActiveRecord id_and_type method (see Foreman's AR extentions).
+ def is_owned_by=(selection)
+ oid = nil
+ oid = User.find(selection.to_i) if selection =~ /-Users$/
+ oid = Usergroup.find(selection.to_i) if selection =~ /-Usergroups$/
+ self.owner = oid
+ end
+
def clearReports
# Remove any reports that may be held against this host
Report.delete_all("host_id = #{self.id}")
diff --git a/app/models/host_mailer.rb b/app/models/host_mailer.rb
index 349e260..8dd19ce 100644
--- a/app/models/host_mailer.rb
+++ b/app/models/host_mailer.rb
@@ -44,7 +44,8 @@ class HostMailer < ActionMailer::Base
def error_state(report)
host = report.host
- email = SETTINGS[:administrator]
+ email = host.owner.recipients if SETTINGS[:ldap] and not host.owner.empty?
+ email ||= SETTINGS[:administrator]
raise "unable to find recipients" if email.empty?
recipients email
from "Foreman-noreply"
diff --git a/app/models/user.rb b/app/models/user.rb
index 8dfc90e..0911182 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,8 +1,8 @@
class User < ActiveRecord::Base
belongs_to :auth_source
has_many :changes, :class_name => 'Audit', :as => :user
-
- has_many :hosts
+ has_many :usergroups, :through => :usergroup_member
+ has_many :direct_hosts, :as => :owner, :class_name => "Host"
validates_uniqueness_of :login, :message => "already exists"
validates_presence_of :login, :mail
@@ -13,9 +13,22 @@ class User < ActiveRecord::Base
validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :allow_nil => true
validates_length_of :mail, :maximum => 60, :allow_nil => true
+ before_destroy Ensure_not_used_by.new(:hosts)
+
def to_label
"#{firstname} #{lastname}"
end
+ alias_method :to_s, :to_label
+ alias_method :name, :to_label
+
+ def <=>(other)
+ self.name <=> other.name
+ end
+
+ # The text item to see in a select dropdown menu
+ def select_title
+ name + " (#{login})"
+ end
def self.try_to_login(login, password)
# Make sure no one can sign in with an empty password
@@ -49,4 +62,28 @@ class User < ActiveRecord::Base
raise text
end
+ def indirect_hosts
+ all_groups = []
+ for usergroup in usergroups
+ all_groups += usergroup.all_usergroups
+ end
+ all_groups.uniq.map{|g| g.hosts}.flatten.uniq
+ end
+
+ def hosts
+ direct_hosts + indirect_hosts
+ end
+
+ def recipients
+ [mail]
+ end
+
+ protected
+
+ def validate
+ if Usergroup.all.map(&:name).include?(self.login)
+ errors.add_to_base "A usergroup already exists with this name"
+ end
+ end
+
end
diff --git a/app/models/usergroup.rb b/app/models/usergroup.rb
new file mode 100644
index 0000000..81c54c2
--- /dev/null
+++ b/app/models/usergroup.rb
@@ -0,0 +1,62 @@
+class Usergroup < ActiveRecord::Base
+ has_many_polymorphs :members, :from => [:usergroups, :users ], :as => :member,
+ :through => :usergroup_member, :foreign_key => :usergroup_id, :dependent => :destroy
+
+ has_many :hosts, :as => :owner
+ validates_uniqueness_of :name
+ before_destroy Ensure_not_used_by.new(:hosts, :usergroups)
+
+ def to_s
+ name
+ end
+
+ # The text item to see in a select dropdown menu
+ alias_method :select_title, :to_s
+
+ # Support for sorting the groups by name
+ def <=>(other)
+ self.name <=> other.name
+ end
+
+ # This methods retrieves all user addresses in a usergroup
+ # Returns: Array of strings representing the user's email addresses
+ def recipients
+ all_users.map(&:mail)
+ end
+
+ # This methods retrieves all users in a usergroup
+ # Returns: Array of users
+ def all_users(group_list=[self], user_list=[])
+ retrieve_users_and_groups group_list, user_list
+ user_list.sort.uniq
+ end
+
+ # This methods retrieves all usergroups in a usergroup
+ # Returns: Array of usergroups
+ def all_usergroups(group_list=[self], user_list=[])
+ retrieve_users_and_groups group_list, user_list
+ group_list.sort.uniq
+ end
+
+ protected
+ # Recurses down the tree of usergroups and finds the users
+ # [+group_list+]: Array of Usergroups that have already been processed
+ # [+users+] : Array of users accumulated at this point
+ # Returns : Array of non unique users
+ def retrieve_users_and_groups(group_list, user_list)
+ for group in usergroups
+ next if group_list.include? group
+ group_list << group
+
+ group.retrieve_users_and_groups(group_list, user_list)
+ end
+ user_list.concat users
+ end
+
+ def validate
+ if User.all.map(&:login).include?(self.name)
+ errors.add :name, "is already used by a user account"
+ end
+ end
+
+end
diff --git a/app/models/usergroup_member.rb b/app/models/usergroup_member.rb
new file mode 100644
index 0000000..6fea6dd
--- /dev/null
+++ b/app/models/usergroup_member.rb
@@ -0,0 +1,5 @@
+class UsergroupMember < ActiveRecord::Base
+ belongs_to :member, :polymorphic => true
+ belongs_to :usergroup
+
+end
diff --git a/app/views/home/settings.erb b/app/views/home/settings.erb
index 2450791..9370725 100644
--- a/app/views/home/settings.erb
+++ b/app/views/home/settings.erb
@@ -12,6 +12,7 @@
Name | +<%= f.text_field :name %> | +
User groups | +<%= edit_habtm @usergroup, Usergroup %> | +
Users | +<%= edit_habtm @usergroup, User %> | +
<%= f.submit "Submit" %> |
+ <%= link_to "View All", usergroups_path %> +
diff --git a/app/views/usergroups/index.html.erb b/app/views/usergroups/index.html.erb new file mode 100644 index 0000000..e0439fa --- /dev/null +++ b/app/views/usergroups/index.html.erb @@ -0,0 +1,22 @@ +<% title "Usergroups" %> + +Name | +Users | +User Groups | ++ |
---|---|---|---|
<%= link_to h(usergroup.name), edit_usergroup_path(usergroup) %> | +<%= usergroup.users.map(&:login).to_sentence %> | +<%= usergroup.usergroups.map(&:name).to_sentence %> | ++ <%= link_to "Destroy", usergroup, :confirm => 'Are you sure?', :method => :delete %> + | +
<%= link_to "New Usergroup", new_usergroup_path %>
diff --git a/app/views/usergroups/new.html.erb b/app/views/usergroups/new.html.erb new file mode 100644 index 0000000..9d3465d --- /dev/null +++ b/app/views/usergroups/new.html.erb @@ -0,0 +1,5 @@ +<% title "New Usergroup" %> + +<%= render :partial => 'form' %> + +<%= link_to "Back to List", usergroups_path %>
diff --git a/app/views/usergroups/update.html.erb b/app/views/usergroups/update.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/config/initializers/foreman.rb b/config/initializers/foreman.rb index 7f37ca7..709a9fd 100644 --- a/config/initializers/foreman.rb +++ b/config/initializers/foreman.rb @@ -48,6 +48,11 @@ class ActiveRecord::Base end end end + + def id_and_type + "#{id}-#{self.class.table_name.humanize}" + end + end module ExemptedFromLogging diff --git a/config/routes.rb b/config/routes.rb index b24dbd7..90e1240 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ ActionController::Routing::Routes.draw do |map| + map.resources :usergroups map.root :controller => "hosts" map.connect "node/:name", :controller => 'hosts', :action => 'externalNodes', diff --git a/db/migrate/20100416124600_create_usergroups.rb b/db/migrate/20100416124600_create_usergroups.rb new file mode 100644 index 0000000..1cca3db --- /dev/null +++ b/db/migrate/20100416124600_create_usergroups.rb @@ -0,0 +1,17 @@ +class CreateUsergroups < ActiveRecord::Migration + def self.up + create_table :usergroups do |t| + t.string :name + t.timestamps + end + create_table :usergroup_members do |t| + t.references :member, :polymorphic => true + t.references :usergroup + end + end + + def self.down + drop_table :members + drop_table :usergroups + end +end diff --git a/db/migrate/20100419151910_add_owner_to_hosts.rb b/db/migrate/20100419151910_add_owner_to_hosts.rb new file mode 100644 index 0000000..4b7e41f --- /dev/null +++ b/db/migrate/20100419151910_add_owner_to_hosts.rb @@ -0,0 +1,18 @@ +class AddOwnerToHosts < ActiveRecord::Migration + def self.up + add_column :hosts, :owner_id, :integer + add_column :hosts, :owner_type, :string + + Host.reset_column_information + + updated = [] + owner = User.find_or_create_by_login(:login => "admin", :admin => true, :firstname => "Admin", :lastname => "User", :mail => "root@" + Facter.domain) + say "setting default owner for all hosts" + Host.update_all("owner_id = '#{owner.id}'") + end + + def self.down + remove_column :hosts, :owner_type + remove_column :hosts, :owner_id + end +end diff --git a/test/fixtures/usergroups.yml b/test/fixtures/usergroups.yml new file mode 100644 index 0000000..157d747 --- /dev/null +++ b/test/fixtures/usergroups.yml @@ -0,0 +1,7 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + +one: + name: MyString + +two: + name: MyString diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index ee59daa..86a4b60 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,18 +1,18 @@ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html one: - login: MyString - firstname: MyString - lastname: MyString + login: one + firstname: One + lastname: User mail: MyString admin: false last_login_on: 2009-10-12 21:50:04 auth_source_id: 1 two: - login: MyString - firstname: MyString - lastname: MyString + login: two + firstname: Two + lastname: User mail: MyString admin: false last_login_on: 2009-10-12 21:50:04 diff --git a/test/functional/architectures_controller_test.rb b/test/functional/architectures_controller_test.rb index 511c4bb..b82b9cc 100644 --- a/test/functional/architectures_controller_test.rb +++ b/test/functional/architectures_controller_test.rb @@ -2,47 +2,47 @@ require 'test_helper' class ArchitecturesControllerTest < ActionController::TestCase def test_index - get :index + get :index, {}, set_session_user assert_template 'index' end def test_new - get :new + get :new, {}, set_session_user assert_template 'new' end def test_create_invalid Architecture.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid Architecture.any_instance.stubs(:valid?).returns(true) - post :create + post :create, {}, set_session_user assert_redirected_to architectures_url end def test_edit - get :edit, :id => Architecture.first + get :edit, {:id => Architecture.first}, set_session_user assert_template 'edit' end def test_update_invalid Architecture.any_instance.stubs(:valid?).returns(false) - put :update, :id => Architecture.first + put :update, {:id => Architecture.first}, set_session_user assert_template 'edit' end def test_update_valid Architecture.any_instance.stubs(:valid?).returns(true) - put :update, :id => Architecture.first + put :update, {:id => Architecture.first}, set_session_user assert_redirected_to architectures_url end def test_destroy architecture = Architecture.first - delete :destroy, :id => architecture + delete :destroy, {:id => architecture}, set_session_user assert_redirected_to architectures_url assert !Architecture.exists?(architecture.id) end diff --git a/test/functional/audit_controller_test.rb b/test/functional/audit_controller_test.rb index 7e508b0..ea4aaee 100644 --- a/test/functional/audit_controller_test.rb +++ b/test/functional/audit_controller_test.rb @@ -2,13 +2,13 @@ require 'test_helper' class AuditControllerTest < ActionController::TestCase test "should get index" do - get :index + get :index, {}, set_session_user assert_response :success assert_not_nil assigns(:records) end test "should get search" do - get :show_search + get :show_search, {}, set_session_user assert_response :success end @@ -19,7 +19,7 @@ class AuditControllerTest < ActionController::TestCase audited_record = Audit.find_by_auditable_id(parameter.id) assert_not_nil audited_record - get :show, :id => audited_record.id + get :show, {:id => audited_record.id}, set_session_user assert_response :success end end diff --git a/test/functional/auth_source_ldaps_controller_test.rb b/test/functional/auth_source_ldaps_controller_test.rb index e3f9997..2833558 100644 --- a/test/functional/auth_source_ldaps_controller_test.rb +++ b/test/functional/auth_source_ldaps_controller_test.rb @@ -2,47 +2,47 @@ require 'test_helper' class AuthSourceLdapsControllerTest < ActionController::TestCase def test_index - get :index + get :index, {}, set_session_user assert_template 'index' end def test_new - get :new + get :new, {}, set_session_user assert_template 'new' end def test_create_invalid AuthSourceLdap.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid AuthSourceLdap.any_instance.stubs(:valid?).returns(true) - post :create + post :create, {}, set_session_user assert_redirected_to auth_source_ldaps_url end def test_edit - get :edit, :id => AuthSourceLdap.first + get :edit, {:id => AuthSourceLdap.first}, set_session_user assert_template 'edit' end def test_update_invalid AuthSourceLdap.any_instance.stubs(:valid?).returns(false) - put :update, :id => AuthSourceLdap.first + put :update, {:id => AuthSourceLdap.first}, set_session_user assert_template 'edit' end def test_update_valid AuthSourceLdap.any_instance.stubs(:valid?).returns(true) - put :update, :id => AuthSourceLdap.first + put :update, {:id => AuthSourceLdap.first}, set_session_user assert_redirected_to auth_source_ldaps_url end def test_destroy auth_source_ldap = AuthSourceLdap.first - delete :destroy, :id => auth_source_ldap + delete :destroy, {:id => auth_source_ldap}, set_session_user assert_redirected_to auth_source_ldaps_url assert !AuthSourceLdap.exists?(auth_source_ldap.id) end diff --git a/test/functional/common_parameters_controller_test.rb b/test/functional/common_parameters_controller_test.rb index e566539..a3c9c89 100644 --- a/test/functional/common_parameters_controller_test.rb +++ b/test/functional/common_parameters_controller_test.rb @@ -2,47 +2,47 @@ require 'test_helper' class CommonParametersControllerTest < ActionController::TestCase def test_index - get :index + get :index, {}, set_session_user assert_template 'index' end def test_new - get :new + get :new, {}, set_session_user assert_template 'new' end def test_create_invalid CommonParameter.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid CommonParameter.any_instance.stubs(:valid?).returns(true) - post :create + post :create, {}, set_session_user assert_redirected_to common_parameters_url end def test_edit - get :edit, :id => CommonParameter.first + get :edit, {:id => CommonParameter.first}, set_session_user assert_template 'edit' end def test_update_invalid CommonParameter.any_instance.stubs(:valid?).returns(false) - put :update, :id => CommonParameter.first + put :update, {:id => CommonParameter.first}, set_session_user assert_template 'edit' end def test_update_valid CommonParameter.any_instance.stubs(:valid?).returns(true) - put :update, :id => CommonParameter.first + put :update, {:id => CommonParameter.first}, set_session_user assert_redirected_to common_parameters_url end def test_destroy common_parameter = CommonParameter.first - delete :destroy, :id => common_parameter + delete :destroy, {:id => common_parameter}, set_session_user assert_redirected_to common_parameters_url assert !CommonParameter.exists?(common_parameter.id) end diff --git a/test/functional/dashboard_controller_test.rb b/test/functional/dashboard_controller_test.rb index 9b2afd4..260b661 100644 --- a/test/functional/dashboard_controller_test.rb +++ b/test/functional/dashboard_controller_test.rb @@ -2,24 +2,24 @@ require 'test_helper' class DashboardControllerTest < ActionController::TestCase test "should get index" do - get :index + get :index, {}, set_session_user assert_response :success end test "should get errors" do - get :errors + get :errors, {}, set_session_user assert_response :success assert_template :partial => "hosts/_minilist" end test "should get active" do - get :active + get :active, {}, set_session_user assert_response :success assert_template :partial => "hosts/_minilist" end test "should get out of sync" do - get :OutOfSync + get :OutOfSync, {}, set_session_user assert_response :success assert_template :partial => "hosts/_minilist" end diff --git a/test/functional/domains_controller_test.rb b/test/functional/domains_controller_test.rb index e5931f1..ad70109 100644 --- a/test/functional/domains_controller_test.rb +++ b/test/functional/domains_controller_test.rb @@ -2,47 +2,47 @@ require 'test_helper' class DomainsControllerTest < ActionController::TestCase def test_index - get :index + get :index, {}, set_session_user assert_template 'index' end def test_new - get :new + get :new, {}, set_session_user assert_template 'new' end def test_create_invalid Domain.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid Domain.any_instance.stubs(:valid?).returns(true) - post :create + post :create, {}, set_session_user assert_redirected_to domains_url end def test_edit - get :edit, :id => Domain.first + get :edit, {:id => Domain.first}, set_session_user assert_template 'edit' end def test_update_invalid Domain.any_instance.stubs(:valid?).returns(false) - put :update, :id => Domain.first + put :update, {:id => Domain.first}, set_session_user assert_template 'edit' end def test_update_valid Domain.any_instance.stubs(:valid?).returns(true) - put :update, :id => Domain.first + put :update, {:id => Domain.first}, set_session_user assert_redirected_to domains_url end def test_destroy domain = Domain.first - delete :destroy, :id => domain + delete :destroy, {:id => domain}, set_session_user assert_redirected_to domains_url assert !Domain.exists?(domain.id) end diff --git a/test/functional/environments_controller_test.rb b/test/functional/environments_controller_test.rb index f401f99..1e9fe62 100644 --- a/test/functional/environments_controller_test.rb +++ b/test/functional/environments_controller_test.rb @@ -7,19 +7,19 @@ class EnvironmentsControllerTest < ActionController::TestCase end test "should get index" do - get :index + get :index, {}, set_session_user assert_response :success assert_not_nil assigns(:records) end - test "shuold get new" do - get :new + test "should get new" do + get :new, {}, set_session_user assert_response :success end test "should create new environment" do assert_difference 'Environment.count' do - post :create, { :commit => "Create", :record => {:name => "some_environment"} } + post :create, { :commit => "Create", :record => {:name => "some_environment"} }, set_session_user end assert_redirected_to environments_path @@ -29,7 +29,7 @@ class EnvironmentsControllerTest < ActionController::TestCase environment = Environment.new :name => "some_environment" assert environment.save! - get :edit, :id => environment.id + get :edit, {:id => environment.id}, set_session_user assert_response :success end @@ -37,7 +37,7 @@ class EnvironmentsControllerTest < ActionController::TestCase environment = Environment.new :name => "some_environment" assert environment.save! - put :update, { :commit => "Update", :id => environment.id, :record => {:name => "other_environment"} } + put :update, { :commit => "Update", :id => environment.id, :record => {:name => "other_environment"} }, set_session_user environment = Environment.find_by_id(environment.id) assert environment.name == "other_environment" @@ -49,7 +49,7 @@ class EnvironmentsControllerTest < ActionController::TestCase assert environment.save! assert_difference('Environment.count', -1) do - delete :destroy, :id => environment.id + delete :destroy, {:id => environment.id}, set_session_user end assert_redirected_to environments_path diff --git a/test/functional/fact_values_controller_test.rb b/test/functional/fact_values_controller_test.rb index d0a1819..03f93b5 100644 --- a/test/functional/fact_values_controller_test.rb +++ b/test/functional/fact_values_controller_test.rb @@ -2,13 +2,13 @@ require 'test_helper' class FactValuesControllerTest < ActionController::TestCase test "should get list" do - get :list + get :list, {}, set_session_user assert_response :success assert_not_nil :records end test "should get list_filter" do - get :list_filter + get :list_filter, {}, set_session_user assert_response :found end end diff --git a/test/functional/home_controller_test.rb b/test/functional/home_controller_test.rb index 7c71fd0..4dd484f 100644 --- a/test/functional/home_controller_test.rb +++ b/test/functional/home_controller_test.rb @@ -2,7 +2,7 @@ require 'test_helper' class HomeControllerTest < ActionController::TestCase test "should get settings" do - get :settings + get :settings, {}, set_session_user assert_response :success end end diff --git a/test/functional/hostgroups_controller_test.rb b/test/functional/hostgroups_controller_test.rb index 9bd2b1d..4be39b1 100644 --- a/test/functional/hostgroups_controller_test.rb +++ b/test/functional/hostgroups_controller_test.rb @@ -2,48 +2,48 @@ require 'test_helper' class HostgroupsControllerTest < ActionController::TestCase def test_index - get :index + get :index, {}, set_session_user assert_template 'index' end def test_new - get :new + get :new, {}, set_session_user assert_template 'new' end def test_create_invalid Hostgroup.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid Hostgroup.any_instance.stubs(:valid?).returns(true) pc = Puppetclass.first - post :create, "hostgroup" => {"name"=>"test_it", "group_parameters_attributes"=>{"1272344174448"=>{"name"=>"x", "value"=>"y", "_destroy"=>""}}, "puppetclass_ids"=>["", pc.id.to_s]} + post :create, {"hostgroup" => {"name"=>"test_it", "group_parameters_attributes"=>{"1272344174448"=>{"name"=>"x", "value"=>"y", "_destroy"=>""}}, "puppetclass_ids"=>["", pc.id.to_s]}}, set_session_user assert_redirected_to hostgroups_url end def test_edit - get :edit, :id => Hostgroup.first + get :edit, {:id => Hostgroup.first}, set_session_user assert_template 'edit' end def test_update_invalid Hostgroup.any_instance.stubs(:valid?).returns(false) - put :update, :id => Hostgroup.first + put :update, {:id => Hostgroup.first}, set_session_user assert_template 'edit' end def test_update_valid Hostgroup.any_instance.stubs(:valid?).returns(true) - put :update, :id => Hostgroup.first + put :update, {:id => Hostgroup.first}, set_session_user assert_redirected_to hostgroups_url end def test_destroy hostgroup = Hostgroup.first - delete :destroy, :id => hostgroup + delete :destroy, {:id => hostgroup}, set_session_user assert_redirected_to hostgroups_url assert !Hostgroup.exists?(hostgroup.id) end diff --git a/test/functional/hosts_controller_test.rb b/test/functional/hosts_controller_test.rb index 63c783e..391dfd7 100644 --- a/test/functional/hosts_controller_test.rb +++ b/test/functional/hosts_controller_test.rb @@ -3,76 +3,102 @@ require 'test_helper' class HostsControllerTest < ActionController::TestCase setup :initialize_host - def test_index - get :index - assert_template 'index' - end - def test_show - get :show, :id => Host.first + get :show, {:id => Host.first}, set_session_user assert_template 'show' end - def test_new - get :new - assert_template 'new' - end - def test_create_invalid Host.any_instance.stubs(:valid?).returns(false) - post :create + post :create, {}, set_session_user assert_template 'new' end def test_create_valid Host.any_instance.stubs(:valid?).returns(true) - post :create, :host => {:name => "test"} - assert_redirected_to host_url(assigns(:host)) + post :create, {:host => {:name => "test"}}, set_session_user + assert_redirected_to host_url(assigns('host')) end - def test_edit - get :edit, :id => Host.first + test "should get index" do + get :index, {}, set_session_user + assert_response :success + assert_template 'index' + end + + test "should get new" do + get :new, {}, set_session_user + assert_response :success + assert_template 'new' + end + + test "should create new host" do + assert_difference 'Host.count' do + post :create, { :commit => "Create", + :host => {:name => "myotherfullhost", + :mac => "aabbecddee00", + :ip => "123.05.02.25", + :domain => Domain.find_or_create_by_name("othercompany.com"), + :operatingsystem => Operatingsystem.first, + :architecture => Architecture.first, + :environment => Environment.first, + :disk => "empty partition" + } + }, set_session_user + end + end + + test "should get edit" do + get :edit, {:id => @host.id}, set_session_user + assert_response :success assert_template 'edit' end + test "should update host" do + put :update, { :commit => "Update", :id => @host.id, :host => {:disk => "ntfs"} }, set_session_user + @host = Host.find_by_id(@host.id) + assert_equal @host.disk, "ntfs" + end + def test_update_invalid Host.any_instance.stubs(:valid?).returns(false) - put :update, :id => Host.first + put :update, {:id => Host.first}, set_session_user assert_template 'edit' end def test_update_valid Host.any_instance.stubs(:valid?).returns(true) - put :update, :id => Host.first + put :update, {:id => Host.first}, set_session_user assert_redirected_to host_url(assigns(:host)) end def test_destroy host = Host.first - delete :destroy, :id => host + delete :destroy, {:id => host}, set_session_user assert_redirected_to hosts_url assert !Host.exists?(host.id) end -test "externalNodes should render 404 when no params are given" do - get :externalNodes + + test "externalNodes should render 404 when no params are given" do + get :externalNodes, {}, set_session_user assert_response :missing assert_template :text => '404 Not Found' end test "externalNodes should render correctly when id is given" do - get :externalNodes, :id => @host.id + get :externalNodes, {:id => @host.id}, set_session_user assert_response :success assert_template :text => @host.info.to_yaml.gsub("\n","