Skip to content

Commit

Permalink
Ensure DomainEvent transformation does not change passed event
Browse files Browse the repository at this point in the history
  • Loading branch information
mostlyobvious committed Feb 27, 2021
1 parent bb8af1f commit 3ba0549
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
Expand Up @@ -5,9 +5,9 @@ module Mappers
module Transformation
class DomainEvent
def dump(domain_event)
metadata = domain_event.metadata.to_h
metadata = domain_event.metadata.dup.to_h
timestamp = metadata.delete(:timestamp)
valid_at = metadata.delete(:valid_at)
valid_at = metadata.delete(:valid_at)
Record.new(
event_id: domain_event.event_id,
metadata: metadata,
Expand Down
24 changes: 24 additions & 0 deletions ruby_event_store/spec/mappers/transformation/domain_event_spec.rb
Expand Up @@ -36,6 +36,30 @@ module Transformation
expect(loaded).to eq(event)
expect(loaded.metadata.to_h).to eq(event.metadata.to_h)
end

specify "does not mutate custom event" do
event_klass = Class.new do
def initialize(data, metadata)
@event_id = SecureRandom.uuid
@data = data
@metadata = metadata
end

attr_reader :event_id, :data, :metadata

def event_type
"bazinga"
end
end

DomainEvent.new.dump(event = event_klass.new(
{some: 'data'},
{some: 'meta', valid_at: time, timestamp: time}
))

expect(event.data).to eq({some: 'data'})
expect(event.metadata).to eq({some: 'meta', valid_at: time, timestamp: time})
end
end
end
end
Expand Down

0 comments on commit 3ba0549

Please sign in to comment.