mirror of
https://github.com/inspec/inspec
synced 2024-12-23 19:43:14 +00:00
64 lines
2.8 KiB
Ruby
64 lines
2.8 KiB
Ruby
|
require_relative "helper"
|
||
|
|
||
|
class PluginManagerCliUninstall < Minitest::Test
|
||
|
include CorePluginFunctionalHelper
|
||
|
include PluginManagerHelpers
|
||
|
|
||
|
def test_when_a_gem_plugin_can_be_uninstalled
|
||
|
pre_block = Proc.new do |plugin_statefile_data, tmp_dir|
|
||
|
plugin_statefile_data.clear # Signal not to write a file, we'll provide one.
|
||
|
copy_in_core_config_dir("test-fixture-1-float", tmp_dir)
|
||
|
end
|
||
|
|
||
|
# Attempt uninstall
|
||
|
uninstall_result = run_inspec_process_with_this_plugin("plugin uninstall inspec-test-fixture", pre_run: pre_block, post_run: list_after_run)
|
||
|
|
||
|
success_message = uninstall_result.stdout.split("\n").grep(/uninstalled/).last
|
||
|
skip_windows!
|
||
|
refute_nil success_message, "Should find a success message at the end"
|
||
|
assert_includes success_message, "inspec-test-fixture"
|
||
|
assert_includes success_message, "0.1.0"
|
||
|
assert_includes success_message, "has been uninstalled"
|
||
|
|
||
|
itf_plugins = uninstall_result.payload.list_result.select { |p| p[:name] == "inspec-test-fixture" }
|
||
|
assert_empty itf_plugins, "inspec-test-fixture should not appear in the output of inspec list"
|
||
|
|
||
|
assert_empty uninstall_result.stderr
|
||
|
assert_exit_code 0, uninstall_result
|
||
|
end
|
||
|
|
||
|
def test_when_a_path_plugin_can_be_uninstalled
|
||
|
pre_block = Proc.new do |plugin_statefile_data, tmp_dir|
|
||
|
plugin_statefile_data.clear # Signal not to write a file, we'll provide one.
|
||
|
# This fixture includes a path install for inspec-meaning-of-life
|
||
|
copy_in_core_config_dir("test-fixture-1-float", tmp_dir)
|
||
|
end
|
||
|
uninstall_result = run_inspec_process_with_this_plugin("plugin uninstall inspec-meaning-of-life", pre_run: pre_block, post_run: list_after_run)
|
||
|
skip_windows!
|
||
|
|
||
|
success_message = uninstall_result.stdout.split("\n").grep(/uninstalled/).last
|
||
|
refute_nil success_message, "Should find a success message at the end"
|
||
|
assert_includes success_message, "inspec-meaning-of-life"
|
||
|
assert_includes success_message, "path-based plugin install"
|
||
|
assert_includes success_message, "has been uninstalled"
|
||
|
|
||
|
itf_plugins = uninstall_result.payload.list_result.select { |p| p[:name] == "inspec-meaning-of-life" }
|
||
|
assert_empty itf_plugins, "inspec-meaning-of-life should not appear in the output of inspec list"
|
||
|
|
||
|
assert_empty uninstall_result.stderr
|
||
|
assert_exit_code 0, uninstall_result
|
||
|
end
|
||
|
|
||
|
def test_fail_uninstall_from_plugin_that_is_not_installed
|
||
|
uninstall_result = run_inspec_process_with_this_plugin("plugin uninstall inspec-test-fixture-nonesuch")
|
||
|
|
||
|
skip_windows!
|
||
|
refute_includes "Inspec::Plugin::V2::UnInstallError", uninstall_result.stdout # Stacktrace marker
|
||
|
assert_match(/No such plugin installed:.+ - uninstall failed/, uninstall_result.stdout)
|
||
|
|
||
|
assert_empty uninstall_result.stderr
|
||
|
|
||
|
assert_exit_code 1, uninstall_result
|
||
|
end
|
||
|
end
|