pusher-fake 4.1.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/pusher-fake +12 -0
  3. data/lib/pusher-fake/channel/public.rb +1 -1
  4. data/lib/pusher-fake/server/chain_trap_handlers.rb +24 -0
  5. data/lib/pusher-fake/server.rb +10 -0
  6. data/lib/pusher-fake.rb +1 -1
  7. metadata +44 -89
  8. data/spec/features/api/channels_spec.rb +0 -86
  9. data/spec/features/api/users_spec.rb +0 -36
  10. data/spec/features/client/connect_spec.rb +0 -11
  11. data/spec/features/client/event_spec.rb +0 -49
  12. data/spec/features/client/presence_spec.rb +0 -58
  13. data/spec/features/client/subscribe_spec.rb +0 -84
  14. data/spec/features/server/event_spec.rb +0 -122
  15. data/spec/features/server/webhooks_spec.rb +0 -107
  16. data/spec/lib/pusher-fake/channel/presence_spec.rb +0 -249
  17. data/spec/lib/pusher-fake/channel/private_spec.rb +0 -180
  18. data/spec/lib/pusher-fake/channel/public_spec.rb +0 -206
  19. data/spec/lib/pusher-fake/channel_spec.rb +0 -122
  20. data/spec/lib/pusher-fake/configuration_spec.rb +0 -123
  21. data/spec/lib/pusher-fake/connection_spec.rb +0 -332
  22. data/spec/lib/pusher-fake/server/application_spec.rb +0 -604
  23. data/spec/lib/pusher-fake/server_spec.rb +0 -177
  24. data/spec/lib/pusher-fake/webhook_spec.rb +0 -67
  25. data/spec/lib/pusher_fake_spec.rb +0 -96
  26. data/spec/spec_helper.rb +0 -31
  27. data/spec/support/application/public/javascripts/vendor/polyfill.min.js +0 -1
  28. data/spec/support/application/public/javascripts/vendor/pusher-7.0.6.js +0 -4567
  29. data/spec/support/application/views/index.erb +0 -91
  30. data/spec/support/application.rb +0 -35
  31. data/spec/support/capybara.rb +0 -10
  32. data/spec/support/helpers/connect.rb +0 -21
  33. data/spec/support/helpers/event.rb +0 -11
  34. data/spec/support/helpers/subscription.rb +0 -31
  35. data/spec/support/helpers/user.rb +0 -13
  36. data/spec/support/matchers/have_configuration_option.rb +0 -19
  37. data/spec/support/pusher_fake.rb +0 -21
  38. data/spec/support/webhooks.rb +0 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '039808605b16ad3d4532da9fc4041f4f2cba3f783e4ec63729f5bc5b024565eb'
4
- data.tar.gz: 4ff72ecce469d90b48892ae1fe0f677806a9aa8b8a3b0ff5a33c7105da3585b3
3
+ metadata.gz: 8069b800bbe3a041b6b1707a9c9427c903b79c4214e6167b7d691110bedf29cc
4
+ data.tar.gz: f2f86d0ef981ccbb62e8d511a1fe89b45bb5925e767352d18ea529586dff2efc
5
5
  SHA512:
6
- metadata.gz: 7036cbe9c7d805d193ccbb6492a58ef102e793218907787df1a8a2155a828e10aab13483ec6d783a65a1b11dc8936e73f8d3f55735cf64bb948a590dfe4e238a
7
- data.tar.gz: ecf4faa213465f21879a0926c9e2adf8d1b80e515eff2a2192c8033e998bcbaca044e770c54652d6a31c4f967cc88f4c7c4a9cb3b04c601eb68016a964140c84
6
+ metadata.gz: 5fe4698854872fe4f28b98812b492c85c16494aa8763370cfb81704e3072aaba8e44bf7d2484b4a610f4eb62cdabd336ec6834d779b9d10ff50dff4e6a53db82
7
+ data.tar.gz: 3db9c831cb61085d5bcbbea3af0b306ca8a16b42c5f246fc60728950abf5f1f8ba89e8eea3d399f5247ade160f1bad508e2088bd9d21005f647708845e44660f
data/bin/pusher-fake CHANGED
@@ -47,6 +47,18 @@ PusherFake.configure do |configuration|
47
47
  configuration.webhooks = hooks
48
48
  end
49
49
  end.parse!
