Project

General

Profile

Download (13 KB) Statistics
| Branch: | Tag: | Revision:
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
@controller.prepend_view_path File.expand_path('../../static_fixtures', __FILE__)
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