Skip to content

Commit

Permalink
satisfactory integration spec coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
stevegraham committed Dec 12, 2011
1 parent 5258a8d commit 5cb4b1b
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 3 deletions.
4 changes: 2 additions & 2 deletions slanger.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ Gem::Specification.new do |s|
s.add_development_dependency 'pusher', '~> 0.8.2'
s.add_development_dependency 'haml', '~> 3.1.2'

s.files = Dir['README.md', 'lib/**/*']
s.require_path = 'lib'
s.files = Dir['README.md', 'lib/**/*', 'slanger.rb']
s.require_path = '.'

s.executables << 'slanger'
end
Expand Down
62 changes: 61 additions & 1 deletion spec/integration/integration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
require 'thin'

describe 'Integration' do
let(:errback) { Proc.new { fail 'cannot connect to slanger. your box might be too slow. try increasing sleep value on l22' } }
let(:errback) { Proc.new { fail 'cannot connect to slanger. your box might be too slow. try increasing sleep value in the before block' } }

def new_websocket
EM::HttpRequest.new("ws://0.0.0.0:8080/app/#{Pusher.key}?client=js&version=1.8.5").
Expand Down Expand Up @@ -349,6 +349,66 @@ def new_websocket
messages.last.should == {"channel"=>"presence-channel", "event"=>"pusher_internal:member_added", "data"=>{"user_id"=>"37960509766262569d504f02a0ee986d", "user_info"=>{"name"=>"CHROME"}}}

end

it 'does not send multiple member added and member removed messages if one subscriber opens multiple connections, i.e. multiple browser tabs.' do
messages = []

Thread.new do
EM.run do
user1 = new_websocket
user1.errback &errback

# setup our reference user
user1.stream do |message|
messages << JSON.parse(message)
if messages.length == 1
auth = Pusher['presence-channel'].authenticate(messages.first['data']['socket_id'], {
user_id: '0f177369a3b71275d25ab1b44db9f95f',
user_info: {
name: 'SG'
}
})
user1.send({
event: 'pusher:subscribe', data: {
channel: 'presence-channel'
}.merge(auth)
}.to_json)
elsif messages.length == 2
4.times do
user = new_websocket
user.stream do |message|
# remove stream callback
user.stream do |message|
# close the connection in the next tick as soon as subscription is acknowledged
EM.next_tick { user.close_connection }
end
message = JSON.parse(message)
auth2 = Pusher['presence-channel'].authenticate(message['data']['socket_id'], {
user_id: '37960509766262569d504f02a0ee986d',
user_info: {
name: 'CHROME'
}
})
user.send({
event: 'pusher:subscribe', data: {
channel: 'presence-channel'
}.merge(auth2)
}.to_json)
end
end
elsif messages.length == 4
EM.next_tick { EM.stop }
end
end

end
end.join

# There should only be one set of presence messages sent to the refernce user for the second user.
messages.one? { |message| message['event'] == 'pusher_internal:member_added' && message['data']['user_id'] == '37960509766262569d504f02a0ee986d' }.should be_true
messages.one? { |message| message['event'] == 'pusher_internal:member_removed' && message['data']['user_id'] == '37960509766262569d504f02a0ee986d' }.should be_true

end
end
end
end
Expand Down

0 comments on commit 5cb4b1b

Please sign in to comment.