fluentd-ui/test/models/plugin_test.rb
Kenji Okimoto 9ff7a7ef88 Add models/plugin_test.rb
Signed-off-by: Kenji Okimoto <okimoto@clear-code.com>
2018-07-27 16:12:37 +09:00

145 lines
4.3 KiB
Ruby

require "test_helper"
class PluginTest < ActiveSupport::TestCase
setup do
@plugin = FactoryBot.build(:plugin)
end
sub_test_case ".installed" do
setup do
gem_list = <<-GEM_LIST.strip_heredoc
dummy (3.3.3)
fluent-plugin-foo (0.1.2)
more_dummy (0.0.1)
GEM_LIST
stub(FluentGem).gem { "gem" }
stub(FluentGem).__double_definition_create__.call(:`, "gem list 2>&1") { gem_list }
@target = Plugin.new(gem_name: "fluent-plugin-foo", version: "0.1.2")
end
test "detect foo plugin" do
assert_equal(@target.inspect, Plugin.installed.first.inspect)
end
test "detected foo plugin is marked as installed" do
assert do
@target.installed?
end
end
test "detected foo plugin version to be installed_version" do
assert_equal(@target.version, @target.installed_version)
end
end
sub_test_case "#valid?" do
data("nil is invalid" => [nil, false],
"something filled is valid" => ["foobar", true])
test "gem_name" do |(name, is_valid)|
@plugin.gem_name = name
assert_equal(is_valid, @plugin.valid?)
end
data("nil is invalid" => [nil, false],
"something filled is valid" => ["0.0.1", true])
test "version" do |(version, is_valid)|
@plugin.version = version
assert_equal(is_valid, @plugin.valid?)
end
end
sub_test_case "#install!" do
def install_plugin(is_valid, is_installed)
stub(@plugin).valid? { is_valid }
stub(@plugin).installed? { is_installed }
@plugin.install!
end
data("installed" => [true, 0],
"not installed" => [false, 1])
test "valid" do |(is_installed, n)|
mock(FluentGem).install(anything, "--no-ri", "--no-rdoc", "-v", anything).times(n) {}
install_plugin(true, is_installed)
end
data("installed" => [true, :install],
"not installed" => [false, :installed])
test "invalid" do |(is_installed, method)|
mock(FluentGem).__send__(method).times(0)
install_plugin(false, is_installed)
end
test "system command error" do
stub(FluentGem).gem { "gem" }
mock(FluentGem).system("gem", "install", "fluent-plugin-dummy", "--no-ri", "--no-rdoc", "-v", "1.2.3").at_least(1) { false }
assert_raise(FluentGem::GemError.new("failed command: `gem install fluent-plugin-dummy --no-ri --no-rdoc -v 1.2.3`")) do
@plugin.install!
end
end
end
data("installed" => [true, 1],
"uninstalled" => [false, 0])
test "#uninstall!" do |(is_installed, n)|
installed_plugin = FactoryBot.build(:plugin, gem_name: "fluent-plugin-foobar")
mock(installed_plugin).installed? { is_installed }
mock(installed_plugin).gem_uninstall.times(n) {}
installed_plugin.uninstall!
end
test "#upgrade!" do
installed_plugin = FactoryBot.build(:plugin, gem_name: "fluent-plugin-foobar", version: "1.0.0")
stub(installed_plugin).installed? { true }
stub(FluentGem).gem { "gem" }
stub(FluentGem).run("gem", "install", "fluent-plugin-foobar", "--no-ri", "--no-rdoc", "-v", "1.2.0") { true }
mock(installed_plugin).uninstall! {}
mock(FluentGem).install("fluent-plugin-foobar", "--no-ri", "--no-rdoc", "-v", "1.2.0") {}
installed_plugin.upgrade!("1.2.0")
end
test "#to_param" do
assert do
@plugin.to_param == @plugin.gem_name
end
end
sub_test_case "Gem version" do
setup do
@plugin = FactoryBot.build(:plugin, version: "1.0.0")
@versions = %w(1.0.1 0.99.1 1.0.0 0.99.0 0.1.0 0.0.3 0.0.2 0.0.1)
@authors = %w(foo bar)
json_response = @versions.map do |version|
{
number: version,
summary: "summary of #{version}",
authors: @authors
}
end.to_json
stub_request(:get, @plugin.gem_json_url).to_return(body: json_response)
end
test "latest version is 1.0.0" do
assert_equal("1.0.1", @plugin.latest_version)
end
test "1.0.0 is not lates" do
assert do
!@plugin.latest_version?
end
end
test "released_versions is sorted" do
assert_equal(@versions.sort_by{|ver| Gem::Version.new(ver) }.reverse, @plugin.released_versions)
end
test "authors" do
assert_equal(@authors, @plugin.authors)
end
test "summary" do
assert_equal("summary of #{@plugin.version}", @plugin.summary)
end
end
end