pusher-fake 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pusher-fake.rb +1 -1
  3. data/lib/pusher-fake/configuration.rb +2 -1
  4. data/lib/pusher-fake/server/application.rb +1 -1
  5. data/spec/features/api/channels_spec.rb +82 -0
  6. data/spec/features/api/users_spec.rb +34 -0
  7. data/spec/features/client/connect_spec.rb +9 -0
  8. data/spec/features/client/event_spec.rb +45 -0
  9. data/spec/features/client/presence_spec.rb +56 -0
  10. data/spec/features/client/subscribe_spec.rb +61 -0
  11. data/spec/features/server/event_spec.rb +120 -0
  12. data/spec/features/server/webhooks_spec.rb +64 -0
  13. data/spec/lib/pusher-fake/channel/presence_spec.rb +36 -30
  14. data/spec/lib/pusher-fake/channel/private_spec.rb +29 -25
  15. data/spec/lib/pusher-fake/channel/public_spec.rb +18 -18
  16. data/spec/lib/pusher-fake/channel_spec.rb +14 -14
  17. data/spec/lib/pusher-fake/configuration_spec.rb +6 -0
  18. data/spec/lib/pusher-fake/connection_spec.rb +38 -36
  19. data/spec/lib/pusher-fake/server/application_spec.rb +70 -70
  20. data/spec/lib/pusher-fake/server_spec.rb +42 -41
  21. data/spec/lib/pusher-fake/webhook_spec.rb +9 -7
  22. data/spec/lib/pusher_fake_spec.rb +5 -4
  23. data/spec/spec_helper.rb +3 -1
  24. data/{features → spec}/support/application.rb +0 -0
  25. data/{features/support/application/public/javascripts/vendor/pusher-2.2.2.js → spec/support/application/public/javascripts/vendor/pusher-2.2.4.js} +26 -19
  26. data/spec/support/application/views/index.erb +83 -0
  27. data/spec/support/capybara.rb +10 -0
  28. data/spec/support/coveralls.rb +0 -1
  29. data/spec/support/helpers/connect.rb +21 -0
  30. data/spec/support/helpers/event.rb +9 -0
  31. data/spec/support/helpers/subscription.rb +29 -0
  32. data/spec/support/helpers/user.rb +11 -0
  33. data/spec/support/{have_configuration_option_matcher.rb → matchers/have_configuration_option.rb} +0 -0
  34. data/spec/support/pusher-fake.rb +15 -0
  35. data/{features → spec}/support/webhooks.rb +5 -1
  36. metadata +51 -101
  37. data/features/channel.feature +0 -109
  38. data/features/channel_presence.feature +0 -27
  39. data/features/channel_subscribe.feature +0 -33
  40. data/features/channel_trigger.feature +0 -91
  41. data/features/channel_webhooks.feature +0 -40
  42. data/features/client_connect.feature +0 -8
  43. data/features/step_definitions/api_steps.rb +0 -40
  44. data/features/step_definitions/channel_steps.rb +0 -86
  45. data/features/step_definitions/client_steps.rb +0 -23
  46. data/features/step_definitions/event_steps.rb +0 -56
  47. data/features/step_definitions/navigation_steps.rb +0 -3
  48. data/features/step_definitions/presence_steps.rb +0 -6
  49. data/features/step_definitions/webhook_steps.rb +0 -21
  50. data/features/support/application/views/index.erb +0 -35
  51. data/features/support/coveralls.rb +0 -1
  52. data/features/support/environment.rb +0 -13
  53. data/features/support/pusher-fake.rb +0 -11
  54. data/features/support/timing.rb +0 -15
  55. data/features/user.feature +0 -14
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+
3
+ feature "Receiving event webhooks" do
4
+ let(:channel) { "room-1" }
5
+ let(:other_user) { "Bob" }
6
+ let(:presence_channel) { "presence-room-1" }
7
+
8
+ before do
9
+ connect
10
+ connect_as(other_user)
11
+ end
12
+
13
+ scenario "occupying a channel" do
14
+ subscribe_to(channel)
15
+
16
+ expect($events).to include_event("channel_occupied", "channel" => channel)
17
+
18
+ subscribe_to_as(channel, other_user)
19
+
20
+ expect($events.size).to eq(1)
21
+ end
22
+
23
+ scenario "vacating a channel" do
24
+ subscribe_to(channel)
25
+ subscribe_to_as(channel, other_user)
26
+
27
+ unsubscribe_from(channel)
28
+
29
+ expect($events.size).to eq(1)
30
+
31
+ unsubscribe_from_as(channel, other_user)
32
+
33
+ expect($events).to include_event("channel_vacated", "channel" => channel)
34
+ end
35
+
36
+ scenario "subscribing to a presence channel" do
37
+ subscribe_to(presence_channel)
38
+
39
+ expect($events).to include_event("member_added", "channel" => presence_channel, "user_id" => user_id)
40
+
41
+ subscribe_to_as(presence_channel, other_user)
42
+
43
+ expect($events).to include_event("member_added", "channel" => presence_channel, "user_id" => user_id(other_user))
44
+ end
45
+
46
+ scenario "unsubscribing from a presence channel" do
47
+ subscribe_to(presence_channel)
48
+ subscribe_to_as(presence_channel, other_user)
49
+
50
+ unsubscribe_from(presence_channel)
51
+
52
+ expect($events).to include_event("member_added", "channel" => presence_channel, "user_id" => user_id)
53
+
54
+ unsubscribe_from_as(presence_channel, other_user)
55
+
56
+ expect($events).to include_event("member_added", "channel" => presence_channel, "user_id" => user_id(other_user))
57
+ end
58
+
59
+ protected
60
+
61
+ def include_event(event, options = {})
62
+ include(options.merge("name" => event))
63
+ end
64
+ end
@@ -20,8 +20,8 @@ describe PusherFake::Channel::Presence, "#add" do
20
20
  let(:data) { { auth: authentication, channel_data: MultiJson.dump(channel_data) } }
