Module: Sequent::Test::EventStreamHelpers
- Defined in:
- lib/sequent/test/event_stream_helpers.rb
Overview
Use in tests
This provides a nice DSL for generating streams of events. FactoryBot is required when using this helper.
Example for Rspec config
RSpec.configure do |config|
config.include Sequent::Test::EventStreamHelpers
end
Then in a spec
given_stream_for(aggregate_id: ‘X’) do |s|
s.group_created owner_aggregate_id: 'Y'
s.group_opened
s.owner_joined_group owner_aggregate_id: 'Y'
end
Methods on ‘s` will be FactoryBot factories. All arguments will be passed on to FactoryBot’s build method. Aggregate ids and sequence numbers will be set automatically.
The example above can also be written as follows:
events = event_stream(aggregate_id: ‘X’) do |s|
s.group_created owner_aggregate_id: 'Y'
s.group_opened
s.owner_joined_group owner_aggregate_id: 'Y'
end
given_events(events)
Defined Under Namespace
Classes: Builder
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(spec) ⇒ Object
71 72 73 74 75 |
# File 'lib/sequent/test/event_stream_helpers.rb', line 71 def self.included(spec) require 'factory_bot' rescue LoadError raise ArgumentError, "Factory bot is required to use the event stream helpers" end |
Instance Method Details
#event_stream(aggregate_id:, &block) ⇒ Object
61 62 63 64 65 |
# File 'lib/sequent/test/event_stream_helpers.rb', line 61 def event_stream(aggregate_id:, &block) builder = Builder.new(aggregate_id) block.call(builder) builder.events end |
#given_stream_for(aggregate_id:, &block) ⇒ Object
67 68 69 |
# File 'lib/sequent/test/event_stream_helpers.rb', line 67 def given_stream_for(aggregate_id:, &block) given_events(*event_stream(aggregate_id: aggregate_id, &block)) end |