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
|
# frozen_string_literal: true
require "spec_helper"
describe Bundler::Plugin do
Plugin = Bundler::Plugin
let(:installer) { double(:installer) }
let(:index) { double(:index) }
before do
build_lib "new-plugin", :path => lib_path("new-plugin") do |s|
s.write "plugins.rb"
end
build_lib "another-plugin", :path => lib_path("another-plugin") do |s|
s.write "plugins.rb"
end
allow(Plugin::Installer).to receive(:new) { installer }
allow(Plugin).to receive(:index) { index }
allow(index).to receive(:register_plugin)
end
describe "install command" do
let(:opts) { { "version" => "~> 1.0", "source" => "foo" } }
before do
allow(installer).to receive(:install).with(["new-plugin"], opts) do
{ "new_plugin" => lib_path("new-plugin") }
end
end
it "passes the name and options to installer" do
allow(installer).to receive(:install).with(["new-plugin"], opts) do
{ "new-plugin" => lib_path("new-plugin").to_s }
end.once
subject.install ["new-plugin"], opts
end
it "validates the installed plugin" do
allow(subject).
to receive(:validate_plugin!).with(lib_path("new-plugin")).once
subject.install ["new-plugin"], opts
end
it "registers the plugin with index" do
allow(index).to receive(:register_plugin).
with("new-plugin", lib_path("new-plugin").to_s, []).once
subject.install ["new-plugin"], opts
end
context "multiple plugins" do
it do
allow(installer).to receive(:install).
with(["new-plugin", "another-plugin"], opts) do
{
"new_plugin" => lib_path("new-plugin"),
"another-plugin" => lib_path("another-plugin"),
}
end.once
allow(subject).to receive(:validate_plugin!).twice
allow(index).to receive(:register_plugin).twice
subject.install ["new-plugin", "another-plugin"], opts
end
end
end
describe "evaluate gemfile for plugins" do
let(:definition) { double("definition") }
let(:gemfile) { bundled_app("Gemfile") }
before do
allow(Plugin::DSL).to receive(:evaluate) { definition }
end
it "doesn't calls installer without any plugins" do
allow(definition).to receive(:dependencies) { [] }
allow(installer).to receive(:install_definition).never
subject.gemfile_install(gemfile)
end
it "should validate and register the plugins" do
allow(definition).to receive(:dependencies) { [1, 2] }
plugin_paths = {
"new-plugin" => lib_path("new-plugin"),
"another-plugin" => lib_path("another-plugin"),
}
allow(installer).to receive(:install_definition) { plugin_paths }
expect(subject).to receive(:validate_plugin!).twice
expect(subject).to receive(:register_plugin).twice
subject.gemfile_install(gemfile)
end
end
describe "#command?" do
it "returns true value for commands in index" do
allow(index).
to receive(:command_plugin).with("newcommand") { "my-plugin" }
result = subject.command? "newcommand"
expect(result).to be_truthy
end
it "returns false value for commands not in index" do
allow(index).to receive(:command_plugin).with("newcommand") { nil }
result = subject.command? "newcommand"
expect(result).to be_falsy
end
end
describe "#exec_command" do
it "raises UndefinedCommandError when command is not found" do
allow(index).to receive(:command_plugin).with("newcommand") { nil }
expect { subject.exec_command("newcommand", []) }.
to raise_error(Plugin::UndefinedCommandError)
end
end
end
|