21
21
  let(:name) { "name" }
22
22
  let(:user_id) { "1234" }
23
- let(:connection) { stub(emit: nil) }
24
- let(:connections) { stub(push: nil, length: 0) }
23
+ let(:connection) { double(:connection, emit: nil) }
24
+ let(:connections) { double(:connections, push: nil, length: 0) }
25
25
  let(:channel_data) { { user_id: user_id } }
26
26
  let(:authentication) { "auth" }
27
27
  let(:subscription_data) { { presence: { hash: {}, count: 1 } } }
@@ -29,13 +29,15 @@ describe PusherFake::Channel::Presence, "#add" do
29
29
  subject { PusherFake::Channel::Presence.new(name) }
30
30
 
31
31
  before do
32
- PusherFake::Webhook.stubs(:trigger)
33
- MultiJson.stubs(:load).returns(channel_data)
34
- subject.stubs(connections: connections, emit: nil, subscription_data: subscription_data)
32
+ allow(PusherFake::Webhook).to receive(:trigger)
33
+ allow(MultiJson).to receive(:load).and_return(channel_data)
34
+ allow(subject).to receive(:connections).and_return(connections)
35
+ allow(subject).to receive(:emit).and_return(nil)
36
+ allow(subject).to receive(:subscription_data).and_return(subscription_data)
35
37
  end
36
38
 
37
39
  it "authorizes the connection" do
38
- subject.stubs(authorized?: nil)
40
+ allow(subject).to receive(:authorized?).and_return(nil)
39
41
 
40
42
  subject.add(connection, data)
41
43
 
@@ -43,7 +45,7 @@ describe PusherFake::Channel::Presence, "#add" do
43
45
  end
44
46
 
45
47
  it "parses the channel_data when authorized" do
46
- subject.stubs(authorized?: true)
48
+ allow(subject).to receive(:authorized?).and_return(true)
47
49
 
48
50
  subject.add(connection, data)
