Add couchbase with modifications, formalize broadcaster and make testable and some other stuff
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# This is a non thread safe replacement for the
|
||||
# couchbase counter mechanism since every test needs
|
||||
# a clean start and Hash#clear is soooo much faster than
|
||||
# a couchbase bucket flush
|
||||
class InMemoryQCounter
|
||||
STORE = {}
|
||||
|
||||
def get(key)
|
||||
STORE[key]
|
||||
end
|
||||
|
||||
def set(key, value)
|
||||
STORE[key] = value
|
||||
end
|
||||
|
||||
def incr(key, options = {})
|
||||
STORE[key] ||= options[:initial].to_i
|
||||
STORE[key] += 1
|
||||
end
|
||||
|
||||
def decr(key, options = {})
|
||||
STORE[key] ||= options[:initial].to_i
|
||||
STORE[key] -= 1
|
||||
end
|
||||
|
||||
def flush
|
||||
STORE.clear
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,49 @@
|
||||
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 = Qwaiter.broadcaster
|
||||
test_broadcaster = TestBroadcaster.new
|
||||
Qwaiter.broadcaster = test_broadcaster
|
||||
block.call
|
||||
Qwaiter.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| b[:data][:data] == @target_object}
|
||||
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
|
||||
end
|
||||
|
||||
def broadcast_to_supplier(*args, &block)
|
||||
BroadcastToSupplier.new(*args, &block)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,49 @@
|
||||
module Matchers
|
||||
class BroadcastToUser
|
||||
class TestBroadcaster
|
||||
attr_reader :broadcasts
|
||||
|
||||
def initialize
|
||||
@broadcasts = []
|
||||
end
|
||||
|
||||
def broadcast(object)
|
||||
self.broadcasts << object
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(user_id)
|
||||
@user_id = user_id
|
||||
end
|
||||
|
||||
def matches?(block)
|
||||
old_broadcaster = Qwaiter.broadcaster
|
||||
test_broadcaster = TestBroadcaster.new
|
||||
Qwaiter.broadcaster = test_broadcaster
|
||||
block.call
|
||||
Qwaiter.broadcaster = old_broadcaster
|
||||
|
||||
relevant_broadcasts = test_broadcaster.broadcasts.select{|b| b[:channel] =~ /^\/user\/#{@user_id}/ && b[:data][:event] == @message}
|
||||
@failure_debug_content = "was #{relevant_broadcasts.map{|b| b[:data][:data].inspect}.join(" and ")}"
|
||||
relevant_broadcasts.any?{|b| b[:data][:data] == @target_object}
|
||||
end
|
||||
|
||||
def message(msg)
|
||||
@message = msg
|
||||
self
|
||||
end
|
||||
|
||||
def with(target_object)
|
||||
@target_object = target_object
|
||||
self
|
||||
end
|
||||
|
||||
def failure_message
|
||||
"user #{@user_id} did not receive broadcast #{@message} with #{@target_object.inspect} #{@failure_debug_content}"
|
||||
end
|
||||
end
|
||||
|
||||
def broadcast_to_user(*args, &block)
|
||||
BroadcastToUser.new(*args, &block)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user