foreman/test/controllers/environments_controller_test.rb @ 9d43fc71
6e50fa1d | Ohad Levy | require 'test_helper'
|
|
class EnvironmentsControllerTest < ActionController::TestCase
|
|||
fa383aa2 | Stephen Benjamin | setup do
|
|
@model = Environment.first
|
|||
end
|
|||
d6c08a7a | Daniel Lobato | basic_index_test
|
|
basic_new_test
|
|||
fa383aa2 | Stephen Benjamin | basic_edit_test
|
|
a154c816 | lizagilman | basic_pagination_per_page_test
|
|
basic_pagination_rendered_test
|
|||
8d9dc8b0 | Lucas Tolchinsky | ||
test "should create new environment" do
|
|||
5f606e11 | Daniel Lobato Garcia | assert_difference 'Environment.unscoped.count' do
|
|
d041d4bb | Dominic Cleal | post :create, params: { :commit => "Create", :environment => {:name => "some_environment"} }, session: set_session_user
|
|
8d9dc8b0 | Lucas Tolchinsky | end
|
|
assert_redirected_to environments_path
|
|||
end
|
|||
test "should update environment" do
|
|||
68234aea | Ivan Necas | setup_users
|
|
977384e0 | Lucas Tolchinsky | environment = Environment.new :name => "some_environment"
|
|
8d9dc8b0 | Lucas Tolchinsky | assert environment.save!
|
|
d041d4bb | Dominic Cleal | put :update, params: { :commit => "Update", :id => environment.name, :environment => {:name => "other_environment"} }, session: set_session_user
|
|
5f606e11 | Daniel Lobato Garcia | env = Environment.unscoped.find(environment.id)
|
|
0c96d0bf | Ohad Levy | assert env.name == "other_environment"
|
|
8d9dc8b0 | Lucas Tolchinsky | ||
assert_redirected_to environments_path
|
|||
end
|
|||
test "should destroy environment" do
|
|||
68234aea | Ivan Necas | setup_users
|
|
977384e0 | Lucas Tolchinsky | environment = Environment.new :name => "some_environment"
|
|
8d9dc8b0 | Lucas Tolchinsky | assert environment.save!
|
|
5f606e11 | Daniel Lobato Garcia | assert_difference('Environment.unscoped.count', -1) do
|
|
d041d4bb | Dominic Cleal | delete :destroy, params: { :id => environment.name }, session: set_session_user
|
|
8d9dc8b0 | Lucas Tolchinsky | end
|
|
assert_redirected_to environments_path
|
|||
6e50fa1d | Ohad Levy | end
|
|
adcd0374 | Paul Kelly | ||
bb9a1ad1 | Paul Kelly | def setup_import_classes
|
|
7d1d44cf | Joseph Mitchell Magen | as_admin do
|
|
Host::Managed.update_all(:environment_id => nil)
|
|||
Hostgroup.update_all(:environment_id => nil)
|
|||
Puppetclass.destroy_all
|
|||
Environment.destroy_all
|
|||
end
|
|||
adcd0374 | Paul Kelly | @request.env["HTTP_REFERER"] = environments_url
|
|
bb9a1ad1 | Paul Kelly | # This is the database status
|
|
# and should result in a db_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"]}
|
|||
273f928c | Ondřej Pražák | orgs = [taxonomies(:organization1)]
|
|
locs = [taxonomies(:location1)]
|
|||
4e7b2b98 | Paul Kelly | as_admin do
|
|
8c6bc83e | Marek Hulan | klasses = ["a", "b", "c"].map { |name| FactoryBot.create :puppetclass, :name => name }
|
|
273f928c | Ondřej Pražák | ["env1", "env2"].each do |name|
|
|
8c6bc83e | Marek Hulan | env = FactoryBot.create :environment, :name => name, :organizations => orgs, :locations => locs
|
|
273f928c | Ondřej Pražák | env.puppetclasses += klasses
|
|
bb9a1ad1 | Paul Kelly | end
|
|
4e7b2b98 | Paul Kelly | end
|
|
bb9a1ad1 | Paul Kelly | # This is the on-disk status
|
|
# and should result in a disk_tree of {"env1" => ["a", "b", "c"],"env2" => ["a", "b", "c"]}
|
|||
a989a617 | Ohad Levy | envs = HashWithIndifferentAccess.new(:env1 => %w{a b c}, :env2 => %w{a b c})
|
|
9d43fc71 | Michael Moll | pcs = [HashWithIndifferentAccess.new("a" => { "name" => "a", "module" => "", "params" => {}})]
|
|
f8d94608 | Amos Benari | classes = Hash[pcs.map { |k| [k.keys.first, Foreman::ImporterPuppetclass.new(k.values.first)] }]
|
|
Environment.expects(:puppetEnvs).returns(envs).at_least(0)
|
|||
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(["env1", "env2"])
|
|||
ProxyAPI::Puppet.any_instance.stubs(:classes).returns(classes)
|
|||
adcd0374 | Paul Kelly | end
|
|
c791180e | Ondřej Pražák | test "should import as admin when organization changed" do
|
|
setup_import_classes
|
|||
Organization.current = taxonomies(:organization2)
|
|||
d041d4bb | Dominic Cleal | post :obsolete_and_new, params:
|
|
{ "changed" =>
|
|||
c791180e | Ondřej Pražák | {"new" =>
|
|
{"env1" => '{"a":{"new":{}}}'}
|
|||
}
|
|||
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
c791180e | Ondřej Pražák | assert_redirected_to environments_url
|
|
end
|
|||
bb9a1ad1 | Paul Kelly | test "should handle disk environment containing additional classes" do
|
|
setup_import_classes
|
|||
Environment.find_by_name("env1").puppetclasses.delete(Puppetclass.find_by_name("a"))
|
|||
ffedb85d | Tomer Brisker | # db_tree of {"env1" => ["b", "c"], "env2" => ["a", "b", "c"]}
|
|
# disk_tree of {"env1" => ["a", "b", "c"],"env2" => ["a", "b", "c"]}
|
|||
d041d4bb | Dominic Cleal | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster) }, session: set_session_user
|
|
445dd7ab | Daniel Lobato | assert_template "common/_puppetclasses_or_envs_changed"
|
|
f8d94608 | Amos Benari | assert_select 'input#changed_new_env1'
|
|
d041d4bb | Dominic Cleal | post :obsolete_and_new, params:
|
|
{ "changed" =>
|
|||
bb9a1ad1 | Paul Kelly | {"new" =>
|
|
f8d94608 | Amos Benari | {"env1" => '{"a":{"new":{}}}'}
|
|
bb9a1ad1 | Paul Kelly | }
|
|
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
bb9a1ad1 | Paul Kelly | assert_redirected_to environments_url
|
|
cf94f62e | Avi Sharvit | assert_equal "Successfully updated environments and Puppet classes from the on-disk Puppet installation", flash[:success]
|
|
5f606e11 | Daniel Lobato Garcia | assert_equal ["a", "b", "c"],
|
|
Environment.unscoped.find_by_name("env1").puppetclasses.map(&:name).sort
|
|||
bb9a1ad1 | Paul Kelly | end
|
|
8387eb79 | Shlomi Zadok | ||
bb9a1ad1 | Paul Kelly | test "should handle disk environment containing less classes" do
|
|
setup_import_classes
|
|||
as_admin {Puppetclass.create(:name => "d")}
|
|||
Environment.find_by_name("env1").puppetclasses << Puppetclass.find_by_name("d")
|
|||
68388bc2 | Michael Moll | # db_tree of {"env1" => ["a", "b", "c", "d"], "env2" => ["a", "b", "c"]}
|
|
# disk_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"]}
|
|||
d041d4bb | Dominic Cleal | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster) }, session: set_session_user
|
|
445dd7ab | Daniel Lobato | assert_template "common/_puppetclasses_or_envs_changed"
|
|
bb9a1ad1 | Paul Kelly | assert_select 'input#changed_obsolete_env1[value*="d"]'
|
|
post :obsolete_and_new,
|
|||
d041d4bb | Dominic Cleal | params: { "changed" =>
|
|
bb9a1ad1 | Paul Kelly | {"obsolete" =>
|
|
{"env1" => '["d"]'}
|
|||
}
|
|||
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
bb9a1ad1 | Paul Kelly | assert_redirected_to environments_url
|
|
cf94f62e | Avi Sharvit | assert_equal "Successfully updated environments and Puppet classes from the on-disk Puppet installation", flash[:success]
|
|
5f606e11 | Daniel Lobato Garcia | envs = Environment.unscoped.find_by_name("env1").puppetclasses.map(&:name).sort
|
|
assert_equal ["a", "b", "c"], envs
|
|||
bb9a1ad1 | Paul Kelly | end
|
|
test "should handle disk environment containing less environments" do
|
|||
setup_import_classes
|
|||
as_admin {Environment.create(:name => "env3")}
|
|||
68388bc2 | Michael Moll | # db_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"], "env3" => []}
|
|
# disk_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"]}
|
|||
d041d4bb | Dominic Cleal | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster).id }, session: set_session_user
|
|
445dd7ab | Daniel Lobato | assert_template "common/_puppetclasses_or_envs_changed"
|
|
bb9a1ad1 | Paul Kelly | assert_select 'input#changed_obsolete_env3'
|
|
d041d4bb | Dominic Cleal | post :obsolete_and_new, params:
|
|
{ "changed" =>
|
|||
bb9a1ad1 | Paul Kelly | {"obsolete" =>
|
|
{"env3" => '[]'}
|
|||
}
|
|||
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
bb9a1ad1 | Paul Kelly | assert_redirected_to environments_url
|
|
cf94f62e | Avi Sharvit | assert_equal "Successfully updated environments and Puppet classes from the on-disk Puppet installation", flash[:success]
|
|
5f606e11 | Daniel Lobato Garcia | assert_equal [], Environment.unscoped.find_by_name("env3").puppetclasses.map(&:name).sort
|
|
adcd0374 | Paul Kelly | end
|
|
test "should fail to remove active environments" do
|
|||
d076d573 | Joseph Mitchell Magen | disable_orchestration
|
|
bb9a1ad1 | Paul Kelly | setup_import_classes
|
|
4e7b2b98 | Paul Kelly | as_admin do
|
|
8c6bc83e | Marek Hulan | host = FactoryBot.create(:host)
|
|
7d1d44cf | Joseph Mitchell Magen | Environment.find_by_name("env1").puppetclasses += [puppetclasses(:one)]
|
|
793072c5 | Joseph Mitchell Magen | host.environment_id = Environment.find_by_name("env1").id
|
|
assert host.save!
|
|||
bb9a1ad1 | Paul Kelly | assert host.errors.empty?
|
|
assert Environment.find_by_name("env1").hosts.count > 0
|
|||
4e7b2b98 | Paul Kelly | end
|
|
f8d94608 | Amos Benari | ||
bb9a1ad1 | Paul Kelly | # assert_template "puppetclasses_or_envs_changed". This assertion will fail. And it should fail. See above.
|
|
d041d4bb | Dominic Cleal | post :obsolete_and_new, params:
|
|
9d43fc71 | Michael Moll | { "changed" =>
|
|
5f606e11 | Daniel Lobato Garcia | {"obsolete" =>
|
|
630061d2 | Michael Moll | {"env1" => '["a","b","c","_destroy_"]'}
|
|
5f606e11 | Daniel Lobato Garcia | }
|
|
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
5f606e11 | Daniel Lobato Garcia | assert Environment.unscoped.find_by_name("env1").hosts.count > 0
|
|
68388bc2 | Michael Moll | # assert flash[:error] =~ /^Failed to update the environments and puppetclasses from the on-disk puppet installation/
|
|
5f606e11 | Daniel Lobato Garcia | assert Environment.unscoped.find_by_name("env1")
|
|
adcd0374 | Paul Kelly | end
|
|
bb9a1ad1 | Paul Kelly | test "should obey config/ignored_environments.yml" do
|
|
adcd0374 | Paul Kelly | @request.env["HTTP_REFERER"] = environments_url
|
|
bb9a1ad1 | Paul Kelly | setup_import_classes
|
|
as_admin do
|
|||
Environment.create :name => "env3"
|
|||
7d1d44cf | Joseph Mitchell Magen | Environment.find_by_name("env2").destroy
|
|
bb9a1ad1 | Paul Kelly | end
|
|
68388bc2 | Michael Moll | # db_tree of {"env1" => ["a", "b", "c"], "env3" => []}
|
|
# disk_tree of {"env1" => ["a", "b", "c"], "env2" => ["a", "b", "c"]}
|
|||
41d40698 | Paul Kelly | ||
3cd8c84b | Michael Moll | PuppetClassImporter.any_instance.stubs(:ignored_environments).returns(["env1", "env2", "env3"])
|
|
d041d4bb | Dominic Cleal | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster) }, session: set_session_user
|
|
41d40698 | Paul Kelly | ||
cf94f62e | Avi Sharvit | assert_equal "No changes to your environments detected\nIgnored environments: env1, env2, and env3", flash[:info]
|
|
eb0834f5 | Sebastian Gräßl | end
|
|
test "should obey puppet class filters in config/ignored_environments.yml" do
|
|||
setup_import_classes
|
|||
PuppetClassImporter.any_instance.stubs(:updated_classes_for).returns([])
|
|||
PuppetClassImporter.any_instance.stubs(:removed_classes_for).returns([])
|
|||
PuppetClassImporter.any_instance.stubs(:ignored_environments).returns([])
|
|||
PuppetClassImporter.any_instance.stubs(:ignored_classes).returns([/^a$/])
|
|||
d041d4bb | Dominic Cleal | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster) }, session: set_session_user
|
|
eb0834f5 | Sebastian Gräßl | ||
cf94f62e | Avi Sharvit | assert_equal "No changes to your environments detected\nIgnored classes in the environments: env1 and env2", flash[:info]
|
|
eb0834f5 | Sebastian Gräßl | end
|
|
test 'it adds a warning when boolean keys are found' do
|
|||
68b3c50d | Tomer Brisker | setup_import_classes
|
|
PuppetClassImporter.any_instance.stubs(:ignored_environments).returns([true])
|
|||
eb0834f5 | Sebastian Gräßl | ||
68b3c50d | Tomer Brisker | get :import_environments, params: { :proxy => smart_proxies(:puppetmaster) }, session: set_session_user
|
|
assert_equal "Ignored environment names resulting in booleans found. Please quote strings like true/false and yes/no in config/ignored_environments.yml", flash[:warning]
|
|||
41d40698 | Paul Kelly | end
|
|
9fd7478e | Paul Kelly | ||
def setup_user
|
|||
@request.session[:user] = users(:one).id
|
|||
a2b3be55 | Tomer Brisker | users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
|
|
9fd7478e | Paul Kelly | end
|
|
test 'user with viewer rights should fail to edit an environment' do
|
|||
setup_user
|
|||
d041d4bb | Dominic Cleal | get :edit, params: { :id => environments(:production).name }, session: set_session_user.merge(:user => users(:one).id)
|
|
017e1049 | Ohad Levy | assert_equal @response.status, 403
|
|
9fd7478e | Paul Kelly | end
|
|
test 'user with viewer rights should succeed in viewing environments' do
|
|||
setup_user
|
|||
d041d4bb | Dominic Cleal | get :index, session: set_session_user
|
|
9fd7478e | Paul Kelly | assert_response :success
|
|
end
|
|||
8387eb79 | Shlomi Zadok | ||
test "should accept environment with name 'name'" do
|
|||
@request.env["HTTP_REFERER"] = environments_url
|
|||
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(["new"])
|
|||
d041d4bb | Dominic Cleal | post :obsolete_and_new, params:
|
|
{ "changed" =>
|
|||
5f606e11 | Daniel Lobato Garcia | {"new" =>
|
|
{"new" => '{"a":{"new":{}}}'}
|
|||
}
|
|||
d041d4bb | Dominic Cleal | }, session: set_session_user
|
|
5f606e11 | Daniel Lobato Garcia | assert(Environment.unscoped.all.map(&:name).include?('new'), 'Should include environment with name "new"')
|
|
8387eb79 | Shlomi Zadok | end
|
|
6e50fa1d | Ohad Levy | end
|