-
Notifications
You must be signed in to change notification settings - Fork 122
/
active_job_scheduler_spec.rb
95 lines (82 loc) · 2.89 KB
/
active_job_scheduler_spec.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
require "spec_helper"
require "ruby_event_store/spec/scheduler_lint"
module RailsEventStore
RSpec.describe ActiveJobScheduler do
around do |example|
begin
original_logger = ActiveJob::Base.logger
ActiveJob::Base.logger = nil
original_adapter = ActiveJob::Base.queue_adapter
ActiveJob::Base.queue_adapter = :test
example.run
ensure
ActiveJob::Base.logger = original_logger
ActiveJob::Base.queue_adapter = original_adapter
end
end
before(:each) { MyAsyncHandler.reset }
it_behaves_like :scheduler, ActiveJobScheduler.new(serializer: RubyEventStore::Serializers::YAML)
it_behaves_like :scheduler, ActiveJobScheduler.new(serializer: RubyEventStore::NULL)
let(:event) do
TimeEnrichment.with(Event.new(event_id: "83c3187f-84f6-4da7-8206-73af5aca7cc8"), timestamp: Time.utc(2019, 9, 30))
end
let(:record) { RubyEventStore::Mappers::Default.new.event_to_record(event) }
describe "#verify" do
specify do
scheduler = ActiveJobScheduler.new(serializer: RubyEventStore::NULL)
proper_handler = Class.new(ActiveJob::Base)
expect(scheduler.verify(proper_handler)).to eq(true)
end
specify do
scheduler = ActiveJobScheduler.new(serializer: RubyEventStore::NULL)
some_class = Class.new
expect(scheduler.verify(some_class)).to eq(false)
end
specify do
scheduler = ActiveJobScheduler.new(serializer: RubyEventStore::NULL)
expect(scheduler.verify(ActiveJob::Base)).to eq(false)
end
specify do
scheduler = ActiveJobScheduler.new(serializer: RubyEventStore::NULL)
expect(scheduler.verify(Object.new)).to eq(false)
end
end
describe "#call" do
specify do
scheduler = ActiveJobScheduler.new(serializer: RubyEventStore::Serializers::YAML)
scheduler.call(MyAsyncHandler, record)
enqueued_jobs = ActiveJob::Base.queue_adapter.enqueued_jobs
expect(enqueued_jobs.size).to eq(1)
expect(enqueued_jobs[0]).to include(
{
job: MyAsyncHandler,
args: [
{
"event_id" => "83c3187f-84f6-4da7-8206-73af5aca7cc8",
"event_type" => "RubyEventStore::Event",
"data" => "--- {}\n",
"metadata" => "--- {}\n",
"timestamp" => "2019-09-30T00:00:00.000000Z",
"valid_at" => "2019-09-30T00:00:00.000000Z",
"_aj_symbol_keys" => %w[event_id data metadata event_type timestamp valid_at]
}
],
queue: "default"
}
)
end
end
class MyAsyncHandler < ActiveJob::Base
@@received = nil
def self.reset
@@received = nil
end
def self.received
@@received
end
def perform(event)
@@received = event
end
end
end
end