49
51
 
@@ -51,7 +53,7 @@ describe PusherFake::Channel::Presence, "#add" do
51
53
  end
52
54
 
53
55
  it "assigns the parsed channel_data to the members hash for the current connection" do
54
- subject.stubs(authorized?: true)
56
+ allow(subject).to receive(:authorized?).and_return(true)
55
57
 
56
58
  subject.add(connection, data)
57
59
 
@@ -59,7 +61,7 @@ describe PusherFake::Channel::Presence, "#add" do
59
61
  end
60
62
 
61
63
  it "notifies the channel of the new member when authorized" do
62
- subject.stubs(authorized?: true)
64
+ allow(subject).to receive(:authorized?).and_return(true)
63
65
 
64
66
  subject.add(connection, data)
65
67
 
@@ -67,7 +69,7 @@ describe PusherFake::Channel::Presence, "#add" do
67
69
  end
68
70
 
69
71
  it "successfully subscribes the connection when authorized" do
70
- subject.stubs(authorized?: true)
72
+ allow(subject).to receive(:authorized?).and_return(true)
71
73
 
72
74
  subject.add(connection, data)
73
75
 
@@ -76,7 +78,7 @@ describe PusherFake::Channel::Presence, "#add" do
76
78
  end
77
79
 
78
80
  it "adds the connection to the channel when authorized" do
79
- subject.stubs(authorized?: true)
81
+ allow(subject).to receive(:authorized?).and_return(true)
80
82
 
81
83
  subject.add(connection, data)
82
84
 
@@ -84,8 +86,8 @@ describe PusherFake::Channel::Presence, "#add" do
84
86
  end
85
87
 
86
88
  it "triggers channel occupied webhook for the first connection added when authorized" do
87
- subject.unstub(:connections)
88
- subject.stubs(authorized?: true)
89
+ allow(subject).to receive(:authorized?).and_return(true)
90
+ allow(subject).to receive(:connections).and_call_original
89
91
 
90
92
  2.times { subject.add(connection, data) }
91
93
 
@@ -93,7 +95,7 @@ describe PusherFake::Channel::Presence, "#add" do
93
95
  end
94
96
 
95
97
  it "triggers the member added webhook when authorized" do
96
- subject.stubs(authorized?: true)
98
+ allow(subject).to receive(:authorized?).and_return(true)
97
99
 
98
100
  subject.add(connection, data)
99
101
 
@@ -101,7 +103,7 @@ describe PusherFake::Channel::Presence, "#add" do
101
103
  end
102
104
 
103
105
  it "unsuccessfully subscribes the connection when not authorized" do
104
- subject.stubs(authorized?: false)
106
+ allow(subject).to receive(:authorized?).and_return(false)
105
107
 
106
108
  subject.add(connection, data)
107
109
 
@@ -109,35 +111,37 @@ describe PusherFake::Channel::Presence, "#add" do
109
111
  end
110
112
 
111
113
  it "does not trigger channel occupied webhook when not authorized" do
112
- subject.unstub(:connections)
113
- subject.stubs(authorized?: false)
114
+ allow(subject).to receive(:authorized?).and_return(false)
115
+ allow(subject).to receive(:connections).and_call_original
114
116
 
115
117
  2.times { subject.add(connection, data) }
116
118
 
117
- expect(PusherFake::Webhook).to have_received(:trigger).never
119
+ expect(PusherFake::Webhook).to_not have_received(:trigger)
118
120
  end
119
121
 
120
122
  it "does not trigger the member added webhook when not authorized" do
121
- subject.stubs(authorized?: false)
123
+ allow(subject).to receive(:authorized?).and_return(false)
122
124
 
123
125
  subject.add(connection, data)
124
126
 
125
- expect(PusherFake::Webhook).to have_received(:trigger).never
127
+ expect(PusherFake::Webhook).to_not have_received(:trigger)
126
128
  end
127
129
  end
128
130
 
129
131
  describe PusherFake::Channel::Presence, "#remove" do