50
+
51
+ # Optionally enable TLS for the em-websocket server.
52
+ # configuration.socket_options = {
53
+ # secure: true,
54
+ # tls_options: { }
55
+ # }
56
+ #
57
+ # Optionally enable SSL for the Thin web server.
58
+ # configuration.web_options = {
59
+ # ssl: true,
60
+ # ssl_options: { }
61
+ # }
50
62
  end
51
63
 
52
64
  raise OptionParser::MissingArgument.new("--id") if Pusher.app_id.nil?
@@ -4,7 +4,7 @@ module PusherFake
4
4
  module Channel
5
5
  # A public channel.
6
6
  class Public
7
- CACHE_CHANNEL_PREFIX = /^(private-|presence-){0,1}cache-/.freeze
7
+ CACHE_CHANNEL_PREFIX = /^(private-|presence-){0,1}cache-/
8
8
 
9
9
  # @return [Array] Connections in this channel.
10
10
  attr_reader :connections
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+ module PusherFake
5
+ module Server
6
+ # Monkeypatch to ensure previous trap handlers are called when new handlers
7
+ # are added.
8
+ #
9
+ # @see +PusherFake::Server.chain_trap_handlers+
10
+ module ChainTrapHandlers
11
+ # Ensure a previous trap is chained when a new trap is added.
12
+ #
13
+ # @see +Signal.trap+
14
+ def trap(*arguments)
15
+ previous_trap = super do
16
+ yield
17
+
18
+ previous_trap&.call
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ # :nocov:
@@ -4,6 +4,7 @@ module PusherFake
4
4
  # Socket and web server manager.
5
5
  module Server
6
6
  autoload :Application, "pusher-fake/server/application"
7
+ autoload :ChainTrapHandlers, "pusher-fake/server/chain_trap_handlers"
7
8
 
8
9
  class << self
9
10
  # Start the servers.
@@ -11,6 +12,8 @@ module PusherFake
11
12
  # @see start_socket_server
12
13
  # @see start_web_server
13
14
  def start
15
+ chain_trap_handlers
16
+
14
17
  EventMachine.run do
15
18
  start_web_server
16
19
  start_socket_server
@@ -48,6 +51,13 @@ module PusherFake
48
51
 
49
52
  private
50
53
 
54
+ # Force +Thin::Server+ and +EventMachine::WebSocket+ to call the chain of
55
+ # trap handlers to ensure other handles, such as +RSpec+, can interrupt.
56
+ def chain_trap_handlers
57
+ EventMachine::WebSocket.singleton_class.prepend(ChainTrapHandlers)
58
+ Thin::Server.prepend(ChainTrapHandlers)
59
+ end
60
+
51
61
  # Convenience method for access the configuration object.
52
62
  #
53
63
  # @return [Configuration] The configuration object.
data/lib/pusher-fake.rb CHANGED
@@ -9,7 +9,7 @@ require "thin"
9
9
  # A Pusher fake.
10
10
  module PusherFake
11
11
  # The current version string.
12
- VERSION = "4.1.0"
12
+ VERSION = "5.0.0"
13
13
 
14
14
  autoload :Channel, "pusher-fake/channel"
15
15
  autoload :Configuration, "pusher-fake/configuration"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pusher-fake
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Dunn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-26 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -58,56 +58,56 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.5'
61
+ version: '1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.5'
68
+ version: '1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: capybara
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 3.36.0
75
+ version: 3.38.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 3.36.0
82
+ version: 3.38.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: puma
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 5.6.4
89
+ version: 6.1.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 5.6.4
96
+ version: 6.1.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: pusher
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 2.0.2
103
+ version: 2.0.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 2.0.2
110
+ version: 2.0.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,42 +128,56 @@ dependencies:
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 3.11.0
131
+ version: 3.12.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 3.11.0
138
+ version: 3.12.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 1.26.1
145
+ version: 1.48.1
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 1.26.1
152
+ version: 1.48.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-capybara
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 2.17.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 2.17.1
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rubocop-performance
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - '='
158
172
  - !ruby/object:Gem::Version
159
- version: 1.13.3
173
+ version: 1.16.0
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - '='
165
179
  - !ruby/object:Gem::Version
166
- version: 1.13.3
180
+ version: 1.16.0
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: rubocop-rake
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -184,56 +198,56 @@ dependencies:
184
198
  requirements:
185
199
  - - '='
186
200
  - !ruby/object:Gem::Version
187
- version: 2.9.0
201
+ version: 2.19.0
188
202
  type: :development
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
206
  - - '='
193
207
  - !ruby/object:Gem::Version
194
- version: 2.9.0
208
+ version: 2.19.0
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: selenium-webdriver
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - '='
200
214
  - !ruby/object:Gem::Version
