mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-10-20 05:06:30 +09:00
62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
require "test_helper"
|
|
|
|
class PresenceChannelTest < ActionCable::Channel::TestCase
|
|
setup do
|
|
stub_connection(current_user: users(:david))
|
|
end
|
|
|
|
test "subscribes" do
|
|
room = users(:david).rooms.first
|
|
|
|
subscribe room_id: room.id
|
|
|
|
assert subscription.confirmed?
|
|
assert_has_stream_for room
|
|
end
|
|
|
|
test "rejects subscription to a room that the user is not a member of" do
|
|
subscribe room_id: Rooms::Closed.create!(name: "New Room", creator: users(:david)).id
|
|
|
|
assert subscription.rejected?
|
|
end
|
|
|
|
test "rejects subscription to non-existent room" do
|
|
subscribe room_id: -1
|
|
|
|
assert subscription.rejected?
|
|
end
|
|
|
|
test "rejects subscription without a room" do
|
|
subscribe room_id: -1
|
|
|
|
assert subscription.rejected?
|
|
end
|
|
|
|
test "subscribing marks the membership as connected" do
|
|
membership = users(:david).memberships.first
|
|
|
|
assert_changes -> { membership.reload.connected? }, from: false, to: true do
|
|
subscribe room_id: membership.room_id
|
|
end
|
|
end
|
|
|
|
test "subscribing tells the user's other tabs when they read the room" do
|
|
membership = users(:david).memberships.first
|
|
|
|
freeze_time do
|
|
assert_broadcast_on "user_#{users(:david).id}_reads", { room_id: membership.room_id, at: Time.current.to_f } do
|
|
subscribe room_id: membership.room_id
|
|
end
|
|
end
|
|
end
|
|
|
|
test "unsubscribing marks the membership as disconnected" do
|
|
membership = users(:david).memberships.first
|
|
subscribe room_id: membership.room_id
|
|
|
|
assert_changes -> { membership.reload.connected? }, from: true, to: false do
|
|
unsubscribe
|
|
end
|
|
end
|
|
end
|