130
132
  let(:name) { "name" }
131
133
  let(:user_id) { "1234" }
132
- let(:connection) { stub }
134
+ let(:connection) { double }
133
135
  let(:channel_data) { { user_id: user_id } }
134
136
 
135
137
  subject { PusherFake::Channel::Presence.new(name) }
136
138
 
137
139
  before do
138
- PusherFake::Webhook.stubs(:trigger)
140
+ allow(PusherFake::Webhook).to receive(:trigger)
141
+ allow(subject).to receive(:connections).and_return([connection])
142
+ allow(subject).to receive(:emit).and_return(nil)
143
+
139
144
  subject.members[connection] = channel_data
140
- subject.stubs(connections: [connection], emit: nil)
141
145
  end
142
146
 
143
147
  it "removes the connection from the channel" do
@@ -168,13 +172,15 @@ end
168
172
  describe PusherFake::Channel::Presence, "#remove, for an unsubscribed connection" do
169
173
  let(:name) { "name" }
170
174
  let(:user_id) { "1234" }
171
- let(:connection) { stub }
175
+ let(:connection) { double }
172
176
  let(:channel_data) { { user_id: user_id } }
173
177
 
174
178
  subject { PusherFake::Channel::Presence.new(name) }
175
179
 
176
180
  before do
177
- subject.stubs(connections: [], emit: nil, trigger: nil)
181
+ allow(subject).to receive(:connections).and_return([])
182
+ allow(subject).to receive(:emit).and_return(nil)
183
+ allow(subject).to receive(:trigger).and_return(nil)
178
184
  end
179
185
 
180
186
  it "does not raise an error" do
@@ -186,25 +192,25 @@ describe PusherFake::Channel::Presence, "#remove, for an unsubscribed connection
186
192
  it "does not trigger an event" do
187
193
  subject.remove(connection)
188
194
 
189
- expect(PusherFake::Webhook).to have_received(:trigger).with("member_removed", channel: name, user_id: user_id).never
195
+ expect(subject).to_not have_received(:trigger).with("member_removed", channel: name, user_id: user_id)
190
196
  end
191
197
 
192
198
  it "does not emit an event" do
193
199
  subject.remove(connection)
194
200
 
195
- expect(subject).to have_received(:emit).with("pusher_internal:member_removed", channel_data).never
201
+ expect(subject).to_not have_received(:emit).with("pusher_internal:member_removed", channel_data)
196
202
  end
197
203
  end
198
204
 
199
205
  describe PusherFake::Channel::Presence, "#subscription_data" do
200
206
  let(:other) { { user_id: 2, name: "Beau" } }
201
207
  let(:member) { { user_id: 1, name: "Bob" } }
202
- let(:members) { { stub => member } }
208
+ let(:members) { { double => member } }
203
209
 
204
210
  subject { PusherFake::Channel::Presence.new("name") }
205
211
 
206
212
  before do
207
- subject.stubs(members: members)
213
+ allow(subject).to receive(:members).and_return(members)
208
214
  end
209
215
 
210
216
  it "returns hash with presence information" do
@@ -219,7 +225,7 @@ describe PusherFake::Channel::Presence, "#subscription_data" do
219
225
  end
220
226
 
221
227
  it "handles multiple members" do
222
- members[stub] = other
228
+ members[double] = other
223
229
 
224
230
  data = subject.subscription_data
225
231
 
@@ -11,19 +11,19 @@ end
11
11
  describe PusherFake::Channel::Private, "#add" do
12
12
  let(:data) { { auth: authentication } }
13
13
  let(:name) { "name" }
14
- let(:connection) { stub(emit: nil) }
15
- let(:connections) { stub(push: nil, length: 0) }
14
+ let(:connection) { double(:connection, emit: nil) }
15
+ let(:connections) { double(:connections, push: nil, length: 0) }
16
16
  let(:authentication) { "auth" }
17
17
 
18
18
  subject { PusherFake::Channel::Private.new(name) }
