pepito 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +41 -0
- data/.rubocop.yml +8 -0
- data/Gemfile +3 -0
- data/README.md +26 -0
- data/Rakefile +11 -0
- data/bin/pepito +5 -0
- data/lib/pepito/adapter.rb +101 -0
- data/lib/pepito/adapters.rb +4 -0
- data/lib/pepito/database.rb +14 -0
- data/lib/pepito/errors/missing_configuration_value_error.rb +15 -0
- data/lib/pepito/errors/required_methods_error.rb +15 -0
- data/lib/pepito/handler/chat_router.rb +36 -0
- data/lib/pepito/handler/http_router.rb +30 -0
- data/lib/pepito/handler.rb +38 -0
- data/lib/pepito/handlers/extensions_catalog.rb +108 -0
- data/lib/pepito/handlers/help.rb +36 -0
- data/lib/pepito/handlers/info.rb +40 -0
- data/lib/pepito/handlers/room.rb +23 -0
- data/lib/pepito/http_api/http_callback.rb +49 -0
- data/lib/pepito/http_api/http_route.rb +48 -0
- data/lib/pepito/http_api/rack_app.rb +27 -0
- data/lib/pepito/message.rb +59 -0
- data/lib/pepito/robot.rb +367 -0
- data/lib/pepito/source.rb +32 -0
- data/lib/pepito/version.rb +4 -0
- data/lib/pepito/web_app/app.rb +41 -0
- data/lib/pepito/web_app/views/index.erb +69 -0
- data/lib/pepito.rb +21 -0
- data/pepito.gemspec +35 -0
- data/test/pepito/handler/test_chat_router.rb +37 -0
- data/test/pepito/handler/test_http_router.rb +20 -0
- data/test/pepito/handlers/test_extensions_catalog.rb +38 -0
- data/test/pepito/handlers/test_help.rb +38 -0
- data/test/pepito/handlers/test_info.rb +32 -0
- data/test/pepito/handlers/test_room.rb +33 -0
- data/test/pepito/test_adapter.rb +71 -0
- data/test/pepito/test_handler.rb +28 -0
- data/test/pepito/test_message.rb +101 -0
- data/test/pepito/test_robot.rb +259 -0
- data/test/pepito/test_source.rb +27 -0
- data/test/test_pepito.rb +8 -0
- metadata +300 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handler/http_router'
|
3
|
+
|
4
|
+
class Stub
|
5
|
+
include Pepito::Handler::HTTPRouter
|
6
|
+
end
|
7
|
+
|
8
|
+
class TestPepitoHandlerHTTPRouter < MiniTest::Test
|
9
|
+
def test_emtpy_routes
|
10
|
+
stub = Stub.new
|
11
|
+
assert_empty stub.http_routes
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_add_route
|
15
|
+
stub = Stub.new
|
16
|
+
stub.http_route('GET', '/path', :func_sym)
|
17
|
+
|
18
|
+
assert stub.http_routes[0]
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handlers/room'
|
3
|
+
|
4
|
+
class TestPepitoHandlersExtensionsCatalog < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@handler = Pepito::Handlers::ExtensionsCatalog.new(nil)
|
7
|
+
@handler.run
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_has_chat_routes
|
11
|
+
chat_routes = [
|
12
|
+
'handlers list',
|
13
|
+
'adapters list',
|
14
|
+
'routes list'
|
15
|
+
]
|
16
|
+
@handler.chat_routes.each do |route|
|
17
|
+
chat_routes.entries.each do |r|
|
18
|
+
chat_routes.delete(r) if route.pattern.match(r)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
assert_empty chat_routes
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_has_web_routes
|
25
|
+
http_routes = [
|
26
|
+
{ method: 'GET', path: '/extensions' },
|
27
|
+
{ method: 'GET', path: '/handlers' },
|
28
|
+
{ method: 'GET', path: '/adapters' },
|
29
|
+
{ method: 'GET', path: '/routes' }
|
30
|
+
]
|
31
|
+
@handler.http_routes.each do |route|
|
32
|
+
http_routes.entries.each do |r|
|
33
|
+
http_routes.delete(r) if route.route.path_for_generation == r[:path] && route.route.request_methods.include?(r[:method])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
assert_empty http_routes
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handlers/room'
|
3
|
+
|
4
|
+
class TestPepitoHandlersHelp < MiniTest::Test
|
5
|
+
Struct.new('Robot', :name, :handlers)
|
6
|
+
Struct.new('Route', :help, :command)
|
7
|
+
Struct.new('Handler', :chat_routes)
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@mock_robot = Struct::Robot.new('pepito', [])
|
11
|
+
@handler = Pepito::Handlers::Help.new(@mock_robot)
|
12
|
+
@handler.run
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_has_chat_routes
|
16
|
+
chat_routes = ['help']
|
17
|
+
@handler.chat_routes.each do |route|
|
18
|
+
chat_routes.entries.each do |r|
|
19
|
+
chat_routes.delete(r) if route.pattern.match(r)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
assert_empty chat_routes
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_chat_help
|
26
|
+
route_1 = Struct::Route.new('route1 help', false)
|
27
|
+
route_2 = Struct::Route.new('route2 help', true)
|
28
|
+
|
29
|
+
handler1 = Struct::Handler.new([route_1, route_2])
|
30
|
+
handler2 = Struct::Handler.new([route_1, route_2])
|
31
|
+
|
32
|
+
@mock_robot.handlers = { h1: handler1, h2: handler2 }
|
33
|
+
|
34
|
+
chat_help = @handler.chat_help(nil, nil)
|
35
|
+
expected = ['route1 help', 'pepito route2 help', 'route1 help', 'pepito route2 help']
|
36
|
+
assert chat_help, expected
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handlers/info'
|
3
|
+
require 'pepito/version'
|
4
|
+
|
5
|
+
class TestPepitoHandlersInfo < MiniTest::Test
|
6
|
+
def setup
|
7
|
+
@handler = Pepito::Handlers::Info.new(nil)
|
8
|
+
@handler.run
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_has_chat_routes
|
12
|
+
chat_routes = ['info']
|
13
|
+
@handler.chat_routes.each do |route|
|
14
|
+
chat_routes.entries.each do |r|
|
15
|
+
chat_routes.delete(r) if route.pattern.match(r)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
assert_empty chat_routes
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_has_web_routes
|
22
|
+
http_routes = [
|
23
|
+
{ method: 'GET', path: '/info' }
|
24
|
+
]
|
25
|
+
@handler.http_routes.each do |route|
|
26
|
+
http_routes.entries.each do |r|
|
27
|
+
http_routes.delete(r) if route.route.path_for_generation == r[:path] && route.route.request_methods.include?(r[:method])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
assert_empty http_routes
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handlers/room'
|
3
|
+
|
4
|
+
class TestPepitoHandlersRoom < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@handler = Pepito::Handlers::Room.new(nil)
|
7
|
+
@handler.run
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_has_chat_routes
|
11
|
+
chat_routes = ['set topic word', 'set topic multiple words']
|
12
|
+
@handler.chat_routes.each do |route|
|
13
|
+
chat_routes.entries.each do |r|
|
14
|
+
chat_routes.delete(r) if route.pattern.match(r)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
assert_empty chat_routes
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_chat_set_topic
|
21
|
+
match_data = { 'topic' => 'topic' }
|
22
|
+
mock_adapter = MiniTest::Mock.new
|
23
|
+
mock_source = MiniTest::Mock.new
|
24
|
+
|
25
|
+
mock_adapter.expect(:topic, nil, [mock_source, match_data['topic']])
|
26
|
+
mock_source.expect(:adapter, mock_adapter)
|
27
|
+
|
28
|
+
@handler.chat_set_topic(mock_source, match_data)
|
29
|
+
|
30
|
+
mock_adapter.verify
|
31
|
+
mock_source.verify
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/adapter'
|
3
|
+
require 'pepito/errors/required_methods_error'
|
4
|
+
|
5
|
+
class StubAdapter < Pepito::Adapter
|
6
|
+
class << self
|
7
|
+
attr_accessor :configs
|
8
|
+
end
|
9
|
+
|
10
|
+
Pepito::Adapter::REQUIRED_METHODS.each do |arg|
|
11
|
+
send :define_method, arg do
|
12
|
+
nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class TestPepitoAdapter < MiniTest::Test
|
18
|
+
def test_raise_missing_methods
|
19
|
+
StubAdapter.configs = [{}]
|
20
|
+
e = assert_raises Pepito::Errors::RequiredMethodsError do
|
21
|
+
Pepito::Adapter.new(nil, {})
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_equal e.missing_methods, Pepito::Adapter::REQUIRED_METHODS
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_no_missing_methods
|
28
|
+
StubAdapter.configs = [{}]
|
29
|
+
StubAdapter.new(nil, {})
|
30
|
+
pass
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_optional_config
|
34
|
+
StubAdapter.configs = [{ name: 'optional', required: false }]
|
35
|
+
StubAdapter.new(nil, {})
|
36
|
+
pass
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_required_config
|
40
|
+
StubAdapter.configs = [{ name: 'required', required: true }]
|
41
|
+
StubAdapter.new(nil, 'required' => 'config_value')
|
42
|
+
pass
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_missing_required_config
|
46
|
+
StubAdapter.configs = [{ name: 'required', required: true }]
|
47
|
+
e = assert_raises Pepito::Errors::MissingConfigurationValueError do
|
48
|
+
StubAdapter.new(nil, {})
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_equal e.configuration_values, ['required']
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_nil_required_config
|
55
|
+
StubAdapter.configs = [{ name: 'required', required: true }]
|
56
|
+
e = assert_raises Pepito::Errors::MissingConfigurationValueError do
|
57
|
+
StubAdapter.new(nil, 'required' => nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
assert_equal e.configuration_values, ['required']
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_empty_required_config
|
64
|
+
StubAdapter.configs = [{ name: 'required', required: true }]
|
65
|
+
e = assert_raises Pepito::Errors::MissingConfigurationValueError do
|
66
|
+
StubAdapter.new(nil, 'required' => '')
|
67
|
+
end
|
68
|
+
|
69
|
+
assert_equal e.configuration_values, ['required']
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/handler'
|
3
|
+
|
4
|
+
class TestPepitoHandler < MiniTest::Test
|
5
|
+
def test_http_routes_registry
|
6
|
+
mock_route = MiniTest::Mock.new
|
7
|
+
mock_route.expect(:route, nil)
|
8
|
+
mock_route.expect(:route, nil)
|
9
|
+
|
10
|
+
mock_router = MiniTest::Mock.new
|
11
|
+
mock_router.expect(:add_route, nil, [mock_route.route])
|
12
|
+
|
13
|
+
mock_http_api = MiniTest::Mock.new
|
14
|
+
mock_http_api.expect(:router, mock_router)
|
15
|
+
|
16
|
+
mock_robot = MiniTest::Mock.new
|
17
|
+
mock_robot.expect(:http_api, mock_http_api)
|
18
|
+
|
19
|
+
handler = Pepito::Handler.new(mock_robot)
|
20
|
+
handler.http_routes << mock_route
|
21
|
+
handler.start
|
22
|
+
|
23
|
+
assert mock_robot.verify
|
24
|
+
assert mock_http_api.verify
|
25
|
+
assert mock_router.verify
|
26
|
+
assert mock_route.verify
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/message'
|
3
|
+
|
4
|
+
class TestPepitoMessage < MiniTest::Test
|
5
|
+
def test_command_false
|
6
|
+
message = create_message('pepito', 'message')
|
7
|
+
assert_equal message.command?, false
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_command_false_if_name_empty
|
11
|
+
message = create_message('', 'message')
|
12
|
+
assert_equal message.command?, false
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_command_false_if_name_empty_and_space_in_message
|
16
|
+
message = create_message('', ' message')
|
17
|
+
assert_equal message.command?, false
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_command_true
|
21
|
+
message = create_message('pepito', 'pepito message')
|
22
|
+
assert_equal message.command?, true
|
23
|
+
assert_equal message.command, 'message'
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_route_match_true_if_command_false_and_route_command_false
|
27
|
+
message = create_message('pepito', 'message')
|
28
|
+
|
29
|
+
mock_route = MiniTest::Mock.new
|
30
|
+
mock_route.expect(:command, false)
|
31
|
+
mock_route.expect(:pattern, /^message$/)
|
32
|
+
|
33
|
+
assert_equal message.match_route?(mock_route), true
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_route_match_false_if_command_false_and_route_command_false
|
37
|
+
message = create_message('pepito', 'message asd')
|
38
|
+
|
39
|
+
mock_route = MiniTest::Mock.new
|
40
|
+
mock_route.expect(:command, false)
|
41
|
+
mock_route.expect(:command, false)
|
42
|
+
mock_route.expect(:pattern, /^message$/)
|
43
|
+
|
44
|
+
assert_equal message.match_route?(mock_route), false
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_route_match_true_if_command_true_and_route_command_true
|
48
|
+
message = create_message('pepito', 'pepito message')
|
49
|
+
|
50
|
+
mock_route = MiniTest::Mock.new
|
51
|
+
mock_route.expect(:command, true)
|
52
|
+
mock_route.expect(:command, true)
|
53
|
+
mock_route.expect(:pattern, /^message$/)
|
54
|
+
|
55
|
+
assert_equal message.match_route?(mock_route), true
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_route_match_false_if_command_true_and_route_command_true
|
59
|
+
message = create_message('pepito', 'pepito message asd')
|
60
|
+
|
61
|
+
mock_route = MiniTest::Mock.new
|
62
|
+
mock_route.expect(:command, true)
|
63
|
+
mock_route.expect(:command, true)
|
64
|
+
mock_route.expect(:pattern, /^message$/)
|
65
|
+
|
66
|
+
assert_equal message.match_route?(mock_route), false
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_route_match_if_command_true_and_route_command_false
|
70
|
+
message = create_message('pepito', 'pepito message')
|
71
|
+
|
72
|
+
mock_route = MiniTest::Mock.new
|
73
|
+
mock_route.expect(:command, false)
|
74
|
+
mock_route.expect(:command, false)
|
75
|
+
mock_route.expect(:pattern, /^message$/)
|
76
|
+
|
77
|
+
assert_equal message.match_route?(mock_route), false
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_route_match_if_command_false_and_route_command_true
|
81
|
+
message = create_message('pepito', 'message')
|
82
|
+
|
83
|
+
mock_route = MiniTest::Mock.new
|
84
|
+
mock_route.expect(:command, true)
|
85
|
+
mock_route.expect(:command, true)
|
86
|
+
mock_route.expect(:pattern, /^message$/)
|
87
|
+
|
88
|
+
assert_equal message.match_route?(mock_route), false
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def create_message(name, body)
|
94
|
+
mock_robot = MiniTest::Mock.new
|
95
|
+
mock_robot.expect(:name, name)
|
96
|
+
mock_robot.expect(:name, name)
|
97
|
+
mock_robot.expect(:name, name)
|
98
|
+
|
99
|
+
Pepito::Message.new(mock_robot, nil, body)
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,259 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/robot'
|
3
|
+
|
4
|
+
class TestPepitoRobot < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
ENV['LOG_FILE'] = '/dev/null'
|
7
|
+
|
8
|
+
@mock_http_api = MiniTest::Mock.new
|
9
|
+
@mock_database = MiniTest::Mock.new
|
10
|
+
@mock_database.expect(:get, nil, ['name'])
|
11
|
+
|
12
|
+
Pepito::HTTPApi::RackApp.stub :new, @mock_http_api do
|
13
|
+
Pepito::Database.stub :new, @mock_database do
|
14
|
+
@robot = Pepito::Robot.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_attributes
|
20
|
+
assert_equal 'pepito', @robot.name
|
21
|
+
assert_equal Pepito::WebApp::App, @robot.web_app
|
22
|
+
assert_instance_of Logger, @robot.logger
|
23
|
+
assert_instance_of Hash, @robot.handlers
|
24
|
+
assert_instance_of Hash, @robot.adapters
|
25
|
+
assert_instance_of Array, @robot.default_adapters
|
26
|
+
assert_instance_of Array, @robot.default_handlers
|
27
|
+
assert_empty @robot.handlers
|
28
|
+
assert_empty @robot.adapters
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_methods
|
32
|
+
assert_respond_to @robot, :run
|
33
|
+
assert_respond_to @robot, :receive_message
|
34
|
+
assert_respond_to @robot, :start_handler
|
35
|
+
assert_respond_to @robot, :stop_handler
|
36
|
+
assert_respond_to @robot, :handler?
|
37
|
+
assert_respond_to @robot, :handlers_list
|
38
|
+
assert_respond_to @robot, :start_adapter
|
39
|
+
assert_respond_to @robot, :stop_adapter
|
40
|
+
assert_respond_to @robot, :adapter?
|
41
|
+
assert_respond_to @robot, :adapters_list
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_handlers_list
|
45
|
+
assert_instance_of Array, @robot.handlers_list
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_adapters_list
|
49
|
+
assert_instance_of Array, @robot.adapters_list
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_start_handler
|
53
|
+
# Fail to start if handler is running
|
54
|
+
@robot.handlers.stub :key?, true do
|
55
|
+
assert_equal 1, @robot.start_handler('')
|
56
|
+
end
|
57
|
+
|
58
|
+
# Fail to start if handler does not exist
|
59
|
+
@robot.handlers.stub :key?, false do
|
60
|
+
assert_equal 2, @robot.start_handler('')
|
61
|
+
end
|
62
|
+
|
63
|
+
# Fail with other errors
|
64
|
+
@robot.handlers.stub :key?, false do
|
65
|
+
mock_handler = Class.new do
|
66
|
+
def initialize(_robot)
|
67
|
+
raise 'error'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
Pepito::Handlers.stub :const_get, mock_handler do
|
71
|
+
assert_equal 3, @robot.start_handler('')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Start handler successfully
|
76
|
+
@robot.handlers.stub :key?, false do
|
77
|
+
name = 'handler_name'
|
78
|
+
|
79
|
+
mock_handler = MiniTest::Mock.new
|
80
|
+
mock_handler.expect(:run, nil)
|
81
|
+
mock_handler.expect(:start, nil)
|
82
|
+
|
83
|
+
mock_handler_klass = MiniTest::Mock.new
|
84
|
+
mock_handler_klass.expect(:new, mock_handler, [@robot])
|
85
|
+
|
86
|
+
mock_router = MiniTest::Mock.new
|
87
|
+
mock_router.expect(:uncompile, nil)
|
88
|
+
|
89
|
+
@mock_http_api.expect(:router, mock_router)
|
90
|
+
@mock_database.expect(:sadd, nil, ['handlers', name])
|
91
|
+
|
92
|
+
Pepito::Handlers.stub :const_get, mock_handler_klass do
|
93
|
+
assert_equal 0, @robot.start_handler(name)
|
94
|
+
assert mock_handler.verify
|
95
|
+
assert mock_router.verify
|
96
|
+
assert mock_handler_klass.verify
|
97
|
+
assert @mock_http_api.verify
|
98
|
+
assert @mock_database.verify
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_stop_handler
|
104
|
+
# Fail to stop if handler is in the default handlers list
|
105
|
+
@robot.default_handlers.stub :include?, true do
|
106
|
+
assert_equal 1, @robot.stop_handler('')
|
107
|
+
end
|
108
|
+
|
109
|
+
# Fail to stop if handler is not running
|
110
|
+
@robot.default_handlers.stub :include?, false do
|
111
|
+
@robot.handlers.stub :key?, false do
|
112
|
+
assert_equal 2, @robot.stop_handler('')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Stop successfully otherwise
|
117
|
+
@robot.default_handlers.stub :include?, false do
|
118
|
+
@robot.handlers.stub :key?, true do
|
119
|
+
@robot.handlers.stub :delete, nil do
|
120
|
+
name = 'handler'
|
121
|
+
mock_router = MiniTest::Mock.new
|
122
|
+
mock_router.expect(:reset!, nil)
|
123
|
+
@mock_database.expect(:srem, nil, ['handlers', name])
|
124
|
+
@mock_http_api.expect(:router, mock_router)
|
125
|
+
|
126
|
+
assert_equal 0, @robot.stop_handler(name)
|
127
|
+
assert mock_router.verify
|
128
|
+
assert @mock_http_api.verify
|
129
|
+
assert @mock_database.verify
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_handler?
|
136
|
+
@robot.handlers.stub :key?, true do
|
137
|
+
assert @robot.handler?('')
|
138
|
+
end
|
139
|
+
@robot.handlers.stub :key?, false do
|
140
|
+
refute @robot.handler?('')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_start_adapter
|
145
|
+
# Fail to start if handler is running
|
146
|
+
@robot.adapters.stub :key?, true do
|
147
|
+
assert_equal 1, @robot.start_adapter('', {})
|
148
|
+
end
|
149
|
+
|
150
|
+
# Fail to start if handler does not exist
|
151
|
+
@robot.adapters.stub :key?, false do
|
152
|
+
assert_equal 2, @robot.start_adapter('', {})
|
153
|
+
end
|
154
|
+
|
155
|
+
# Fail if required methods missing
|
156
|
+
@robot.adapters.stub :key?, false do
|
157
|
+
mock_adapter = Class.new do
|
158
|
+
def initialize(_robot, _config)
|
159
|
+
raise Pepito::Errors::RequiredMethodsError.new([]), ''
|
160
|
+
end
|
161
|
+
end
|
162
|
+
Pepito::Adapters.stub :const_get, mock_adapter do
|
163
|
+
assert_equal 3, @robot.start_adapter('', {})
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# Fail if missing configuration
|
168
|
+
@robot.adapters.stub :key?, false do
|
169
|
+
mock_adapter = Class.new do
|
170
|
+
def initialize(_robot, _config)
|
171
|
+
raise Pepito::Errors::MissingConfigurationValueError.new([]), ''
|
172
|
+
end
|
173
|
+
end
|
174
|
+
Pepito::Adapters.stub :const_get, mock_adapter do
|
175
|
+
assert_equal 4, @robot.start_adapter('', {})
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
# Fail with other errors
|
180
|
+
@robot.adapters.stub :key?, false do
|
181
|
+
mock_adapter = Class.new do
|
182
|
+
def initialize(_robot, _config)
|
183
|
+
raise 'error'
|
184
|
+
end
|
185
|
+
end
|
186
|
+
Pepito::Adapters.stub :const_get, mock_adapter do
|
187
|
+
assert_equal 5, @robot.start_adapter('', {})
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# Start adapter successfully
|
192
|
+
@robot.adapters.stub :key?, false do
|
193
|
+
name = 'adapter_name'
|
194
|
+
config = { 'name' => 'option' }
|
195
|
+
|
196
|
+
mock_adapter = MiniTest::Mock.new
|
197
|
+
mock_adapter.expect(:run, nil)
|
198
|
+
|
199
|
+
mock_adapter_klass = MiniTest::Mock.new
|
200
|
+
mock_adapter_klass.expect(:new, mock_adapter, [@robot, config])
|
201
|
+
|
202
|
+
@mock_database.expect(:sadd, nil, ['adapters', name])
|
203
|
+
@mock_database.expect(:del, nil, [name])
|
204
|
+
config.each do |k, v|
|
205
|
+
@mock_database.expect(:hset, nil, [name, k, v])
|
206
|
+
end
|
207
|
+
|
208
|
+
Pepito::Adapters.stub :const_get, mock_adapter_klass do
|
209
|
+
Thread.stub :new, nil do
|
210
|
+
assert_equal 0, @robot.start_adapter(name, config)
|
211
|
+
assert mock_adapter.verify
|
212
|
+
assert mock_adapter_klass.verify
|
213
|
+
assert @mock_database.verify
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def test_stop_adapter
|
220
|
+
# Fail to stop if adapter is in the default adapters list
|
221
|
+
@robot.default_adapters.stub :include?, true do
|
222
|
+
assert_equal 1, @robot.stop_adapter('')
|
223
|
+
end
|
224
|
+
|
225
|
+
# Fail to stop if adapter is not running
|
226
|
+
@robot.default_adapters.stub :include?, false do
|
227
|
+
@robot.adapters.stub :key?, false do
|
228
|
+
assert_equal 2, @robot.stop_adapter('')
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
# Stop successfully otherwise
|
233
|
+
@robot.default_adapters.stub :include?, false do
|
234
|
+
@robot.adapters.stub :key?, true do
|
235
|
+
@robot.adapters.stub :delete, nil do
|
236
|
+
mock_adapter = MiniTest::Mock.new
|
237
|
+
mock_adapter.expect(:stop, nil)
|
238
|
+
@robot.adapters.stub :[], mock_adapter do
|
239
|
+
name = 'adapter'
|
240
|
+
@mock_database.expect(:srem, nil, ['adapters', name])
|
241
|
+
|
242
|
+
assert_equal 0, @robot.stop_adapter(name)
|
243
|
+
assert mock_adapter.verify
|
244
|
+
assert @mock_database.verify
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_adapter?
|
252
|
+
@robot.adapters.stub :key?, true do
|
253
|
+
assert @robot.adapter?('')
|
254
|
+
end
|
255
|
+
@robot.adapters.stub :key?, false do
|
256
|
+
refute @robot.adapter?('')
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'pepito/source'
|
3
|
+
|
4
|
+
class TestPepitoSource < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@mock_adapter = MiniTest::Mock.new
|
7
|
+
@mock_adapter.expect(:==, true, [@mock_adapter])
|
8
|
+
|
9
|
+
@source = Pepito::Source.new(@mock_adapter, 'user', 'room', false)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_adapter_assignment
|
13
|
+
assert_equal @source.adapter, @mock_adapter
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_user_assignment
|
17
|
+
assert_equal @source.user, 'user'
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_room_assignment
|
21
|
+
assert_equal @source.room, 'room'
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_private_message_assignment
|
25
|
+
assert_equal @source.private_message, false
|
26
|
+
end
|
27
|
+
end
|