Files
mozo-backend/spec/support/matchers/broadcast_to_supplier_matcher.rb
T
2025-09-20 17:35:58 -05:00

51 lines
1.3 KiB
Ruby

module Matchers
class BroadcastToSupplier
class TestBroadcaster
attr_reader :broadcasts
def initialize
@broadcasts = []
end
def broadcast(object)
self.broadcasts << object
end
end
def initialize(supplier_id)
@supplier_id = supplier_id
end
def matches?(block)
old_broadcaster = Mozo.broadcaster
test_broadcaster = TestBroadcaster.new
Mozo.broadcaster = test_broadcaster
block.call
Mozo.broadcaster = old_broadcaster
relevant_broadcasts = test_broadcaster.broadcasts.select{|b| b[:channel] =~ /^\/supplier\/#{@supplier_id}/ && b[:data][:event] == @message}
@failure_debug_content = "was #{relevant_broadcasts.map{|b| b[:data][:data].inspect}.join(" and ")}"
relevant_broadcasts.any?{|b| @target_object === b[:data][:data] }
end
def message(msg)
@message = msg
self
end
def with(target_object)
@target_object = target_object
self
end
def failure_message
"supplier #{@supplier_id} did not receive broadcast #{@message} with #{@target_object.inspect} #{@failure_debug_content}"
end
def supports_block_expectations?; true; end
end
def broadcast_to_supplier(*args, &block)
BroadcastToSupplier.new(*args, &block)
end
end