lita 3.3.1 → 4.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +3 -0
- data/lib/lita.rb +45 -97
- data/lib/lita/adapter.rb +38 -17
- data/lib/lita/adapters/shell.rb +5 -3
- data/lib/lita/authorization.rb +109 -60
- data/lib/lita/builder.rb +38 -0
- data/lib/lita/callback.rb +37 -0
- data/lib/lita/cli.rb +2 -0
- data/lib/lita/config.rb +1 -18
- data/lib/lita/configurable.rb +29 -0
- data/lib/lita/configuration.rb +179 -0
- data/lib/lita/configuration_validator.rb +66 -0
- data/lib/lita/daemon.rb +4 -11
- data/lib/lita/default_configuration.rb +146 -0
- data/lib/lita/errors.rb +9 -0
- data/lib/lita/handler.rb +5 -264
- data/lib/lita/handler/chat_router.rb +130 -0
- data/lib/lita/handler/common.rb +114 -0
- data/lib/lita/handler/event_router.rb +77 -0
- data/lib/lita/handler/http_router.rb +26 -0
- data/lib/lita/handlers/authorization.rb +13 -18
- data/lib/lita/handlers/deprecation_check.rb +24 -0
- data/lib/lita/handlers/help.rb +5 -3
- data/lib/lita/handlers/info.rb +2 -2
- data/lib/lita/http_callback.rb +29 -0
- data/lib/lita/http_route.rb +41 -26
- data/lib/lita/namespace.rb +23 -0
- data/lib/lita/rack_app.rb +29 -2
- data/lib/lita/registry.rb +133 -0
- data/lib/lita/robot.rb +58 -20
- data/lib/lita/route_validator.rb +12 -4
- data/lib/lita/rspec.rb +23 -14
- data/lib/lita/rspec/handler.rb +93 -23
- data/lib/lita/rspec/matchers/chat_route_matcher.rb +48 -0
- data/lib/lita/rspec/matchers/deprecated.rb +36 -0
- data/lib/lita/rspec/matchers/event_route_matcher.rb +27 -0
- data/lib/lita/rspec/matchers/http_route_matcher.rb +18 -60
- data/lib/lita/user.rb +0 -6
- data/lib/lita/util.rb +1 -8
- data/lib/lita/version.rb +1 -1
- data/lita.gemspec +1 -0
- data/spec/lita/adapter_spec.rb +25 -7
- data/spec/lita/adapters/shell_spec.rb +24 -4
- data/spec/lita/authorization_spec.rb +57 -38
- data/spec/lita/builder_spec.rb +39 -0
- data/spec/lita/config_spec.rb +0 -24
- data/spec/lita/configuration_spec.rb +222 -0
- data/spec/lita/configuration_validator_spec.rb +112 -0
- data/spec/lita/daemon_spec.rb +2 -2
- data/spec/lita/default_configuration_spec.rb +254 -0
- data/spec/lita/handler/chat_router_spec.rb +192 -0
- data/spec/lita/handler/common_spec.rb +272 -0
- data/spec/lita/handler/event_router_spec.rb +54 -0
- data/spec/lita/handler/http_router_spec.rb +106 -0
- data/spec/lita/handler_spec.rb +20 -291
- data/spec/lita/handlers/authorization_spec.rb +9 -11
- data/spec/lita/handlers/deprecation_check_spec.rb +21 -0
- data/spec/lita/handlers/help_spec.rb +31 -9
- data/spec/lita/handlers/info_spec.rb +2 -2
- data/spec/lita/handlers/room_spec.rb +5 -3
- data/spec/lita/robot_spec.rb +30 -11
- data/spec/lita/rspec_spec.rb +71 -31
- data/spec/lita/user_spec.rb +2 -2
- data/spec/lita_spec.rb +62 -4
- data/spec/spec_helper.rb +7 -0
- data/templates/locales/en.yml +56 -4
- data/templates/plugin/gemspec.tt +1 -0
- data/templates/plugin/spec/spec_helper.tt +4 -0
- metadata +54 -8
- data/lib/lita/rspec/matchers/event_subscription_matcher.rb +0 -67
- data/lib/lita/rspec/matchers/route_matcher.rb +0 -69
- data/spec/lita/rack_app_spec.rb +0 -92
@@ -2,19 +2,17 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Lita::Handlers::Authorization, lita_handler: true do
|
4
4
|
before do
|
5
|
-
allow(
|
6
|
-
user
|
7
|
-
).and_return(true)
|
5
|
+
allow(robot.auth).to receive(:user_is_admin?).with(user).and_return(true)
|
8
6
|
end
|
9
7
|
|
10
8
|
let(:target_user) { instance_double("Lita::User", id: "1", name: "Carl") }
|
11
9
|
|
12
|
-
it {
|
13
|
-
it {
|
14
|
-
it {
|
15
|
-
it {
|
16
|
-
it {
|
17
|
-
it {
|
10
|
+
it { is_expected.to route_command("auth add foo bar").to(:add) }
|
11
|
+
it { is_expected.to route_command("auth add foo@bar.com baz").to(:add) }
|
12
|
+
it { is_expected.to route_command("auth remove foo bar").to(:remove) }
|
13
|
+
it { is_expected.to route_command("auth remove foo@bar.com baz").to(:remove) }
|
14
|
+
it { is_expected.to route_command("auth list").to(:list) }
|
15
|
+
it { is_expected.to route_command("auth list foo").to(:list) }
|
18
16
|
|
19
17
|
describe "#add" do
|
20
18
|
it "replies with the proper format if the require commands are missing" do
|
@@ -77,8 +75,8 @@ describe Lita::Handlers::Authorization, lita_handler: true do
|
|
77
75
|
|
78
76
|
before do
|
79
77
|
groups.each do |group|
|
80
|
-
|
81
|
-
|
78
|
+
subject.robot.auth.add_user_to_group(user, user1, group)
|
79
|
+
subject.robot.auth.add_user_to_group(user, user2, group)
|
82
80
|
end
|
83
81
|
end
|
84
82
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lita::Handlers::DeprecationCheck, lita_handler: true do
|
4
|
+
it { is_expected.to route_event(:loaded).to(:check_handlers_for_default_config) }
|
5
|
+
|
6
|
+
describe "#check_handlers_for_default_config" do
|
7
|
+
before do
|
8
|
+
registry.register_handler(:foo) do
|
9
|
+
def self.default_config(old_config)
|
10
|
+
old_config.bar = :baz
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "logs a warning for handlers using the default_config method" do
|
16
|
+
expect(Lita.logger).to receive(:warn).with(/found defined in the foo handler/)
|
17
|
+
|
18
|
+
robot.trigger(:loaded, {})
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Lita::Handlers::Help, lita_handler: true do
|
4
|
-
it {
|
5
|
-
it {
|
4
|
+
it { is_expected.to route_command("help").to(:help) }
|
5
|
+
it { is_expected.to route_command("help foo").to(:help) }
|
6
6
|
|
7
7
|
describe "#help" do
|
8
8
|
let(:secret_handler_class) do
|
@@ -12,6 +12,7 @@ describe Lita::Handlers::Help, lita_handler: true do
|
|
12
12
|
})
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
15
16
|
it "sends help information for all commands" do
|
16
17
|
send_command("help")
|
17
18
|
expect(replies.last).to match(
|
@@ -25,13 +26,34 @@ describe Lita::Handlers::Help, lita_handler: true do
|
|
25
26
|
expect(replies.last).not_to match(/help - Lists/)
|
26
27
|
end
|
27
28
|
|
28
|
-
it "doesn't
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
it "doesn't crash if a handler doesn't have routes" do
|
30
|
+
event_handler = Class.new do
|
31
|
+
extend Lita::Handler::EventRouter
|
32
|
+
end
|
33
|
+
|
34
|
+
registry.register_handler(event_handler)
|
35
|
+
|
36
|
+
expect { send_command("help") }.not_to raise_error
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "restricted routes" do
|
40
|
+
let(:authorized_user) do
|
41
|
+
user = Lita::User.create(2, name: "Authorized User")
|
42
|
+
Lita::Authorization.new(robot).add_user_to_group!(user, :the_nobodies)
|
43
|
+
user
|
44
|
+
end
|
45
|
+
|
46
|
+
before { registry.register_handler(secret_handler_class) }
|
47
|
+
|
48
|
+
it "doesn't show help for commands the user doesn't have access to" do
|
49
|
+
send_command("help")
|
50
|
+
expect(replies.last).not_to include("secret")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "shows help for restricted routes if the user has access" do
|
54
|
+
send_command("help", as: authorized_user)
|
55
|
+
expect(replies.last).to include("secret")
|
56
|
+
end
|
35
57
|
end
|
36
58
|
end
|
37
59
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Lita::Handlers::Info, lita_handler: true do
|
4
|
-
it {
|
5
|
-
it {
|
4
|
+
it { is_expected.to route_command("info").to(:chat) }
|
5
|
+
it { is_expected.to route_http(:get, "/lita/info").to(:web) }
|
6
6
|
|
7
7
|
let(:request) { double("Rack::Request") }
|
8
8
|
let(:response) { Rack::Response.new }
|
@@ -1,8 +1,10 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
1
3
|
describe Lita::Handlers::Room, lita_handler: true do
|
2
|
-
it {
|
3
|
-
it {
|
4
|
+
it { is_expected.to route_command("join #lita.io").to(:join) }
|
5
|
+
it { is_expected.to route_command("part #lita.io").to(:part) }
|
4
6
|
|
5
|
-
before { allow(
|
7
|
+
before { allow(robot.auth).to receive(:user_is_admin?).with(user).and_return(true) }
|
6
8
|
|
7
9
|
describe "#join" do
|
8
10
|
it "calls Robot#join with the provided ID" do
|
data/spec/lita/robot_spec.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Lita::Robot do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
allow(adapter_registry).to receive(:[]).and_return(nil)
|
8
|
-
expect(Lita.logger).to receive(:fatal).with(/Unknown adapter/)
|
9
|
-
expect { subject }.to raise_error(SystemExit)
|
10
|
-
end
|
3
|
+
describe Lita::Robot, lita: true do
|
4
|
+
subject { described_class.new(registry) }
|
5
|
+
|
6
|
+
before { registry.register_adapter(:shell, Lita::Adapters::Shell) }
|
11
7
|
|
12
8
|
it "triggers a loaded event after initialization" do
|
13
9
|
expect_any_instance_of(described_class).to receive(:trigger).with(:loaded)
|
@@ -15,11 +11,12 @@ describe Lita::Robot do
|
|
15
11
|
end
|
16
12
|
|
17
13
|
context "with registered handlers" do
|
18
|
-
let(:handler1) {
|
19
|
-
let(:handler2) {
|
14
|
+
let(:handler1) { Class.new(Lita::Handler) { namespace :test } }
|
15
|
+
let(:handler2) { Class.new(Lita::Handler) { namespace :test } }
|
20
16
|
|
21
17
|
before do
|
22
|
-
|
18
|
+
registry.register_handler(handler1)
|
19
|
+
registry.register_handler(handler2)
|
23
20
|
end
|
24
21
|
|
25
22
|
describe "#receive" do
|
@@ -70,6 +67,26 @@ describe Lita::Robot do
|
|
70
67
|
expect_any_instance_of(Lita::Adapters::Shell).to receive(:shut_down)
|
71
68
|
subject.run
|
72
69
|
end
|
70
|
+
|
71
|
+
it "logs and quits if the specified adapter can't be found" do
|
72
|
+
registry.config.robot.adapter = :does_not_exist
|
73
|
+
expect(Lita.logger).to receive(:fatal).with(/Unknown adapter/)
|
74
|
+
expect { subject.run }.to raise_error(SystemExit)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "logs and aborts if the web server's port is in use" do
|
78
|
+
allow_any_instance_of(Puma::Server).to receive(:add_tcp_listener).and_raise(Errno::EADDRINUSE)
|
79
|
+
|
80
|
+
expect(Lita.logger).to receive(:fatal).with(/web server/)
|
81
|
+
expect { subject.run }.to raise_error(SystemExit)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "logs and aborts if the web server's port is privileged" do
|
85
|
+
allow_any_instance_of(Puma::Server).to receive(:add_tcp_listener).and_raise(Errno::EACCES)
|
86
|
+
|
87
|
+
expect(Lita.logger).to receive(:fatal).with(/web server/)
|
88
|
+
expect { subject.run }.to raise_error(SystemExit)
|
89
|
+
end
|
73
90
|
end
|
74
91
|
|
75
92
|
describe "#join" do
|
@@ -151,6 +168,8 @@ describe Lita::Robot do
|
|
151
168
|
end
|
152
169
|
|
153
170
|
describe "#shut_down" do
|
171
|
+
before { allow_any_instance_of(Lita::Adapters::Shell).to receive(:puts) }
|
172
|
+
|
154
173
|
it "gracefully stops the adapter" do
|
155
174
|
expect_any_instance_of(Lita::Adapters::Shell).to receive(:shut_down)
|
156
175
|
subject.shut_down
|
data/spec/lita/rspec_spec.rb
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
handler_class = Class.new(Lita::Handler) do
|
4
|
-
route(
|
5
|
-
route(
|
4
|
+
route(/^message$/, :message)
|
5
|
+
route(/^command$/, :command, command: true)
|
6
6
|
route("restricted", :restricted, restrict_to: :some_group)
|
7
|
+
route("admins only", :admins_only, restrict_to: :admins)
|
7
8
|
|
8
9
|
http.get "web", :web
|
9
10
|
|
10
11
|
on :connected, :greet
|
11
12
|
|
12
|
-
def
|
13
|
-
response.reply
|
13
|
+
def message(response)
|
14
|
+
response.reply(response.user.name)
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
response.reply
|
17
|
+
def command(response)
|
18
|
+
response.reply("a", "command")
|
18
19
|
end
|
19
20
|
|
20
21
|
def restricted(_response)
|
@@ -32,38 +33,77 @@ handler_class = Class.new(Lita::Handler) do
|
|
32
33
|
end
|
33
34
|
|
34
35
|
describe handler_class, lita_handler: true do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
36
|
+
describe "routing messages" do
|
37
|
+
it { is_expected.to route("message") }
|
38
|
+
it { is_expected.to route("message").to(:message) }
|
39
|
+
it { is_expected.not_to route("message").to(:not_a_message) }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "routing commands" do
|
43
|
+
it { is_expected.to route_command("command") }
|
44
|
+
it { is_expected.not_to route("command") }
|
45
|
+
it { is_expected.not_to route_command("not a command") }
|
46
|
+
it { is_expected.to route_command("command").to(:command) }
|
47
|
+
it { is_expected.not_to route_command("command").to(:not_a_command) }
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "routing to restricted routes" do
|
51
|
+
it { is_expected.not_to route("restricted") }
|
52
|
+
it { is_expected.to route("restricted").with_authorization_for(:some_group) }
|
53
|
+
it { is_expected.not_to route("restricted").with_authorization_for(:wrong_group) }
|
54
|
+
it { is_expected.to route("admins only").with_authorization_for(:admins) }
|
55
|
+
it { is_expected.to route("restricted").with_authorization_for(:some_group).to(:restricted) }
|
56
|
+
it { is_expected.not_to route("restricted").with_authorization_for(:some_group).to(:nothing) }
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "routing HTTP routes" do
|
60
|
+
it { is_expected.to route_http(:get, "web") }
|
61
|
+
it { is_expected.to route_http(:get, "web").to(:web) }
|
62
|
+
it { is_expected.not_to route_http(:get, "web").to(:message) }
|
63
|
+
it { is_expected.not_to route_http(:post, "web") }
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "routing events" do
|
67
|
+
it { is_expected.to route_event(:connected) }
|
68
|
+
it { is_expected.to route_event(:connected).to(:greet) }
|
69
|
+
it { is_expected.not_to route_event(:not_an_event) }
|
70
|
+
it { is_expected.not_to route_event(:connected).to(:message) }
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "deprecated routing syntax" do
|
74
|
+
before { allow(STDERR).to receive(:puts) }
|
75
|
+
|
76
|
+
it { routes("message").to(:message) }
|
77
|
+
it { routes_command("command").to(:command) }
|
78
|
+
it { doesnt_route("command").to(:command) }
|
79
|
+
it { does_not_route("command").to(:command) }
|
80
|
+
it { doesnt_route_command("not a command").to(:message) }
|
81
|
+
it { does_not_route_command("not a command").to(:message) }
|
82
|
+
it { routes("restricted").to(:restricted) }
|
83
|
+
it { routes_http(:get, "web").to(:web) }
|
84
|
+
it { doesnt_route_http(:post, "web").to(:web) }
|
85
|
+
it { routes_event(:connected).to(:greet) }
|
86
|
+
it { doesnt_route_event(:connected).to(:web) }
|
87
|
+
it { does_not_route_event(:connected).to(:web) }
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#message" do
|
91
|
+
it "replies with a string" do
|
92
|
+
send_message("message")
|
93
|
+
expect(replies).to eq(["Test User"])
|
52
94
|
end
|
53
95
|
end
|
54
96
|
|
55
|
-
describe "#
|
56
|
-
it "replies with
|
57
|
-
send_command("
|
58
|
-
expect(replies).to eq(%w(
|
97
|
+
describe "#command" do
|
98
|
+
it "replies with two strings" do
|
99
|
+
send_command("command")
|
100
|
+
expect(replies).to eq(%w(a command))
|
59
101
|
end
|
60
102
|
end
|
61
103
|
|
62
104
|
it "allows the sending user to be specified" do
|
63
105
|
another_user = Lita::User.create(2, name: "Another User")
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
send_message("foo", as: another_user)
|
106
|
+
send_message("message", as: another_user)
|
107
|
+
expect(replies.last).to eq("Another User")
|
68
108
|
end
|
69
109
|
end
|
data/spec/lita/user_spec.rb
CHANGED
@@ -6,13 +6,13 @@ describe Lita::User, lita: true do
|
|
6
6
|
user = described_class.create(1, name: "Carl")
|
7
7
|
expect(user.id).to eq("1")
|
8
8
|
expect(user.name).to eq("Carl")
|
9
|
-
persisted_user = described_class.
|
9
|
+
persisted_user = described_class.find_by_id(1)
|
10
10
|
expect(user).to eq(persisted_user)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "returns existing users" do
|
14
14
|
described_class.create(1, name: "Carl")
|
15
|
-
user = described_class.
|
15
|
+
user = described_class.find_by_id(1)
|
16
16
|
expect(user.id).to eq("1")
|
17
17
|
expect(user.name).to eq("Carl")
|
18
18
|
end
|
data/spec/lita_spec.rb
CHANGED
@@ -4,7 +4,6 @@ describe Lita do
|
|
4
4
|
before { described_class.register_adapter(:shell, Lita::Adapters::Shell) }
|
5
5
|
|
6
6
|
it "memoizes a Config" do
|
7
|
-
expect(described_class.config).to be_a(Lita::Config)
|
8
7
|
expect(described_class.config).to eql(described_class.config)
|
9
8
|
end
|
10
9
|
|
@@ -60,10 +59,57 @@ describe Lita do
|
|
60
59
|
end
|
61
60
|
|
62
61
|
describe ".redis" do
|
62
|
+
let(:redis_namespace) { instance_double("Redis") }
|
63
|
+
|
64
|
+
before do
|
65
|
+
if described_class.instance_variable_defined?(:@redis)
|
66
|
+
described_class.remove_instance_variable(:@redis)
|
67
|
+
end
|
68
|
+
|
69
|
+
allow(redis_namespace).to receive(:ping).and_return("PONG")
|
70
|
+
allow(Redis::Namespace).to receive(:new).and_return(redis_namespace)
|
71
|
+
end
|
72
|
+
|
63
73
|
it "memoizes a Redis::Namespace" do
|
64
|
-
expect(described_class.redis).to
|
74
|
+
expect(described_class.redis).to equal(redis_namespace)
|
65
75
|
expect(described_class.redis).to eql(described_class.redis)
|
66
76
|
end
|
77
|
+
|
78
|
+
it "logs a fatal warning and raises an exception if it can't connection to Redis" do
|
79
|
+
allow(redis_namespace).to receive(:ping).and_raise(Redis::CannotConnectError)
|
80
|
+
|
81
|
+
expect(Lita.logger).to receive(:fatal)
|
82
|
+
expect { Lita.redis }.to raise_error(SystemExit)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe ".register_adapter" do
|
87
|
+
let(:robot) { instance_double("Lita::Robot") }
|
88
|
+
|
89
|
+
it "builds an adapter out of a provided block" do
|
90
|
+
described_class.register_adapter(:foo) {}
|
91
|
+
expect(Lita.logger).to receive(:warn).with(/not implemented/)
|
92
|
+
Lita.adapters[:foo].new(robot).run
|
93
|
+
end
|
94
|
+
|
95
|
+
it "raises if a non-class object is passed as the adapter" do
|
96
|
+
expect do
|
97
|
+
described_class.register_adapter(:foo, :bar)
|
98
|
+
end.to raise_error(ArgumentError, /requires a class/)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe ".register_handler" do
|
103
|
+
it "builds a handler out of a provided block" do
|
104
|
+
described_class.register_handler(:foo) {}
|
105
|
+
expect(described_class.handlers.to_a.last.namespace).to eq("foo")
|
106
|
+
end
|
107
|
+
|
108
|
+
it "raises if a non-class object is the only argument" do
|
109
|
+
expect do
|
110
|
+
described_class.register_handler(:foo)
|
111
|
+
end.to raise_error(ArgumentError, /requires a class/)
|
112
|
+
end
|
67
113
|
end
|
68
114
|
|
69
115
|
describe ".reset" do
|
@@ -74,13 +120,13 @@ describe Lita do
|
|
74
120
|
end
|
75
121
|
|
76
122
|
it "clears adapters" do
|
77
|
-
described_class.register_adapter(:foo,
|
123
|
+
described_class.register_adapter(:foo, Class.new)
|
78
124
|
described_class.reset
|
79
125
|
expect(described_class.adapters).to be_empty
|
80
126
|
end
|
81
127
|
|
82
128
|
it "clears handlers" do
|
83
|
-
described_class.register_handler(
|
129
|
+
described_class.register_handler(Class.new)
|
84
130
|
described_class.reset
|
85
131
|
expect(described_class.handlers).to be_empty
|
86
132
|
end
|
@@ -94,11 +140,17 @@ describe Lita do
|
|
94
140
|
|
95
141
|
describe ".run" do
|
96
142
|
let(:hook) { double("Hook") }
|
143
|
+
let(:validator) { instance_double("Lita::ConfigurationValidator", call: nil) }
|
97
144
|
|
98
145
|
before do
|
99
146
|
allow_any_instance_of(Lita::Robot).to receive(:run)
|
147
|
+
allow(Lita::ConfigurationValidator).to receive(:new).with(described_class).and_return(
|
148
|
+
validator
|
149
|
+
)
|
100
150
|
end
|
101
151
|
|
152
|
+
after { described_class.reset }
|
153
|
+
|
102
154
|
it "runs a new Robot" do
|
103
155
|
expect_any_instance_of(Lita::Robot).to receive(:run)
|
104
156
|
described_class.run
|
@@ -109,5 +161,11 @@ describe Lita do
|
|
109
161
|
expect(hook).to receive(:call).with(config_path: "path/to/config")
|
110
162
|
described_class.run("path/to/config")
|
111
163
|
end
|
164
|
+
|
165
|
+
it "raises if the configuration is not valid" do
|
166
|
+
allow(validator).to receive(:call).and_raise(Lita::ValidationError)
|
167
|
+
|
168
|
+
expect { described_class.run }.to raise_error(Lita::ValidationError)
|
169
|
+
end
|
112
170
|
end
|
113
171
|
end
|