qs 0.3.0 → 0.4.0
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.
- data/bench/config.qs +4 -27
- data/bench/dispatcher.qs +24 -0
- data/bench/report.rb +80 -10
- data/bench/report.txt +10 -3
- data/bench/setup.rb +55 -0
- data/lib/qs.rb +75 -15
- data/lib/qs/client.rb +73 -22
- data/lib/qs/daemon.rb +21 -21
- data/lib/qs/daemon_data.rb +4 -4
- data/lib/qs/dispatch_job.rb +36 -0
- data/lib/qs/dispatch_job_handler.rb +79 -0
- data/lib/qs/dispatcher_queue.rb +19 -0
- data/lib/qs/error_handler.rb +12 -12
- data/lib/qs/event.rb +82 -0
- data/lib/qs/event_handler.rb +34 -0
- data/lib/qs/event_handler_test_helpers.rb +17 -0
- data/lib/qs/job.rb +19 -31
- data/lib/qs/job_handler.rb +6 -63
- data/lib/qs/{test_helpers.rb → job_handler_test_helpers.rb} +2 -2
- data/lib/qs/message.rb +29 -0
- data/lib/qs/message_handler.rb +84 -0
- data/lib/qs/payload.rb +98 -0
- data/lib/qs/payload_handler.rb +106 -54
- data/lib/qs/queue.rb +39 -6
- data/lib/qs/queue_item.rb +33 -0
- data/lib/qs/route.rb +7 -7
- data/lib/qs/runner.rb +6 -5
- data/lib/qs/test_runner.rb +41 -13
- data/lib/qs/version.rb +1 -1
- data/qs.gemspec +1 -1
- data/test/helper.rb +1 -1
- data/test/support/app_daemon.rb +77 -11
- data/test/support/factory.rb +34 -0
- data/test/system/daemon_tests.rb +146 -77
- data/test/system/queue_tests.rb +87 -0
- data/test/unit/client_tests.rb +184 -45
- data/test/unit/daemon_data_tests.rb +4 -4
- data/test/unit/daemon_tests.rb +32 -32
- data/test/unit/dispatch_job_handler_tests.rb +163 -0
- data/test/unit/dispatch_job_tests.rb +75 -0
- data/test/unit/dispatcher_queue_tests.rb +42 -0
- data/test/unit/error_handler_tests.rb +9 -9
- data/test/unit/event_handler_test_helpers_tests.rb +55 -0
- data/test/unit/event_handler_tests.rb +63 -0
- data/test/unit/event_tests.rb +162 -0
- data/test/unit/{test_helper_tests.rb → job_handler_test_helper_tests.rb} +13 -19
- data/test/unit/job_handler_tests.rb +17 -210
- data/test/unit/job_tests.rb +49 -79
- data/test/unit/message_handler_tests.rb +235 -0
- data/test/unit/message_tests.rb +64 -0
- data/test/unit/payload_handler_tests.rb +285 -86
- data/test/unit/payload_tests.rb +139 -0
- data/test/unit/qs_runner_tests.rb +6 -6
- data/test/unit/qs_tests.rb +167 -28
- data/test/unit/queue_item_tests.rb +51 -0
- data/test/unit/queue_tests.rb +126 -18
- data/test/unit/route_tests.rb +12 -13
- data/test/unit/runner_tests.rb +10 -10
- data/test/unit/test_runner_tests.rb +117 -24
- metadata +51 -21
- data/bench/queue.rb +0 -8
- data/lib/qs/redis_item.rb +0 -33
- data/test/unit/redis_item_tests.rb +0 -49
@@ -13,11 +13,11 @@ class Qs::ErrorHandler
|
|
13
13
|
@daemon_data = Qs::DaemonData.new
|
14
14
|
@queue_redis_key = Qs::Queue::RedisKey.new(Factory.string)
|
15
15
|
@context_hash = {
|
16
|
-
:daemon_data
|
17
|
-
:queue_redis_key
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:handler_class
|
16
|
+
:daemon_data => @daemon_data,
|
17
|
+
:queue_redis_key => @queue_redis_key,
|
18
|
+
:encoded_payload => Factory.string,
|
19
|
+
:message => Factory.string,
|
20
|
+
:handler_class => Factory.string
|
21
21
|
}
|
22
22
|
|
23
23
|
@handler_class = Qs::ErrorHandler
|
@@ -107,15 +107,15 @@ class Qs::ErrorHandler
|
|
107
107
|
subject{ @context }
|
108
108
|
|
109
109
|
should have_readers :daemon_data
|
110
|
-
should have_readers :queue_name, :
|
111
|
-
should have_readers :
|
110
|
+
should have_readers :queue_name, :encoded_payload
|
111
|
+
should have_readers :message, :handler_class
|
112
112
|
|
113
113
|
should "know its attributes" do
|
114
114
|
assert_equal @context_hash[:daemon_data], subject.daemon_data
|
115
115
|
exp = Qs::Queue::RedisKey.parse_name(@context_hash[:queue_redis_key])
|
116
116
|
assert_equal exp, subject.queue_name
|
117
|
-
assert_equal @context_hash[:
|
118
|
-
assert_equal @context_hash[:
|
117
|
+
assert_equal @context_hash[:encoded_payload], subject.encoded_payload
|
118
|
+
assert_equal @context_hash[:message], subject.message
|
119
119
|
assert_equal @context_hash[:handler_class], subject.handler_class
|
120
120
|
end
|
121
121
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'qs/event_handler_test_helpers'
|
3
|
+
|
4
|
+
require 'qs/event_handler'
|
5
|
+
require 'qs/test_runner'
|
6
|
+
require 'test/support/runner_spy'
|
7
|
+
|
8
|
+
module Qs::EventHandler::TestHelpers
|
9
|
+
|
10
|
+
class UnitTests < Assert::Context
|
11
|
+
desc "Qs::TestHelpers"
|
12
|
+
setup do
|
13
|
+
@test_helpers = Qs::EventHandler::TestHelpers
|
14
|
+
end
|
15
|
+
subject{ @test_helpers }
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class MixinTests < UnitTests
|
20
|
+
desc "as a mixin"
|
21
|
+
setup do
|
22
|
+
@handler_class = Class.new
|
23
|
+
@args = { Factory.string => Factory.string }
|
24
|
+
|
25
|
+
@runner_spy = nil
|
26
|
+
Assert.stub(Qs::EventTestRunner, :new) do |*args|
|
27
|
+
@runner_spy = RunnerSpy.new(*args)
|
28
|
+
end
|
29
|
+
|
30
|
+
context_class = Class.new{ include Qs::EventHandler::TestHelpers }
|
31
|
+
@context = context_class.new
|
32
|
+
end
|
33
|
+
subject{ @context }
|
34
|
+
|
35
|
+
should have_imeths :test_runner, :test_handler
|
36
|
+
|
37
|
+
should "build an event test runner for a given handler using `test_runner`" do
|
38
|
+
result = subject.test_runner(@handler_class, @args)
|
39
|
+
|
40
|
+
assert_not_nil @runner_spy
|
41
|
+
assert_equal @handler_class, @runner_spy.handler_class
|
42
|
+
assert_equal @args, @runner_spy.args
|
43
|
+
assert_equal @runner_spy, result
|
44
|
+
end
|
45
|
+
|
46
|
+
should "return an initialized handler instance using `test_handler`" do
|
47
|
+
result = subject.test_handler(@handler_class, @args)
|
48
|
+
|
49
|
+
assert_not_nil @runner_spy
|
50
|
+
assert_equal @runner_spy.handler, result
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'qs/event_handler'
|
3
|
+
|
4
|
+
require 'qs/event'
|
5
|
+
require 'qs/message_handler'
|
6
|
+
|
7
|
+
module Qs::EventHandler
|
8
|
+
|
9
|
+
class UnitTests < Assert::Context
|
10
|
+
desc "Qs::EventHandler"
|
11
|
+
setup do
|
12
|
+
@handler_class = Class.new{ include Qs::EventHandler }
|
13
|
+
end
|
14
|
+
subject{ @handler_class }
|
15
|
+
|
16
|
+
should "be a message handler" do
|
17
|
+
assert_includes Qs::MessageHandler, subject
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class InitTests < UnitTests
|
23
|
+
desc "when init"
|
24
|
+
setup do
|
25
|
+
@runner = FakeRunner.new
|
26
|
+
@handler = TestEventHandler.new(@runner)
|
27
|
+
end
|
28
|
+
subject{ @handler }
|
29
|
+
|
30
|
+
should "know its event, channel, name and published at" do
|
31
|
+
assert_equal @runner.message, subject.public_event
|
32
|
+
assert_equal subject.public_event.channel, subject.public_event_channel
|
33
|
+
assert_equal subject.public_event.name, subject.public_event_name
|
34
|
+
assert_equal subject.public_event.published_at, subject.public_event_published_at
|
35
|
+
end
|
36
|
+
|
37
|
+
should "have a custom inspect" do
|
38
|
+
reference = '0x0%x' % (subject.object_id << 1)
|
39
|
+
expected = "#<#{subject.class}:#{reference} " \
|
40
|
+
"@event=#{@handler.public_event.inspect}>"
|
41
|
+
assert_equal expected, subject.inspect
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
class TestEventHandler
|
47
|
+
include Qs::EventHandler
|
48
|
+
|
49
|
+
def public_event; event; end
|
50
|
+
def public_event_channel; event_channel; end
|
51
|
+
def public_event_name; event_name; end
|
52
|
+
def public_event_published_at; event_published_at; end
|
53
|
+
end
|
54
|
+
|
55
|
+
class FakeRunner
|
56
|
+
attr_accessor :message
|
57
|
+
|
58
|
+
def initialize
|
59
|
+
@message = Factory.event
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'qs/event'
|
3
|
+
|
4
|
+
require 'qs/message'
|
5
|
+
|
6
|
+
class Qs::Event
|
7
|
+
|
8
|
+
class UnitTests < Assert::Context
|
9
|
+
desc "Qs::Event"
|
10
|
+
setup do
|
11
|
+
@channel = Factory.string
|
12
|
+
@name = Factory.string
|
13
|
+
@params = { Factory.string => Factory.string }
|
14
|
+
@publisher = Factory.string
|
15
|
+
@published_at = Factory.time
|
16
|
+
|
17
|
+
@event_class = Qs::Event
|
18
|
+
end
|
19
|
+
subject{ @event_class }
|
20
|
+
|
21
|
+
should "know its payload type" do
|
22
|
+
assert_equal 'event', PAYLOAD_TYPE
|
23
|
+
end
|
24
|
+
|
25
|
+
should "be a message" do
|
26
|
+
assert subject < Qs::Message
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class InitTests < UnitTests
|
32
|
+
desc "when init"
|
33
|
+
setup do
|
34
|
+
@current_time = Factory.time
|
35
|
+
Assert.stub(Time, :now).with{ @current_time }
|
36
|
+
|
37
|
+
@event = @event_class.new(@channel, @name, {
|
38
|
+
:params => @params,
|
39
|
+
:publisher => @publisher,
|
40
|
+
:published_at => @published_at
|
41
|
+
})
|
42
|
+
end
|
43
|
+
subject{ @event }
|
44
|
+
|
45
|
+
should have_readers :channel, :name, :publisher, :published_at
|
46
|
+
should have_imeths :route_name, :subscribers_redis_key
|
47
|
+
|
48
|
+
should "know its attributes" do
|
49
|
+
assert_equal PAYLOAD_TYPE, subject.payload_type
|
50
|
+
assert_equal @channel, subject.channel
|
51
|
+
assert_equal @name, subject.name
|
52
|
+
assert_equal @params, subject.params
|
53
|
+
assert_equal @publisher, subject.publisher
|
54
|
+
assert_equal @published_at, subject.published_at
|
55
|
+
end
|
56
|
+
|
57
|
+
should "default its params and published at to the current time" do
|
58
|
+
event = @event_class.new(@channel, @name)
|
59
|
+
assert_equal({}, event.params)
|
60
|
+
assert_equal @current_time, event.published_at
|
61
|
+
end
|
62
|
+
|
63
|
+
should "know its route name" do
|
64
|
+
exp = RouteName.new(@channel, @name)
|
65
|
+
result = subject.route_name
|
66
|
+
assert_equal exp, result
|
67
|
+
assert_same result, subject.route_name
|
68
|
+
end
|
69
|
+
|
70
|
+
should "know its subscribers redis key" do
|
71
|
+
exp = SubscribersRedisKey.new(subject.route_name)
|
72
|
+
assert_equal exp, subject.subscribers_redis_key
|
73
|
+
end
|
74
|
+
|
75
|
+
should "have a custom inspect" do
|
76
|
+
reference = '0x0%x' % (subject.object_id << 1)
|
77
|
+
exp = "#<Qs::Event:#{reference} " \
|
78
|
+
"@channel=#{subject.channel.inspect} " \
|
79
|
+
"@name=#{subject.name.inspect} " \
|
80
|
+
"@params=#{subject.params.inspect} " \
|
81
|
+
"@publisher=#{subject.publisher.inspect} " \
|
82
|
+
"@published_at=#{subject.published_at.inspect}>"
|
83
|
+
assert_equal exp, subject.inspect
|
84
|
+
end
|
85
|
+
|
86
|
+
should "be comparable" do
|
87
|
+
matching = @event_class.new(@channel, @name, {
|
88
|
+
:params => @params,
|
89
|
+
:publisher => @publisher,
|
90
|
+
:published_at => @published_at
|
91
|
+
})
|
92
|
+
assert_equal matching, subject
|
93
|
+
|
94
|
+
non_matching = @event_class.new(Factory.string, @name, {
|
95
|
+
:params => @params,
|
96
|
+
:publisher => @publisher,
|
97
|
+
:published_at => @published_at
|
98
|
+
})
|
99
|
+
assert_not_equal non_matching, subject
|
100
|
+
non_matching = @event_class.new(@channel, Factory.string, {
|
101
|
+
:params => @params,
|
102
|
+
:publisher => @publisher,
|
103
|
+
:published_at => @published_at
|
104
|
+
})
|
105
|
+
assert_not_equal non_matching, subject
|
106
|
+
non_matching = @event_class.new(@channel, @name, {
|
107
|
+
:params => { Factory.string => Factory.string },
|
108
|
+
:publisher => @publisher,
|
109
|
+
:published_at => @published_at
|
110
|
+
})
|
111
|
+
assert_not_equal non_matching, subject
|
112
|
+
non_matching = @event_class.new(@channel, @name, {
|
113
|
+
:params => @params,
|
114
|
+
:publisher => Factory.string,
|
115
|
+
:published_at => @published_at
|
116
|
+
})
|
117
|
+
assert_not_equal non_matching, subject
|
118
|
+
non_matching = @event_class.new(@channel, @name, {
|
119
|
+
:params => @params,
|
120
|
+
:publisher => @publisher,
|
121
|
+
:published_at => Factory.time
|
122
|
+
})
|
123
|
+
assert_not_equal non_matching, subject
|
124
|
+
end
|
125
|
+
|
126
|
+
should "raise an error when given invalid attributes" do
|
127
|
+
assert_raises(InvalidError){ @event_class.new(nil, @name) }
|
128
|
+
assert_raises(InvalidError){ @event_class.new(@channel, nil) }
|
129
|
+
assert_raises(InvalidError) do
|
130
|
+
@event_class.new(@channel, @name, :params => Factory.string)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
class RouteNameTests < UnitTests
|
137
|
+
desc "RouteName"
|
138
|
+
subject{ RouteName }
|
139
|
+
|
140
|
+
should have_imeths :new
|
141
|
+
|
142
|
+
should "return an event route name given an event channel and event name" do
|
143
|
+
assert_equal "#{@channel}:#{@name}", subject.new(@channel, @name)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
class SubscribersRedisKeyTests < UnitTests
|
149
|
+
desc "SubscribersRedisKey"
|
150
|
+
subject{ SubscribersRedisKey }
|
151
|
+
|
152
|
+
should have_imeths :new
|
153
|
+
|
154
|
+
should "return an event subscribers redis key given an event route name" do
|
155
|
+
event_route_name = RouteName.new(@channel, @name)
|
156
|
+
exp = "events:#{event_route_name}:subscribers"
|
157
|
+
assert_equal exp, subject.new(event_route_name)
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
@@ -1,15 +1,16 @@
|
|
1
1
|
require 'assert'
|
2
|
-
require 'qs/
|
2
|
+
require 'qs/job_handler_test_helpers'
|
3
3
|
|
4
4
|
require 'qs/job_handler'
|
5
|
+
require 'qs/test_runner'
|
5
6
|
require 'test/support/runner_spy'
|
6
7
|
|
7
|
-
module Qs::TestHelpers
|
8
|
+
module Qs::JobHandler::TestHelpers
|
8
9
|
|
9
10
|
class UnitTests < Assert::Context
|
10
11
|
desc "Qs::TestHelpers"
|
11
12
|
setup do
|
12
|
-
@test_helpers = Qs::TestHelpers
|
13
|
+
@test_helpers = Qs::JobHandler::TestHelpers
|
13
14
|
end
|
14
15
|
subject{ @test_helpers }
|
15
16
|
|
@@ -17,29 +18,23 @@ module Qs::TestHelpers
|
|
17
18
|
|
18
19
|
class MixinTests < UnitTests
|
19
20
|
desc "as a mixin"
|
20
|
-
setup do
|
21
|
-
context_class = Class.new{ include Qs::TestHelpers }
|
22
|
-
@context = context_class.new
|
23
|
-
end
|
24
|
-
subject{ @context }
|
25
|
-
|
26
|
-
should have_imeths :test_runner, :test_handler
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
class HandlerTestRunnerTests < MixinTests
|
31
|
-
desc "for handler testing"
|
32
21
|
setup do
|
33
22
|
@handler_class = Class.new
|
34
23
|
@args = { Factory.string => Factory.string }
|
35
24
|
|
36
25
|
@runner_spy = nil
|
37
|
-
Assert.stub(Qs::
|
26
|
+
Assert.stub(Qs::JobTestRunner, :new) do |*args|
|
38
27
|
@runner_spy = RunnerSpy.new(*args)
|
39
28
|
end
|
29
|
+
|
30
|
+
context_class = Class.new{ include Qs::JobHandler::TestHelpers }
|
31
|
+
@context = context_class.new
|
40
32
|
end
|
33
|
+
subject{ @context }
|
41
34
|
|
42
|
-
should
|
35
|
+
should have_imeths :test_runner, :test_handler
|
36
|
+
|
37
|
+
should "build a job test runner for a given handler using `test_runner`" do
|
43
38
|
result = subject.test_runner(@handler_class, @args)
|
44
39
|
|
45
40
|
assert_not_nil @runner_spy
|
@@ -48,7 +43,7 @@ module Qs::TestHelpers
|
|
48
43
|
assert_equal @runner_spy, result
|
49
44
|
end
|
50
45
|
|
51
|
-
should "return an initialized handler instance" do
|
46
|
+
should "return an initialized handler instance using `test_handler`" do
|
52
47
|
result = subject.test_handler(@handler_class, @args)
|
53
48
|
|
54
49
|
assert_not_nil @runner_spy
|
@@ -58,4 +53,3 @@ module Qs::TestHelpers
|
|
58
53
|
end
|
59
54
|
|
60
55
|
end
|
61
|
-
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'qs/job_handler'
|
3
3
|
|
4
|
+
require 'qs/message_handler'
|
5
|
+
|
4
6
|
module Qs::JobHandler
|
5
7
|
|
6
8
|
class UnitTests < Assert::Context
|
@@ -10,136 +12,8 @@ module Qs::JobHandler
|
|
10
12
|
end
|
11
13
|
subject{ @handler_class }
|
12
14
|
|
13
|
-
should
|
14
|
-
|
15
|
-
should have_imeths :before_init_callbacks, :after_init_callbacks
|
16
|
-
should have_imeths :before_run_callbacks, :after_run_callbacks
|
17
|
-
should have_imeths :before, :after
|
18
|
-
should have_imeths :before_init, :after_init
|
19
|
-
should have_imeths :before_run, :after_run
|
20
|
-
should have_imeths :prepend_before, :prepend_after
|
21
|
-
should have_imeths :prepend_before_init, :prepend_after_init
|
22
|
-
should have_imeths :prepend_before_run, :prepend_after_run
|
23
|
-
|
24
|
-
should "allow reading/writing its timeout" do
|
25
|
-
assert_nil subject.timeout
|
26
|
-
value = Factory.integer
|
27
|
-
subject.timeout(value)
|
28
|
-
assert_equal value, subject.timeout
|
29
|
-
end
|
30
|
-
|
31
|
-
should "convert timeout values to floats" do
|
32
|
-
value = Factory.float.to_s
|
33
|
-
subject.timeout(value)
|
34
|
-
assert_equal value.to_f, subject.timeout
|
35
|
-
end
|
36
|
-
|
37
|
-
should "return an empty array by default using `before_callbacks`" do
|
38
|
-
assert_equal [], subject.before_callbacks
|
39
|
-
end
|
40
|
-
|
41
|
-
should "return an empty array by default using `after_callbacks`" do
|
42
|
-
assert_equal [], subject.after_callbacks
|
43
|
-
end
|
44
|
-
|
45
|
-
should "return an empty array by default using `before_init_callbacks`" do
|
46
|
-
assert_equal [], subject.before_init_callbacks
|
47
|
-
end
|
48
|
-
|
49
|
-
should "return an empty array by default using `after_init_callbacks`" do
|
50
|
-
assert_equal [], subject.after_init_callbacks
|
51
|
-
end
|
52
|
-
|
53
|
-
should "return an empty array by default using `before_run_callbacks`" do
|
54
|
-
assert_equal [], subject.before_run_callbacks
|
55
|
-
end
|
56
|
-
|
57
|
-
should "return an empty array by default using `after_run_callbacks`" do
|
58
|
-
assert_equal [], subject.after_run_callbacks
|
59
|
-
end
|
60
|
-
|
61
|
-
should "append a block to the before callbacks using `before`" do
|
62
|
-
subject.before_callbacks << proc{ Factory.string }
|
63
|
-
block = Proc.new{ Factory.string }
|
64
|
-
subject.before(&block)
|
65
|
-
assert_equal block, subject.before_callbacks.last
|
66
|
-
end
|
67
|
-
|
68
|
-
should "append a block to the after callbacks using `after`" do
|
69
|
-
subject.after_callbacks << proc{ Factory.string }
|
70
|
-
block = Proc.new{ Factory.string }
|
71
|
-
subject.after(&block)
|
72
|
-
assert_equal block, subject.after_callbacks.last
|
73
|
-
end
|
74
|
-
|
75
|
-
should "append a block to the before init callbacks using `before_init`" do
|
76
|
-
subject.before_init_callbacks << proc{ Factory.string }
|
77
|
-
block = Proc.new{ Factory.string }
|
78
|
-
subject.before_init(&block)
|
79
|
-
assert_equal block, subject.before_init_callbacks.last
|
80
|
-
end
|
81
|
-
|
82
|
-
should "append a block to the after init callbacks using `after_init`" do
|
83
|
-
subject.after_init_callbacks << proc{ Factory.string }
|
84
|
-
block = Proc.new{ Factory.string }
|
85
|
-
subject.after_init(&block)
|
86
|
-
assert_equal block, subject.after_init_callbacks.last
|
87
|
-
end
|
88
|
-
|
89
|
-
should "append a block to the before run callbacks using `before_run`" do
|
90
|
-
subject.before_run_callbacks << proc{ Factory.string }
|
91
|
-
block = Proc.new{ Factory.string }
|
92
|
-
subject.before_run(&block)
|
93
|
-
assert_equal block, subject.before_run_callbacks.last
|
94
|
-
end
|
95
|
-
|
96
|
-
should "append a block to the after run callbacks using `after_run`" do
|
97
|
-
subject.after_run_callbacks << proc{ Factory.string }
|
98
|
-
block = Proc.new{ Factory.string }
|
99
|
-
subject.after_run(&block)
|
100
|
-
assert_equal block, subject.after_run_callbacks.last
|
101
|
-
end
|
102
|
-
|
103
|
-
should "prepend a block to the before callbacks using `prepend_before`" do
|
104
|
-
subject.before_callbacks << proc{ Factory.string }
|
105
|
-
block = Proc.new{ Factory.string }
|
106
|
-
subject.prepend_before(&block)
|
107
|
-
assert_equal block, subject.before_callbacks.first
|
108
|
-
end
|
109
|
-
|
110
|
-
should "prepend a block to the after callbacks using `prepend_after`" do
|
111
|
-
subject.after_callbacks << proc{ Factory.string }
|
112
|
-
block = Proc.new{ Factory.string }
|
113
|
-
subject.prepend_after(&block)
|
114
|
-
assert_equal block, subject.after_callbacks.first
|
115
|
-
end
|
116
|
-
|
117
|
-
should "prepend a block to the before init callbacks using `prepend_before_init`" do
|
118
|
-
subject.before_init_callbacks << proc{ Factory.string }
|
119
|
-
block = Proc.new{ Factory.string }
|
120
|
-
subject.prepend_before_init(&block)
|
121
|
-
assert_equal block, subject.before_init_callbacks.first
|
122
|
-
end
|
123
|
-
|
124
|
-
should "prepend a block to the after init callbacks using `prepend_after_init`" do
|
125
|
-
subject.after_init_callbacks << proc{ Factory.string }
|
126
|
-
block = Proc.new{ Factory.string }
|
127
|
-
subject.prepend_after_init(&block)
|
128
|
-
assert_equal block, subject.after_init_callbacks.first
|
129
|
-
end
|
130
|
-
|
131
|
-
should "prepend a block to the before run callbacks using `prepend_before_run`" do
|
132
|
-
subject.before_run_callbacks << proc{ Factory.string }
|
133
|
-
block = Proc.new{ Factory.string }
|
134
|
-
subject.prepend_before_run(&block)
|
135
|
-
assert_equal block, subject.before_run_callbacks.first
|
136
|
-
end
|
137
|
-
|
138
|
-
should "prepend a block to the after run callbacks using `prepend_after_run`" do
|
139
|
-
subject.after_run_callbacks << proc{ Factory.string }
|
140
|
-
block = Proc.new{ Factory.string }
|
141
|
-
subject.prepend_after_run(&block)
|
142
|
-
assert_equal block, subject.after_run_callbacks.first
|
15
|
+
should "be a message handler" do
|
16
|
+
assert_includes Qs::MessageHandler, subject
|
143
17
|
end
|
144
18
|
|
145
19
|
end
|
@@ -147,46 +21,22 @@ module Qs::JobHandler
|
|
147
21
|
class InitTests < UnitTests
|
148
22
|
desc "when init"
|
149
23
|
setup do
|
150
|
-
@runner
|
24
|
+
@runner = FakeRunner.new
|
151
25
|
@handler = TestJobHandler.new(@runner)
|
152
26
|
end
|
153
27
|
subject{ @handler }
|
154
28
|
|
155
|
-
should
|
156
|
-
|
157
|
-
|
158
|
-
assert_equal
|
159
|
-
assert_equal @runner.params, subject.public_params
|
160
|
-
assert_equal @runner.logger, subject.public_logger
|
161
|
-
end
|
162
|
-
|
163
|
-
should "call `init!` and its before/after init callbacks using `init`" do
|
164
|
-
subject.init
|
165
|
-
assert_equal 1, subject.first_before_init_call_order
|
166
|
-
assert_equal 2, subject.second_before_init_call_order
|
167
|
-
assert_equal 3, subject.init_call_order
|
168
|
-
assert_equal 4, subject.first_after_init_call_order
|
169
|
-
assert_equal 5, subject.second_after_init_call_order
|
170
|
-
end
|
171
|
-
|
172
|
-
should "call `run!` and its before/after run callbacks using `run`" do
|
173
|
-
subject.run
|
174
|
-
assert_equal 1, subject.first_before_run_call_order
|
175
|
-
assert_equal 2, subject.second_before_run_call_order
|
176
|
-
assert_equal 3, subject.run_call_order
|
177
|
-
assert_equal 4, subject.first_after_run_call_order
|
178
|
-
assert_equal 5, subject.second_after_run_call_order
|
29
|
+
should "know its job, job name and job created at" do
|
30
|
+
assert_equal @runner.message, subject.public_job
|
31
|
+
assert_equal subject.public_job.name, subject.public_job_name
|
32
|
+
assert_equal subject.public_job.created_at, subject.public_job_created_at
|
179
33
|
end
|
180
34
|
|
181
35
|
should "have a custom inspect" do
|
182
36
|
reference = '0x0%x' % (subject.object_id << 1)
|
183
|
-
|
184
|
-
|
185
|
-
assert_equal
|
186
|
-
end
|
187
|
-
|
188
|
-
should "raise a not implemented error when `run!` by default" do
|
189
|
-
assert_raises(NotImplementedError){ @handler_class.new(@runner).run! }
|
37
|
+
exp = "#<#{subject.class}:#{reference} " \
|
38
|
+
"@job=#{@handler.public_job.inspect}>"
|
39
|
+
assert_equal exp, subject.inspect
|
190
40
|
end
|
191
41
|
|
192
42
|
end
|
@@ -194,59 +44,16 @@ module Qs::JobHandler
|
|
194
44
|
class TestJobHandler
|
195
45
|
include Qs::JobHandler
|
196
46
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
attr_reader :first_after_run_call_order, :second_after_run_call_order
|
201
|
-
attr_reader :init_call_order, :run_call_order
|
202
|
-
|
203
|
-
before_init{ @first_before_init_call_order = next_call_order }
|
204
|
-
before_init{ @second_before_init_call_order = next_call_order }
|
205
|
-
|
206
|
-
after_init{ @first_after_init_call_order = next_call_order }
|
207
|
-
after_init{ @second_after_init_call_order = next_call_order }
|
208
|
-
|
209
|
-
before_run{ @first_before_run_call_order = next_call_order }
|
210
|
-
before_run{ @second_before_run_call_order = next_call_order }
|
211
|
-
|
212
|
-
after_run{ @first_after_run_call_order = next_call_order }
|
213
|
-
after_run{ @second_after_run_call_order = next_call_order }
|
214
|
-
|
215
|
-
def init!
|
216
|
-
@init_call_order = next_call_order
|
217
|
-
end
|
218
|
-
|
219
|
-
def run!
|
220
|
-
@run_call_order = next_call_order
|
221
|
-
end
|
222
|
-
|
223
|
-
def public_job
|
224
|
-
job
|
225
|
-
end
|
226
|
-
|
227
|
-
def public_params
|
228
|
-
params
|
229
|
-
end
|
230
|
-
|
231
|
-
def public_logger
|
232
|
-
logger
|
233
|
-
end
|
234
|
-
|
235
|
-
private
|
236
|
-
|
237
|
-
def next_call_order
|
238
|
-
@order ||= 0
|
239
|
-
@order += 1
|
240
|
-
end
|
47
|
+
def public_job; job; end
|
48
|
+
def public_job_name; job_name; end
|
49
|
+
def public_job_created_at; job_created_at; end
|
241
50
|
end
|
242
51
|
|
243
52
|
class FakeRunner
|
244
|
-
attr_accessor :
|
53
|
+
attr_accessor :message
|
245
54
|
|
246
55
|
def initialize
|
247
|
-
@
|
248
|
-
@params = Factory.string
|
249
|
-
@logger = Factory.string
|
56
|
+
@message = Factory.job
|
250
57
|
end
|
251
58
|
end
|
252
59
|
|