201
- version: 4.1.0
215
+ version: 4.7.1
202
216
  type: :development
203
217
  prerelease: false
204
218
  version_requirements: !ruby/object:Gem::Requirement
205
219
  requirements:
206
220
  - - '='
207
221
  - !ruby/object:Gem::Version
208
- version: 4.1.0
222
+ version: 4.7.1
209
223
  - !ruby/object:Gem::Dependency
210
224
  name: sinatra
211
225
  requirement: !ruby/object:Gem::Requirement
212
226
  requirements:
213
227
  - - '='
214
228
  - !ruby/object:Gem::Version
215
- version: 2.2.0
229
+ version: 3.0.5
216
230
  type: :development
217
231
  prerelease: false
218
232
  version_requirements: !ruby/object:Gem::Requirement
219
233
  requirements:
220
234
  - - '='
221
235
  - !ruby/object:Gem::Version
222
- version: 2.2.0
236
+ version: 3.0.5
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: yard
225
239
  requirement: !ruby/object:Gem::Requirement
226
240
  requirements:
227
241
  - - '='
228
242
  - !ruby/object:Gem::Version
229
- version: 0.9.27
243
+ version: 0.9.28
230
244
  type: :development
231
245
  prerelease: false
232
246
  version_requirements: !ruby/object:Gem::Requirement
233
247
  requirements:
234
248
  - - '='
235
249
  - !ruby/object:Gem::Version
236
- version: 0.9.27
250
+ version: 0.9.28
237
251
  description: A fake Pusher server for development and testing.
238
252
  email: hello@tristandunn.com
239
253
  executables:
@@ -251,45 +265,17 @@ files:
251
265
  - lib/pusher-fake/connection.rb
252
266
  - lib/pusher-fake/server.rb
253
267
  - lib/pusher-fake/server/application.rb
268
+ - lib/pusher-fake/server/chain_trap_handlers.rb
254
269
  - lib/pusher-fake/support/base.rb
255
270
  - lib/pusher-fake/support/cucumber.rb
256
271
  - lib/pusher-fake/support/rspec.rb
257
272
  - lib/pusher-fake/webhook.rb
258
- - spec/features/api/channels_spec.rb
259
- - spec/features/api/users_spec.rb
260
- - spec/features/client/connect_spec.rb
261
- - spec/features/client/event_spec.rb
262
- - spec/features/client/presence_spec.rb
263
- - spec/features/client/subscribe_spec.rb
264
- - spec/features/server/event_spec.rb
265
- - spec/features/server/webhooks_spec.rb
266
- - spec/lib/pusher-fake/channel/presence_spec.rb
267
- - spec/lib/pusher-fake/channel/private_spec.rb
268
- - spec/lib/pusher-fake/channel/public_spec.rb
269
- - spec/lib/pusher-fake/channel_spec.rb
270
- - spec/lib/pusher-fake/configuration_spec.rb
271
- - spec/lib/pusher-fake/connection_spec.rb
272
- - spec/lib/pusher-fake/server/application_spec.rb
273
- - spec/lib/pusher-fake/server_spec.rb
274
- - spec/lib/pusher-fake/webhook_spec.rb
275
- - spec/lib/pusher_fake_spec.rb
276
- - spec/spec_helper.rb
277
- - spec/support/application.rb
278
- - spec/support/application/public/javascripts/vendor/polyfill.min.js
279
- - spec/support/application/public/javascripts/vendor/pusher-7.0.6.js
280
- - spec/support/application/views/index.erb
281
- - spec/support/capybara.rb
282
- - spec/support/helpers/connect.rb
283
- - spec/support/helpers/event.rb
284
- - spec/support/helpers/subscription.rb
285
- - spec/support/helpers/user.rb
286
- - spec/support/matchers/have_configuration_option.rb
287
- - spec/support/pusher_fake.rb
288
- - spec/support/webhooks.rb
289
273
  homepage: https://github.com/tristandunn/pusher-fake
290
274
  licenses:
291
275
  - MIT
292
276
  metadata:
277
+ bug_tracker_uri: https://github.com/tristandunn/pusher-fake/issues
278
+ changelog_uri: https://github.com/tristandunn/pusher-fake/blob/main/CHANGELOG.markdown
293
279
  rubygems_mfa_required: 'true'
294
280
  post_install_message:
295
281
  rdoc_options: []
@@ -299,46 +285,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
285
  requirements:
300
286
  - - ">="