19
19
 
20
20
  before do
21
- PusherFake::Webhook.stubs(:trigger)
22
- subject.stubs(connections: connections)
21
+ allow(PusherFake::Webhook).to receive(:trigger)
22
+ allow(subject).to receive(:connections).and_return(connections)
23
23
  end
24
24
 
25
25
  it "authorizes the connection" do
26
- subject.stubs(authorized?: nil)
26
+ allow(subject).to receive(:authorized?).and_return(nil)
27
27
 
28
28
  subject.add(connection, data)
29
29
 
@@ -31,7 +31,7 @@ describe PusherFake::Channel::Private, "#add" do
31
31
  end
32
32
 
33
33
  it "adds the connection to the channel when authorized" do
34
- subject.stubs(authorized?: true)
34
+ allow(subject).to receive(:authorized?).and_return(true)
35
35
 
36
36
  subject.add(connection, data)
37
37
 
@@ -39,7 +39,7 @@ describe PusherFake::Channel::Private, "#add" do
39
39
  end
40
40
 
41
41
  it "successfully subscribes the connection when authorized" do
42
- subject.stubs(authorized?: true)
42
+ allow(subject).to receive(:authorized?).and_return(true)
43
43
 
44
44
  subject.add(connection, data)
45
45
 
@@ -47,8 +47,8 @@ describe PusherFake::Channel::Private, "#add" do
47
47
  end
48
48
 
49
49
  it "triggers channel occupied webhook for the first connection added when authorized" do
50
- subject.unstub(:connections)
51
- subject.stubs(authorized?: true)
50
+ allow(subject).to receive(:authorized?).and_return(true)
51
+ allow(subject).to receive(:connections).and_call_original
52
52
 
53
53
  2.times { subject.add(connection, data) }
54
54
 
@@ -56,7 +56,7 @@ describe PusherFake::Channel::Private, "#add" do
56
56
  end
57
57
 
58
58
  it "unsuccessfully subscribes the connection when not authorized" do
59
- subject.stubs(authorized?: false)
59
+ allow(subject).to receive(:authorized?).and_return(false)
60
60
 
61
61
  subject.add(connection, data)
62
62
 
@@ -64,34 +64,36 @@ describe PusherFake::Channel::Private, "#add" do
64
64
  end
65
65
 
66
66
  it "does not trigger channel occupied webhook when not authorized" do
67
- subject.unstub(:connections)
68
- subject.stubs(authorized?: false)
67
+ allow(subject).to receive(:authorized?).and_return(false)
68
+ allow(subject).to receive(:connections).and_call_original
69
69
 
70
70
  2.times { subject.add(connection, data) }
71
71
 
72
- expect(PusherFake::Webhook).to have_received(:trigger).never
72
+ expect(PusherFake::Webhook).to_not have_received(:trigger)
73
73
  end
74
74
  end
75
75
 
76
76
  describe PusherFake::Channel::Private, "#authentication_for" do
77
77
  let(:id) { "1234" }
78
78
  let(:name) { "private-channel" }
79
+ let(:digest) { double(:digest) }
79
80
  let(:string) { [id, name].join(":") }
80
81
  let(:signature) { "signature" }
81
- let(:configuration) { stub(key: "key", secret: "secret") }
82
+ let(:configuration) { double(:configuration, key: "key", secret: "secret") }
82
83
 
83
84
  subject { PusherFake::Channel::Private.new(name) }
84
85
 
85
86
  before do
86
- PusherFake.stubs(configuration: configuration)
87
- OpenSSL::HMAC.stubs(hexdigest: signature)
87
+ allow(PusherFake).to receive(:configuration).and_return(configuration)
88
+ allow(OpenSSL::HMAC).to receive(:hexdigest).and_return(signature)
89
+ allow(OpenSSL::Digest::SHA256).to receive(:new).and_return(digest)
88
90
  end
89
91
 
90
92
  it "generates a signature" do
91
93
  subject.authentication_for(id)
