Skip to content

Commit

Permalink
updated presence local member enter test whe attach resume and presen…
Browse files Browse the repository at this point in the history
…ce flag is false
  • Loading branch information
sacOO7 committed Jun 16, 2024
1 parent 194b537 commit 55d7428
Showing 1 changed file with 20 additions and 19 deletions.
39 changes: 20 additions & 19 deletions spec/acceptance/realtime/presence_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2533,37 +2533,38 @@ def cripple_websocket_transport
let(:member_data) { random_str }

it 'immediately resends all local presence members (#RTP5c2, #RTP19a)' do
sync_complete_confirmed_no_local_members = false
local_member_leave_event_fired = false
member_leave_event_fired = false

presence_client_one.enter(member_data)
presence_client_one.subscribe(:enter) do
presence_client_one.unsubscribe :enter

presence_client_one.subscribe(:leave) do |message|
# The local member will leave the PresenceMap due to the ATTACHED without Presence
local_member_leave_event_fired = true
end

# Local members re-entered automatically appear as updates due to the
# fabricated ATTACHED message sent and the members already being present
presence_client_one.subscribe(:update) do |message|
expect(local_member_leave_event_fired).to be_truthy
# Member will leave the PresenceMap due to the ATTACHED without Presence
member_leave_event_fired = true
expect(message.data).to eq(member_data)
expect(message.client_id).to eq(client_one.auth.client_id)
EventMachine.next_tick do
expect(presence_client_one.members.length).to eql(1)
expect(presence_client_one.members.local_members.length).to eql(1)
expect(sync_complete_confirmed_no_local_members).to be_truthy
stop_reactor
end
stop_reactor
end

# Shouldn't receive enter/update message when local_members are entered
# This is due to the fact that, when we enter local member we also send
# member id, and server automatically checks for duplicate id and doesn't
# send presenceEnter or presenceUpdate if id is found.
presence_client_one.subscribe(:enter, :update) do |message|
raise { "client shouldn't receive update event for entered local members" }
end

presence_client_one.members.once(:sync_complete) do
# Immediately after SYNC (no sync actually occurred, but this event fires immediately after a channel SYNCs or is not expecting to SYNC)
expect(presence_client_one.members.length).to eql(0)
expect(presence_client_one.members.local_members.length).to eql(0)
sync_complete_confirmed_no_local_members = true
expect(member_leave_event_fired).to be_truthy

# TODO - Ideally both members and local_members should be cleared as per RTP19a
# expect(presence_client_one.members.local_members.length).to eql(0)

EventMachine.next_tick do
stop_reactor
end
end

# ATTACHED ProtocolMessage with no presence flag will clear the presence set immediately, #RTP19a
Expand Down

0 comments on commit 55d7428

Please sign in to comment.