forked from methodmissing/aftermath
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.rb
67 lines (55 loc) · 1.54 KB
/
test.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
require 'aftermath'
Bundler.require :test
require 'sqlite3'
Events.assert
Commands.assert
Aggregates.assert
Reporting.boot
require File.expand_path('fixtures.rb', 'test')
class Test::Unit::TestCase
def assert_events(sink, *events)
expected = sink.to_a.map{|e| event_expectation(e) }
assert_equal expected, events, "Expected events #{expected.join(', ')}, got #{sink.to_a.join(', ')}"
end
alias assert_changes assert_events
def assert_no_events(agg)
events = agg.changes.map{|e| event_expectation(e) }
assert agg.changes.empty?, "Expected no events, got #{events.join(', ')}"
end
alias assert_no_changes assert_no_events
def event_store(db = ":memory:", publisher = Aftermath::Channel.new)
Aftermath::EventStore.new(SQLite3::Database.new(db), publisher)
end
def domain_repository(store = nil, db = ":memory:", publisher = Aftermath::Channel.new)
Aftermath::DomainRepository.new(store || event_store(db, publisher))
end
private
def event_expectation(e)
e.class.name =~ /(?:[:]{2})?([a-zA-Z]*)$/
$1.to_sym
end
end
module AggregateTest
attr_reader :queue
def setup
Domain.storage = SQLite3::Database.new(':memory:')
@queue = []
Domain.subscribe{|e| queue << e }
end
def uuid
@uuid ||= Aftermath.uuid
end
def assert_published(*events)
assert_events queue, *events
end
end
module ReportingTest
def self.included(klass)
klass.class_eval do
def setup; Reporting.views.each{|v| v.repository.clear }; end
end
end
def uuid
@uuid ||= Aftermath.uuid
end
end