92
94
 
93
95
  expect(OpenSSL::HMAC).to have_received(:hexdigest)
94
- .with(kind_of(OpenSSL::Digest::SHA256), configuration.secret, string)
96
+ .with(digest, configuration.secret, string)
95
97
  end
96
98
 
97
99
  it "returns the authentication string" do
@@ -104,23 +106,25 @@ end
104
106
  describe PusherFake::Channel::Private, "#authentication_for, with channel data" do
105
107
  let(:id) { "1234" }
106
108
  let(:name) { "private-channel" }
109
+ let(:digest) { double(:digest) }
107
110
  let(:string) { [id, name, channel_data].join(":") }
108
111
  let(:signature) { "signature" }
109
112
  let(:channel_data) { "{}" }
110
- let(:configuration) { stub(key: "key", secret: "secret") }
113
+ let(:configuration) { double(:configuration, key: "key", secret: "secret") }
111
114
 
112
115
  subject { PusherFake::Channel::Private.new(name) }
113
116
 
114
117
  before do
115
- PusherFake.stubs(configuration: configuration)
116
- OpenSSL::HMAC.stubs(hexdigest: signature)
118
+ allow(PusherFake).to receive(:configuration).and_return(configuration)
119
+ allow(OpenSSL::HMAC).to receive(:hexdigest).and_return(signature)
120
+ allow(OpenSSL::Digest::SHA256).to receive(:new).and_return(digest)
117
121
  end
118
122
 
119
123
  it "generates a signature" do
120
124
  subject.authentication_for(id, channel_data)
121
125
 
122
126
  expect(OpenSSL::HMAC).to have_received(:hexdigest)
123
- .with(kind_of(OpenSSL::Digest::SHA256), configuration.secret, string)
127
+ .with(digest, configuration.secret, string)
124
128
  end
125
129
 
126
130
  it "returns the authentication string" do
@@ -133,14 +137,14 @@ end
133
137
  describe PusherFake::Channel::Private, "#authorized?" do
134
138
  let(:data) { { auth: authentication, channel_data: channel_data } }
135
139
  let(:name) { "private-channel" }
136
- let(:connection) { stub(id: "1") }
140
+ let(:connection) { double(:connection, id: "1") }
137
141
  let(:channel_data) { "{}" }
138
142
  let(:authentication) { "authentication" }
139
143
 
140
144
  subject { PusherFake::Channel::Private.new(name) }
141
145
 
142
146
  before do
143
- subject.stubs(:authentication_for)
147
+ allow(subject).to receive(:authentication_for)
144
148
  end
145
149
 
146
150
  it "generates authentication for the connection ID" do
@@ -150,13 +154,13 @@ describe PusherFake::Channel::Private, "#authorized?" do
150
154
  end
151
155
 
152
156
  it "returns true if the authentication matches" do
153
- subject.stubs(authentication_for: authentication)
157
+ allow(subject).to receive(:authentication_for).and_return(authentication)
154
158
 
155
159
  expect(subject).to be_authorized(connection, data)
156
160
  end
157
161
 
158
162
  it "returns false if the authentication matches" do
159
- subject.stubs(authentication_for: "")
163
+ allow(subject).to receive(:authentication_for).and_return("")
160
164
 
161
165
  expect(subject).to_not be_authorized(connection, data)
162
166
  end
@@ -20,14 +20,14 @@ end
20
20
 
21
21
  describe PusherFake::Channel, "#add" do
22
22
  let(:name) { "name" }
23
- let(:connection) { stub(emit: nil) }
24
- let(:connections) { stub(push: nil, length: 0) }
23
+ let(:connection) { double(:connection, emit: nil) }
24
+ let(:connections) { double(:connections, push: nil, length: 0) }
25
25
 
26
26
  subject { PusherFake::Channel::Public.new(name) }
27
27
 
28
28
  before do