301
287
  - !ruby/object:Gem::Version
302
- version: '2.7'
288
+ version: '3.0'
303
289
  required_rubygems_version: !ruby/object:Gem::Requirement
304
290
  requirements:
305
291
  - - ">="
306
292
  - !ruby/object:Gem::Version
307
293
  version: '0'
308
294
  requirements: []
309
- rubygems_version: 3.3.7
295
+ rubygems_version: 3.4.6
310
296
  signing_key:
311
297
  specification_version: 4
312
298
  summary: A fake Pusher server for development and testing.
313
- test_files:
314
- - spec/features/api/channels_spec.rb
315
- - spec/features/api/users_spec.rb
316
- - spec/features/client/connect_spec.rb
317
- - spec/features/client/event_spec.rb
318
- - spec/features/client/presence_spec.rb
319
- - spec/features/client/subscribe_spec.rb
320
- - spec/features/server/event_spec.rb
321
- - spec/features/server/webhooks_spec.rb
322
- - spec/lib/pusher-fake/channel/presence_spec.rb
323
- - spec/lib/pusher-fake/channel/private_spec.rb
324
- - spec/lib/pusher-fake/channel/public_spec.rb
325
- - spec/lib/pusher-fake/channel_spec.rb
326
- - spec/lib/pusher-fake/configuration_spec.rb
327
- - spec/lib/pusher-fake/connection_spec.rb
328
- - spec/lib/pusher-fake/server/application_spec.rb
329
- - spec/lib/pusher-fake/server_spec.rb
330
- - spec/lib/pusher-fake/webhook_spec.rb
331
- - spec/lib/pusher_fake_spec.rb
332
- - spec/spec_helper.rb
333
- - spec/support/application/public/javascripts/vendor/polyfill.min.js
334
- - spec/support/application/public/javascripts/vendor/pusher-7.0.6.js
335
- - spec/support/application/views/index.erb
336
- - spec/support/application.rb
337
- - spec/support/capybara.rb
338
- - spec/support/helpers/connect.rb
339
- - spec/support/helpers/event.rb
340
- - spec/support/helpers/subscription.rb
341
- - spec/support/helpers/user.rb
342
- - spec/support/matchers/have_configuration_option.rb
343
- - spec/support/pusher_fake.rb
344
- - spec/support/webhooks.rb
299
+ test_files: []
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- feature "Requesting channel API endpoint" do
6
- let(:channel_name) { "public-1" }
7
- let(:presence_name) { "presence-example" }
8
-
9
- before do
10
- connect
11
- end
12
-
13
- scenario "all channels, with none created" do
14
- expect(channels).to be_empty
15
- end
16
-
17
- scenario "all channels, with one created" do
18
- subscribe_to(channel_name)
19
-
20
- expect(channels).to have_key(channel_name)
21
- end
22
-
23
- scenario "all channels, with a filter" do
24
- subscribe_to("other")
25
- subscribe_to(channel_name)
26
-
27
- result = channels(filter_by_prefix: "pu")
28
-
29
- expect(result.size).to eq(1)
30
- expect(result).to have_key(channel_name)
31
- end
32
-
33
- scenario "all channels, with info attributes" do
34
- subscribe_to(presence_name)
35
-
36
- result = channels(filter_by_prefix: "presence-", info: "user_count")
37
-
38
- expect(result.size).to eq(1)
39
- expect(result).to have_key(presence_name)
40
- expect(result[presence_name]).to have_key("user_count")
41
- expect(result[presence_name]["user_count"]).to eq(1)
42
- end
43
-
44
- scenario "all channels, with invalid info attributes" do
45
- expect do
46
- channels(info: "user_count")
47
- end.to raise_error(/user_count may only be requested for presence channels/)
48
- end
49
-
50
- scenario "channel, with no occupants" do
51
- expect(channel[:occupied]).to be(false)
52
- end
53
-
54
- scenario "channel, with an occupant" do
55
- subscribe_to(channel_name)
56
-
57
- expect(channel[:occupied]).to be(true)
58
- end
59
-
60
- scenario "channel, with info attributes" do
61
- subscribe_to(presence_name)
62
-
63
- result = Pusher.get("/channels/#{presence_name}", info: "user_count")
64
-
65
- expect(result[:occupied]).to be(true)
66
- expect(result[:user_count]).to eq(1)
67
- end
68
-
69
- scenario "channel, with invalid info attributes" do
70
- expect do
71
- channel(info: "user_count")
72
- end.to raise_error(
73
- /Cannot retrieve the user count unless the channel is a presence channel/
74
- )
75
- end
76
-
77
- protected
78
-
79
- def channel(options = {})
80
- Pusher.get("/channels/#{channel_name}", options)
81
- end
82
-
83
- def channels(options = {})
84
- Pusher.get("/channels", options)[:channels]
85
- end
86
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- feature "Requesting user API endpoint" do
6
- let(:users) { Pusher.get("/channels/#{channel_name}/users")[:users] }
7
- let(:channel_name) { "public-1" }
8
-
9
- before do
10
- connect
11
- connect_as "Bob"
12
- end
13
-
14
- scenario "with no users subscribed" do
15
- expect(users).to be_empty
16
- end
17
-
18
- scenario "with a single user subscribed" do
19
- subscribe_to(channel_name)
20
-
21
- expect(users.size).to eq(1)
22
- end
23
-
24
- scenario "with a multiple users subscribed" do
25
- subscribe_to(channel_name)
26
- subscribe_to_as(channel_name, "Bob")
27
-
28
- ids = PusherFake::Channel.channels[channel_name].connections.map(&:id)
29
-
30
- expect(users.size).to eq(2)
31
-
32
- users.each do |user|
33
- expect(ids).to include(user["id"])
34
- end
35
- end
36
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- feature "Client connecting to the server" do
6
- scenario "successfully connects" do
7
- visit "/"
8
-
9
- expect(page).to have_content("Client connected.")
10
- end
11
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- feature "Client triggers a client event" do
6
- let(:event) { "client-message" }
7
- let(:other_user) { "Bob" }
8
- let(:public_channel) { "chat" }
9
- let(:private_channel) { "private-chat" }
10
-
11
- before do
12
- connect
13
- connect_as(other_user)
14
- end
15
-
16
- scenario "on a subscribed private channel" do
17
- subscribe_to(private_channel)
18
- subscribe_to_as(private_channel, other_user)
19
-
20
- trigger(private_channel, event)
21
-
22
- expect(page).not_to have_event(event, on: private_channel)
23
-
24
- using_session(other_user) do
25
- expect(page).to have_event(event, on: private_channel)
26
- end
27
- end
28
-
29
- scenario "on a subscribed public channel" do
30
- subscribe_to(public_channel)
31
- subscribe_to_as(public_channel, other_user)
32
-
33
- trigger(public_channel, event)
34
-
35
- expect(page).not_to have_event(event, on: public_channel)
36
-
37
- using_session(other_user) do
38
- expect(page).not_to have_event(event, on: public_channel)
39
- end
40
- end
41
-
42
- protected
43
-
44
- def trigger(channel, event)
45
- page.execute_script(
46
- "Helpers.trigger(#{MultiJson.dump(channel)}, #{MultiJson.dump(event)})"
47
- )
48
- end
49
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- feature "Client on a presence channel" do
6
- let(:other_user) { "Bob" }
7
-
8
- before do
9
- connect
10
- end
11
-
12
- scenario "subscribing to a presence channel" do
13
- subscribe_to("presence-game-1")
14
-
15
- expect(page).to have_clients(1, in: "presence-game-1")
16
- end
17
-
18
- scenario "subscribing to a presence channel, with existing users" do
19
- connect_as(other_user, channel: "presence-game-1")
20
-
21
- subscribe_to("presence-game-1")
22
-
23
- expect(page).to have_clients(2, in: "presence-game-1", named: "Alan Turing")
24
- end
25
-
26
- scenario "member entering notification" do
27
- subscribe_to("presence-game-1")
28
-
29
- connect_as(other_user, channel: "presence-game-1")
30
-
31
- expect(page).to have_clients(2, in: "presence-game-1")
32
- end
33
-
34
- scenario "member leaving notification" do
35
- connect_as(other_user, channel: "presence-game-1")
36
- subscribe_to("presence-game-1")
37
-
38
- expect(page).to have_clients(2, in: "presence-game-1")
39
-
40
- unsubscribe_from_as("presence-game-1", other_user)
41
-
42
- expect(page).to have_clients(1, in: "presence-game-1")
43
- end
44
-
45
- scenario "other client connecting" do
46
- subscribe_to("presence-game-1")
47
-
48
- connect_as(other_user)
49
-
50
- expect(page).to have_clients(1, in: "presence-game-1")
51
- end
52
-
53
- protected
54
-
55
- def have_clients(count, options = {})
56
- have_css("li.channel-#{options[:in]}", count: count, text: options[:named])
57
- end
58
- end