foreman/test/controllers/hostgroups_controller_test.rb @ b5eca9b3
8ee44823 | José Luis Escalante | require 'test_helper'
|
|
d2b94562 | Timo Goebel | require 'pagelets_test_helper'
|
|
8ee44823 | José Luis Escalante | ||
class HostgroupsControllerTest < ActionController::TestCase
|
|||
d2b94562 | Timo Goebel | include PageletsIsolation
|
|
bd46fa41 | Ohad Levy | def test_index
|
|
d041d4bb | Dominic Cleal | get :index, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_template 'index'
|
|
8ee44823 | José Luis Escalante | end
|
|
bd46fa41 | Ohad Levy | def test_new
|
|
d041d4bb | Dominic Cleal | get :new, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_template 'new'
|
|
8ee44823 | José Luis Escalante | end
|
|
4d4b84f6 | Ohad Levy | def test_nest
|
|
d041d4bb | Dominic Cleal | get :nest, params: { :id => hostgroups(:common).id }, session: set_session_user
|
|
4d4b84f6 | Ohad Levy | assert_template 'new'
|
|
end
|
|||
bd46fa41 | Ohad Levy | def test_create_invalid
|
|
Hostgroup.any_instance.stubs(:valid?).returns(false)
|
|||
d041d4bb | Dominic Cleal | post :create, params: { :hostgroup => {:name => nil} }, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_template 'new'
|
|
8ee44823 | José Luis Escalante | end
|
|
bd46fa41 | Ohad Levy | def test_create_valid
|
|
Hostgroup.any_instance.stubs(:valid?).returns(true)
|
|||
pc = Puppetclass.first
|
|||
9d43fc71 | Michael Moll | post :create, params: { :hostgroup => {:name => "test_it", :group_parameters_attributes => {"1272344174448" => {:name => "x", :value => "y", :_destroy => ""}},
|
|
:puppetclass_ids => ["", pc.id.to_s], :realm_id => realms(:myrealm).id} }, session: set_session_user
|
|||
bd46fa41 | Ohad Levy | assert_redirected_to hostgroups_url
|
|
8ee44823 | José Luis Escalante | end
|
|
4899723c | Ohad Levy | def test_clone
|
|
d041d4bb | Dominic Cleal | get :clone, params: { :id => hostgroups(:common) }, session: set_session_user
|
|
4899723c | Ohad Levy | assert_template 'new'
|
|
end
|
|||
bd46fa41 | Ohad Levy | def test_edit
|
|
d041d4bb | Dominic Cleal | get :edit, params: { :id => hostgroups(:common) }, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_template 'edit'
|
|
end
|
|||
8ee44823 | José Luis Escalante | ||
bd46fa41 | Ohad Levy | def test_update_invalid
|
|
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroups(:common), :hostgroup => { :name => '' } }, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_template 'edit'
|
|
8ee44823 | José Luis Escalante | end
|
|
bd46fa41 | Ohad Levy | def test_update_valid
|
|
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroups(:common), :hostgroup => { :name => hostgroups(:common).name } }, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_redirected_to hostgroups_url
|
|
end
|
|||
8ee44823 | José Luis Escalante | ||
bd46fa41 | Ohad Levy | def test_destroy
|
|
4d4b84f6 | Ohad Levy | hostgroup = hostgroups(:unusual)
|
|
d041d4bb | Dominic Cleal | delete :destroy, params: { :id => hostgroup.id }, session: set_session_user
|
|
bd46fa41 | Ohad Levy | assert_redirected_to hostgroups_url
|
|
assert !Hostgroup.exists?(hostgroup.id)
|
|||
8ee44823 | José Luis Escalante | end
|
|
9fd7478e | Paul Kelly | ||
5f029ed6 | Daniel Lobato | def setup_user(operation, type = 'hostgroups')
|
|
acfbc458 | Marek Hulan | super
|
|
9fd7478e | Paul Kelly | end
|
|
test 'user with viewer rights should fail to edit a hostgroup ' do
|
|||
7d8c71bc | Daniel Lobato | setup_user "view"
|
|
d041d4bb | Dominic Cleal | get :edit, params: { :id => hostgroups(:common).id }, session: set_session_user.merge(:user => users(:one).id)
|
|
5f606e11 | Daniel Lobato Garcia | assert_response :forbidden
|
|
9fd7478e | Paul Kelly | end
|
|
test 'user with viewer rights should succeed in viewing hostgroups' do
|
|||
7d8c71bc | Daniel Lobato | setup_user "view"
|
|
d041d4bb | Dominic Cleal | get :index, session: set_session_user.merge(:user => users(:one).id)
|
|
9fd7478e | Paul Kelly | assert_response :success
|
|
end
|
|||
16ce9a7a | Daniel Lobato | ||
6d728e55 | amirfefer | test 'csv export works' do
|
|
8c6bc83e | Marek Hulan | host = FactoryBot.create(:host, :with_hostgroup)
|
|
d041d4bb | Dominic Cleal | get :index, params: { :format => 'csv' }, session: set_session_user
|
|
6d728e55 | amirfefer | assert_response :success
|
|
7240462c | Tomer Brisker | assert response.body.include? "#{host.hostgroup.title},1,1"
|
|
6d728e55 | amirfefer | end
|
|
2348fc8e | amirfefer | test "hostgroup update without root password in the params does not erase existing password" do
|
|
3595a70c | Joseph Mitchell Magen | hostgroup = hostgroups(:common)
|
|
old_root_pass = hostgroup.root_pass
|
|||
as_admin do
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :commit => "Update", :id => hostgroup.id, :hostgroup => {:name => hostgroup.name} }, session: set_session_user
|
|
3595a70c | Joseph Mitchell Magen | end
|
|
hostgroup = Hostgroup.find(hostgroup.id)
|
|||
assert_equal old_root_pass, hostgroup.root_pass
|
|||
end
|
|||
2348fc8e | amirfefer | test 'blank root password submitted does erase existing password' do
|
|
hostgroup = hostgroups(:common)
|
|||
as_admin do
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :commit => "Update", :id => hostgroup.id, :hostgroup => {:root_pass => '', :name => hostgroup.name} }, session: set_session_user
|
|
2348fc8e | amirfefer | end
|
|
hostgroup = Hostgroup.find(hostgroup.id)
|
|||
assert hostgroup.root_pass.empty?
|
|||
end
|
|||
709ad8d6 | Joseph Magen | test "hostgroup rename changes matcher" do
|
|
hostgroup = hostgroups(:common)
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroup.id, :hostgroup => {:name => 'new_common'} }, session: set_session_user
|
|
709ad8d6 | Joseph Magen | assert_equal 'hostgroup=new_common', lookup_values(:hostgroupcommon).match
|
|
assert_equal 'hostgroup=new_common', lookup_values(:four).match
|
|||
end
|
|||
test "hostgroup rename changes matcher" do
|
|||
hostgroup = hostgroups(:common)
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroup.id, :hostgroup => {:name => 'new_common'} }, session: set_session_user
|
|
709ad8d6 | Joseph Magen | assert_equal 'hostgroup=new_common', lookup_values(:hostgroupcommon).match
|
|
assert_equal 'hostgroup=new_common', lookup_values(:four).match
|
|||
end
|
|||
test "hostgroup rename of parent changes matcher of parent and child hostgroup" do
|
|||
hostgroup = hostgroups(:parent)
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroup.id, :hostgroup => {:name => 'new_parent'} }, session: set_session_user
|
|
709ad8d6 | Joseph Magen | assert_equal 'hostgroup=new_parent', lookup_values(:five).match
|
|
assert_equal 'hostgroup=new_parent/inherited', lookup_values(:six).match
|
|||
end
|
|||
test "hostgroup rename of child only changes matcher of child hostgroup" do
|
|||
hostgroup = hostgroups(:inherited)
|
|||
d041d4bb | Dominic Cleal | put :update, params: { :id => hostgroup.id, :hostgroup => {:name => 'new_child'} }, session: set_session_user
|
|
709ad8d6 | Joseph Magen | assert_equal 'hostgroup=Parent/new_child', lookup_values(:six).match
|
|
end
|
|||
e1aec1dc | Tomer Brisker | ||
test "domain_selected should return subnets" do
|
|||
8c6bc83e | Marek Hulan | domain = FactoryBot.create(:domain)
|
|
subnet = FactoryBot.create(:subnet_ipv4)
|
|||
e1aec1dc | Tomer Brisker | domain.subnets << subnet
|
|
domain.save
|
|||
8decba41 | Dominic Cleal | post :domain_selected, params: {:id => hostgroups(:common), :hostgroup => {}, :domain_id => domain.id, :format => :json}, session: set_session_user, xhr: true
|
|
f4459c11 | David Davis | assert_equal subnet.name, JSON.parse(response.body)[0]["subnet"]["name"]
|
|
79c0664a | Timo Goebel | assert_equal subnet.unused_ip.suggest_new?, JSON.parse(response.body)[0]["subnet"]["unused_ip"]["suggest_new"]
|
|
e1aec1dc | Tomer Brisker | end
|
|
test "domain_selected should return empty on no domain_id" do
|
|||
8decba41 | Dominic Cleal | post :domain_selected, params: {:id => hostgroups(:common), :hostgroup => {}, :format => :json, :domain_id => nil}, session: set_session_user, xhr: true
|
|
e1aec1dc | Tomer Brisker | assert_response :success
|
|
assert_empty JSON.parse(response.body)
|
|||
end
|
|||
test "architecture_selected should not fail when no architecture selected" do
|
|||
5cbba9ec | Tomer Brisker | post :architecture_selected, params: { :id => hostgroups(:common), :hostgroup => { :architecture_id => nil }}, session: set_session_user
|
|
e1aec1dc | Tomer Brisker | assert_response :success
|
|
assert_template :partial => "common/os_selection/_architecture"
|
|||
end
|
|||
915ee077 | Sebastian Gräßl | describe '#environment_selected' do
|
|
setup do
|
|||
8c6bc83e | Marek Hulan | @environment = FactoryBot.create(:environment)
|
|
@puppetclass = FactoryBot.create(:puppetclass)
|
|||
@hostgroup = FactoryBot.create(:hostgroup, :environment => @environment)
|
|||
915ee077 | Sebastian Gräßl | @params = {
|
|
id: @hostgroup.id,
|
|||
hostgroup: {
|
|||
name: @hostgroup.name,
|
|||
environment_id: "",
|
|||
puppetclass_ids: [@puppetclass.id]
|
|||
}
|
|||
}
|
|||
end
|
|||
test "should return the selected puppet classes on environment change" do
|
|||
assert_equal 0, @hostgroup.puppetclasses.length
|
|||
d041d4bb | Dominic Cleal | post :environment_selected, params: @params, session: set_session_user
|
|
ee360810 | Michael Moll | assert_equal(1, assigns(:hostgroup).puppetclasses.length)
|
|
915ee077 | Sebastian Gräßl | assert_include assigns(:hostgroup).puppetclasses, @puppetclass
|
|
end
|
|||
context 'no environment_id param is set' do
|
|||
test 'it will take the hostgroup params environment_id' do
|
|||
8c6bc83e | Marek Hulan | other_environment = FactoryBot.create(:environment)
|
|
915ee077 | Sebastian Gräßl | @params[:hostgroup][:environment_id] = other_environment.id
|
|
d041d4bb | Dominic Cleal | post :environment_selected, params: @params, session: set_session_user
|
|
915ee077 | Sebastian Gräßl | assert_equal assigns(:environment), other_environment
|
|
end
|
|||
end
|
|||
265e1d98 | orrabin | ||
test 'should not escape lookup values on environment change' do
|
|||
630061d2 | Michael Moll | hostgroup = FactoryBot.create(:hostgroup, :environment => @environment, :puppetclass_ids => [@puppetclass.id])
|
|
265e1d98 | orrabin | lookup_key = FactoryBot.create(:puppetclass_lookup_key, :as_smart_class_param, :key_type => 'array',
|
|
3cd8c84b | Michael Moll | :default_value => ['a', 'b'], :override => true, :puppetclass => @puppetclass)
|
|
265e1d98 | orrabin | lookup_value = FactoryBot.create(:lookup_value, :lookup_key => lookup_key, :match => "hostgroup=#{hostgroup.name}", :value => ["c", "d"])
|
|
FactoryBot.create(:environment_class, :puppetclass => @puppetclass, :environment => @environment, :puppetclass_lookup_key => lookup_key)
|
|||
# sending exactly what the host form would send which is lookup_value.value_before_type_cast
|
|||
9d43fc71 | Michael Moll | lk = {"lookup_values_attributes" => {lookup_key.id.to_s => {"value" => lookup_value.value_before_type_cast, "id" => lookup_value.id, "lookup_key_id" => lookup_key.id, "_destroy" => false}}}
|
|
265e1d98 | orrabin | ||
params = {
|
|||
hostgroup_id: hostgroup.id,
|
|||
hostgroup: hostgroup.attributes.merge(lk)
|
|||
}
|
|||
# environment change calls puppetclass_parameters which caused the extra escaping
|
|||
post :puppetclass_parameters, params: params, session: set_session_user, xhr: true
|
|||
# if this was escaped during refresh_host the value in response.body after unescapeHTML would include "[\\\"c\\\",\\\"d\\\"]"
|
|||
assert_includes CGI.unescapeHTML(response.body), "[\"c\",\"d\"]"
|
|||
end
|
|||
8b98d8e0 | Ondrej Prazak | end
|
|
221fd050 | Tom Caspy | ||
c7f55be1 | Ori Rabin | test 'user with view_params rights should see parameters in a hostgroup' do
|
|
8c6bc83e | Marek Hulan | hg = FactoryBot.create(:hostgroup, :with_parameter)
|
|
c7f55be1 | Ori Rabin | setup_user "edit"
|
|
setup_user "view", "params"
|
|||
d041d4bb | Dominic Cleal | get :edit, params: { :id => hg.id }, session: set_session_user.merge(:user => users(:one).id)
|
|
1991ee8e | June Zhang | assert_not_nil response.body['Global Parameters']
|
|
c7f55be1 | Ori Rabin | end
|
|
test 'user without view_params rights should not see parameters in a hostgroup' do
|
|||
8c6bc83e | Marek Hulan | hg = FactoryBot.create(:hostgroup, :with_parameter)
|
|
8dcc90be | Marek Hulán | setup_user "edit"
|
|
d041d4bb | Dominic Cleal | get :edit, params: { :id => hg.id }, session: set_session_user.merge(:user => users(:one).id)
|
|
1991ee8e | June Zhang | assert_nil response.body['Global Parameters']
|
|
c7f55be1 | Ori Rabin | end
|
|
221fd050 | Tom Caspy | describe "parent attributes" do
|
|
before do
|
|||
8c6bc83e | Marek Hulan | @base = FactoryBot.create(:hostgroup)
|
|
221fd050 | Tom Caspy | @base.group_parameters << GroupParameter.create(:name => "x", :value => "original")
|
|
@base.group_parameters << GroupParameter.create(:name => "y", :value => "originally")
|
|||
e282ff7b | Ori Rabin | Hostgroup.any_instance.stubs(:valid?).returns(true)
|
|
221fd050 | Tom Caspy | end
|
|
it "creates a hostgroup with a parent parameter" do
|
|||
9d43fc71 | Michael Moll | post :create, params: { "hostgroup" => {"name" => "test_it", "parent_id" => @base.id, :realm_id => realms(:myrealm).id,
|
|
:group_parameters_attributes => {"0" => {:name => "x", :value => "overridden", :_destroy => ""}}} }, session: set_session_user
|
|||
221fd050 | Tom Caspy | assert_redirected_to hostgroups_url
|
|
5f606e11 | Daniel Lobato Garcia | hostgroup = Hostgroup.unscoped.where(:name => "test_it").last
|
|
as_admin do
|
|||
assert_equal "overridden", hostgroup.parameters["x"]
|
|||
end
|
|||
221fd050 | Tom Caspy | end
|
|
it "updates a hostgroup with a parent parameter" do
|
|||
8c6bc83e | Marek Hulan | child = FactoryBot.create(:hostgroup, :parent => @base)
|
|
c7f55be1 | Ori Rabin | as_admin do
|
|
assert_equal "original", child.parameters["x"]
|
|||
end
|
|||
d041d4bb | Dominic Cleal | post :update, params: { "id" => child.id, "hostgroup" => {"name" => child.name,
|
|
9d43fc71 | Michael Moll | :group_parameters_attributes => {"0" => {:name => "x", :value => "overridden", :_destroy => ""}}} }, session: set_session_user
|
|
221fd050 | Tom Caspy | assert_redirected_to hostgroups_url
|
|
5f606e11 | Daniel Lobato Garcia | as_admin do
|
|
child.reload
|
|||
assert_equal "overridden", child.parameters["x"]
|
|||
end
|
|||
221fd050 | Tom Caspy | end
|
|
e282ff7b | Ori Rabin | it "updates a hostgroup with a parent parameter, allows empty values" do
|
|
8c6bc83e | Marek Hulan | child = FactoryBot.create(:hostgroup, :parent => @base)
|
|
c7f55be1 | Ori Rabin | as_admin do
|
|
assert_equal "original", child.parameters["x"]
|
|||
end
|
|||
d041d4bb | Dominic Cleal | post :update, params: { "id" => child.id, "hostgroup" => {"name" => child.name,
|
|
d6ebd69f | Dominic Cleal | :group_parameters_attributes => {"0" => {:name => "x", :value => "", :_destroy => ""},
|
|
d041d4bb | Dominic Cleal | "1" => {:name => "y", :value => "overridden", :_destroy => ""}}} }, session: set_session_user
|
|
221fd050 | Tom Caspy | assert_redirected_to hostgroups_url
|
|
5f606e11 | Daniel Lobato Garcia | as_admin do
|
|
child.reload
|
|||
assert_equal "overridden", child.parameters["y"]
|
|||
assert_equal "", child.parameters["x"]
|
|||
end
|
|||
221fd050 | Tom Caspy | end
|
|
43860d6e | Ori Rabin | ||
it "changes the hostgroup's parent and check the parameters are updated" do
|
|||
8c6bc83e | Marek Hulan | child = FactoryBot.create(:hostgroup, :parent => @base)
|
|
c7f55be1 | Ori Rabin | as_admin do
|
|
assert_equal "original", child.parameters["x"]
|
|||
end
|
|||
43860d6e | Ori Rabin | ||
8c6bc83e | Marek Hulan | new_parent = FactoryBot.create(:hostgroup)
|
|
43860d6e | Ori Rabin | new_parent.group_parameters << GroupParameter.create(:name => "z", :value => "original")
|
|
d041d4bb | Dominic Cleal | post :update, params: { "id" => child.id, "hostgroup" => {"name" => child.name, "parent_id" => new_parent.id} }, session: set_session_user
|
|
43860d6e | Ori Rabin | ||
assert_redirected_to hostgroups_url
|
|||
child.reload
|
|||
c7f55be1 | Ori Rabin | as_admin do
|
|
assert_equal "original", child.parameters["z"]
|
|||
edd5310f | Dominic Cleal | assert_nil child.parameters["x"]
|
|
c7f55be1 | Ori Rabin | end
|
|
43860d6e | Ori Rabin | end
|
|
221fd050 | Tom Caspy | end
|
|
d2b94562 | Timo Goebel | ||
context 'with pagelets' do
|
|||
setup do
|
|||
b5eca9b3 | Michael Moll | @controller.prepend_view_path File.expand_path('../static_fixtures', __dir__)
|
|
d2b94562 | Timo Goebel | Pagelets::Manager.add_pagelet('hostgroups/_form', :main_tabs,
|
|
:name => 'TestTab',
|
|||
:id => 'my-special-id',
|
|||
:partial => 'views/test')
|
|||
end
|
|||
test '#new renders a pagelet tab' do
|
|||
d041d4bb | Dominic Cleal | get :new, session: set_session_user
|
|
d2b94562 | Timo Goebel | assert @response.body.match /id='my-special-id'/
|
|
end
|
|||
test '#edit renders a pagelet tab' do
|
|||
d041d4bb | Dominic Cleal | get :edit, params: { :id => Hostgroup.first.to_param }, session: set_session_user
|
|
d2b94562 | Timo Goebel | assert @response.body.match /id='my-special-id'/
|
|
end
|
|||
end
|
|||
8ee44823 | José Luis Escalante | end
|