Fix and implement supplier counters

This commit is contained in:
2014-03-07 18:29:49 +01:00
parent 95e268adea
commit 99473758e6
25 changed files with 304 additions and 65 deletions
+2 -2
View File
@@ -138,11 +138,11 @@ describe List do
expect{
list.place_order(user, product.id => 3)
}.to broadcast_to_user(user.id).message('orders_in_process_count').with(count: 2)
}.to broadcast_to_user(user.id).message('orders_placed_count').with(count: 2)
expect{
list.place_order(user, product.id => 5)
}.to broadcast_to_supplier(supplier.id).message('orders_in_process_count').with(count: 3)
}.to broadcast_to_supplier(supplier.id).message('orders_placed_count').with(count: 3)
end
end
+14 -14
View File
@@ -47,24 +47,24 @@ describe Order do
describe 'counters' do
before do
# hack some initial values
Qwaiter::Counter.set "supplier:#{supplier.id}:orders_in_process", 7
Qwaiter::Counter.set "supplier:#{supplier.id}:orders_delivered", 9
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_placed", 11
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_in_process", 7
end
it 'reduces the orders_in_process count and communicates it to user' do
expect{ order.is_being_processed! }.to broadcast_to_user(user.id).message( 'orders_in_process_count' ).with(count: 6)
it 'reduces the orders_placed count and communicates it to user' do
expect{ order.is_being_processed! }.to broadcast_to_user(user.id).message( 'orders_placed_count' ).with(count: 10)
end
it 'increases the orders_delivered count and communicates it to user' do
expect{ order.is_being_processed! }.to broadcast_to_user(user.id).message( 'orders_delivered_count' ).with(count: 10)
it 'increases the orders_in_process count and communicates it to user' do
expect{ order.is_being_processed! }.to broadcast_to_user(user.id).message( 'orders_in_process_count' ).with(count: 8)
end
it 'reduces the orders_in_process count and communicates it to supplier' do
expect{ order.is_being_processed! }.to broadcast_to_supplier(supplier.id).message( 'orders_in_process_count' ).with(count: 6)
it 'reduces the orders_placed count and communicates it to supplier' do
expect{ order.is_being_processed! }.to broadcast_to_supplier(supplier.id).message( 'orders_placed_count' ).with(count: 10)
end
it 'increases the orders_in_process count and communicates it to supplier' do
expect{ order.is_being_processed! }.to broadcast_to_supplier(supplier.id).message( 'orders_delivered_count' ).with(count: 10)
expect{ order.is_being_processed! }.to broadcast_to_supplier(supplier.id).message( 'orders_in_process_count' ).with(count: 8)
end
end
@@ -82,16 +82,16 @@ describe Order do
describe 'counters' do
before do
# hack some initial values
Qwaiter::Counter.set "supplier:#{supplier.id}:orders_in_process", 7
Qwaiter::Counter.set "supplier:#{supplier.id}:orders_delivered", 9
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_delivered", 11
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_in_process", 7
end
it 'decreases the orders_delivered count and communicates it to user' do
expect{ order.is_delivered! }.to broadcast_to_user(user.id).message( 'orders_delivered_count' ).with(count: 8)
it 'decreases the orders_in_process count and communicates it to user' do
expect{ order.is_delivered! }.to broadcast_to_user(user.id).message( 'orders_in_process_count' ).with(count: 6)
end
it 'decreases the orders_in_process count and communicates it to supplier' do
expect{ order.is_delivered! }.to broadcast_to_supplier(supplier.id).message( 'orders_delivered_count' ).with(count: 8)
expect{ order.is_delivered! }.to broadcast_to_supplier(supplier.id).message( 'orders_in_process_count' ).with(count: 6)
end
end
end
+19 -9
View File
@@ -11,9 +11,19 @@ describe Supplier do
create_list :order, 7, :active, supplier: supplier1
create_list :order, 3, :placed, supplier: supplier2
Supplier.reset_counters!
supplier1.orders_in_process_count.should == 2
supplier1.orders_delivered_count.should == 7
supplier2.orders_in_process_count.should == 3
supplier1.orders_placed_count.should == 2
supplier1.orders_in_process_count.should == 7
supplier2.orders_placed_count.should == 3
end
it 'cleans counter values if orders are no longer available' do
# this spec should run on the couchbase database
Qwaiter::Counter.connection = $cb
supplier = create :supplier
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_placed", 9
supplier.orders_placed_count.should == 9
Supplier.reset_counters!
supplier.orders_placed_count.should == 0
end
end
@@ -23,8 +33,8 @@ describe Supplier do
create_list :order, 5, :placed, supplier: supplier
create_list :order, 9, :active, supplier: supplier
supplier.reset_counters!
supplier.orders_in_process_count.should == 5
supplier.orders_delivered_count.should == 9
supplier.orders_placed_count.should == 5
supplier.orders_in_process_count.should == 9
end
end
@@ -83,10 +93,10 @@ describe Supplier do
end
describe '#decrement_orders_delivered_count!' do
it 'decreases orders_delivered' do
Qwaiter::Counter.set "supplier:#{supplier.id}:orders_delivered", 9
supplier.decrement_orders_delivered_count!.should == 8
describe '#decrement_orders_placed_count!' do
it 'decreases orders_placed' do
Qwaiter::Counter.set "supplier_counter:#{supplier.id}:orders_placed", 9
supplier.decrement_orders_placed_count!.should == 8
end
end
+9
View File
@@ -46,6 +46,12 @@ end
# NOT THREADSAFE!!!!!! but good enough for testing since the real couchbase flush is slowwwwww....
Qwaiter::Counter.connection = InMemoryQCounter.new
class Couchbase::View
alias :old_initialize :initialize
def initialize(bucket, endpoint, params = {})
old_initialize(bucket, endpoint, params.merge(stale: false))
end
end
RSpec.configure do |config|
# == Mock Framework
@@ -100,6 +106,9 @@ RSpec.configure do |config|
# examples within a transaction, remove the following line or assign false
# instead of true.
#config.use_transactional_fixtures = true
config.before :suite do
Qwaiter::Couchbase.load_design_docs!
end
config.before :each do
CouchPotato.couchrest_database.recreate!
+1 -1
View File
@@ -5,7 +5,7 @@
class InMemoryQCounter
STORE = {}
def get(key)
def get(key, options = {})
STORE[key]
end