blob: 8d6dc36f6bd7c0c9a156bb77b0dee19bbe2958f0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe AwarenessChannel, :clean_gitlab_redis_shared_state, type: :channel do
before do
stub_action_cable_connection(current_user: user)
end
context "with user" do
let(:user) { create(:user) }
describe "when no path parameter given" do
it "rejects subscription" do
subscribe path: nil
expect(subscription).to be_rejected
end
end
describe "with valid path parameter" do
it "successfully subscribes" do
subscribe path: "/test"
session = AwarenessSession.for("/test")
expect(subscription).to be_confirmed
# check if we can use session object instead
expect(subscription).to have_stream_from("awareness:#{session.to_param}")
end
it "broadcasts set of collaborators when subscribing" do
session = AwarenessSession.for("/test")
freeze_time do
collaborator = {
id: user.id,
name: user.name,
avatar_url: user.avatar_url(size: 36),
last_activity: Time.zone.now,
last_activity_humanized: ActionController::Base.helpers.distance_of_time_in_words(
Time.zone.now, Time.zone.now
)
}
expect do
subscribe path: "/test"
end.to have_broadcasted_to("awareness:#{session.to_param}")
.with(collaborators: [collaborator])
end
end
it "transmits payload when user is touched" do
subscribe path: "/test"
perform :touch
expect(transmissions.size).to be 1
end
it "unsubscribes from channel" do
subscribe path: "/test"
session = AwarenessSession.for("/test")
expect { subscription.unsubscribe_from_channel }
.to change { session.size}.by(-1)
end
end
end
context "with guest" do
let(:user) { nil }
it "rejects subscription" do
subscribe path: "/test"
expect(subscription).to be_rejected
end
end
end
|