29
- PusherFake::Webhook.stubs(:trigger)
30
- subject.stubs(connections: connections)
29
+ allow(PusherFake::Webhook).to receive(:trigger)
30
+ allow(subject).to receive(:connections).and_return(connections)
31
31
  end
32
32
 
33
33
  it "adds the connection" do
@@ -43,7 +43,7 @@ describe PusherFake::Channel, "#add" do
43
43
  end
44
44
 
45
45
  it "triggers channel occupied webhook for the first connection added" do
46
- subject.unstub(:connections)
46
+ allow(subject).to receive(:connections).and_call_original
47
47
 
48
48
  2.times { subject.add(connection) }
49
49
 
@@ -52,17 +52,17 @@ describe PusherFake::Channel, "#add" do
52
52
  end
53
53
 
54
54
  describe PusherFake::Channel, "#emit" do
55
- let(:data) { stub }
55
+ let(:data) { double }
56
56
  let(:name) { "name" }
57
57
  let(:event) { "event" }
58
58
  let(:connections) { [connection_1, connection_2] }
59
- let(:connection_1) { stub(emit: nil, id: "1") }
60
- let(:connection_2) { stub(emit: nil, id: "2") }
59
+ let(:connection_1) { double(:connection, emit: nil, id: "1") }
60
+ let(:connection_2) { double(:connection, emit: nil, id: "2") }
61
61
 
62
62
  subject { PusherFake::Channel::Public.new(name) }
63
63
 
64
64
  before do
65
- subject.stubs(connections: connections)
65
+ allow(subject).to receive(:connections).and_return(connections)
66
66
  end
67
67
 
68
68
  it "emits the event for each connection in the channel" do
@@ -76,23 +76,23 @@ describe PusherFake::Channel, "#emit" do
76
76
  subject.emit(event, data, socket_id: connection_2.id)
77
77
 
78
78
  expect(connection_1).to have_received(:emit).with(event, data, name)
79
- expect(connection_2).to have_received(:emit).never
79
+ expect(connection_2).to_not have_received(:emit)
80
80
  end
81
81
  end
82
82
 
83
83
  describe PusherFake::Channel, "#includes?" do
84
- let(:connection) { stub }
84
+ let(:connection) { double }
85
85
 
86
86
  subject { PusherFake::Channel::Public.new("name") }
87
87
 
88
88
  it "returns true if the connection is in the channel" do
89
- subject.stubs(connections: [connection])
89
+ allow(subject).to receive(:connections).and_return([connection])
90
90
 
91
91
  expect(subject).to be_includes(connection)
92
92
  end
93
93
 
94
94
  it "returns false if the connection is not in the channel" do
95
- subject.stubs(connections: [])
95
+ allow(subject).to receive(:connections).and_return([])
96
96
 
97
97
  expect(subject).to_not be_includes(connection)
98
98
  end
@@ -100,14 +100,14 @@ end
100
100
 
101
101
  describe PusherFake::Channel, "#remove" do
102
102
  let(:name) { "name" }
103
- let(:connection_1) { stub }
104
- let(:connection_2) { stub }
103
+ let(:connection_1) { double }
104
+ let(:connection_2) { double }
105
105
 
106
106
  subject { PusherFake::Channel::Public.new(name) }
107
107
 
108
108
  before do
109
- subject.stubs(connections: [connection_1, connection_2])
110
- PusherFake::Webhook.stubs(:trigger)
109
+ allow(subject).to receive(:connections).and_return([connection_1, connection_2])
110
+ allow(PusherFake::Webhook).to receive(:trigger)
111
111
  end
112
112
 
113
113
  it "removes the connection from the channel" do
@@ -119,7 +119,7 @@ describe PusherFake::Channel, "#remove" do
119
119
  it "triggers channel vacated webhook when all connections are removed" do
120
120
  subject.remove(connection_1)
121
121
 
122
- expect(PusherFake::Webhook).to have_received(:trigger).never
122
+ expect(PusherFake::Webhook).to_not have_received(:trigger)
123
123
 
124
124
  subject.remove(connection_2)
125
125