-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathplugin_test.rb
144 lines (123 loc) · 4.31 KB
/
plugin_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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