Add couchbase with modifications, formalize broadcaster and make testable and some other stuff

This commit is contained in:
2014-03-06 18:08:39 +01:00
parent 3f117c76b0
commit 0e7a39b819
28 changed files with 456 additions and 35 deletions
+29
View File
@@ -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