pusher-fake 4.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pusher-fake/channel/public.rb +32 -0
- data/lib/pusher-fake.rb +1 -1
- data/spec/features/client/subscribe_spec.rb +21 -6
- data/spec/features/server/webhooks_spec.rb +19 -0
- data/spec/lib/pusher-fake/channel/public_spec.rb +58 -0
- data/spec/support/application/views/index.erb +3 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '039808605b16ad3d4532da9fc4041f4f2cba3f783e4ec63729f5bc5b024565eb'
|
4
|
+
data.tar.gz: 4ff72ecce469d90b48892ae1fe0f677806a9aa8b8a3b0ff5a33c7105da3585b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7036cbe9c7d805d193ccbb6492a58ef102e793218907787df1a8a2155a828e10aab13483ec6d783a65a1b11dc8936e73f8d3f55735cf64bb948a590dfe4e238a
|
7
|
+
data.tar.gz: ecf4faa213465f21879a0926c9e2adf8d1b80e515eff2a2192c8033e998bcbaca044e770c54652d6a31c4f967cc88f4c7c4a9cb3b04c601eb68016a964140c84
|
@@ -4,6 +4,8 @@ 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
|
8
|
+
|
7
9
|
# @return [Array] Connections in this channel.
|
8
10
|
attr_reader :connections
|
9
11
|
|
@@ -15,6 +17,7 @@ module PusherFake
|
|
15
17
|
# @param [String] name The channel name.
|
16
18
|
def initialize(name)
|
17
19
|
@name = name
|
20
|
+
@last_event = nil
|
18
21
|
@connections = []
|
19
22
|
end
|
20
23
|
|
@@ -24,6 +27,7 @@ module PusherFake
|
|
24
27
|
# @param [Hash] options The options for the channel.
|
25
28
|
def add(connection, options = {})
|
26
29
|
subscription_succeeded(connection, options)
|
30
|
+
emit_last_event(connection)
|
27
31
|
end
|
28
32
|
|
29
33
|
# Emit an event to the channel.
|
@@ -31,6 +35,10 @@ module PusherFake
|
|
31
35
|
# @param [String] event The event name.
|
32
36
|
# @param [Hash] data The event data.
|
33
37
|
def emit(event, data, options = {})
|
38
|
+
if cache_channel?
|
39
|
+
@last_event = [event, data]
|
40
|
+
end
|
41
|
+
|
34
42
|
connections.each do |connection|
|
35
43
|
unless connection.id == options[:socket_id]
|
36
44
|
connection.emit(event, data, name)
|
@@ -71,6 +79,30 @@ module PusherFake
|
|
71
79
|
|
72
80
|
private
|
73
81
|
|
82
|
+
# @return [Array] Arguments for the last event emitted.
|
83
|
+
attr_reader :last_event
|
84
|
+
|
85
|
+
# Whether or not the channel is a cache channel.
|
86
|
+
#
|
87
|
+
# @return [Boolean]
|
88
|
+
def cache_channel?
|
89
|
+
@cache_channel ||= name.match?(CACHE_CHANNEL_PREFIX)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Emit the last event if present and a cache channel.
|
93
|
+
#
|
94
|
+
# @param [Connection] connection The connection to emit to.
|
95
|
+
def emit_last_event(connection)
|
96
|
+
return unless cache_channel?
|
97
|
+
|
98
|
+
if last_event
|
99
|
+
connection.emit(*last_event, name)
|
100
|
+
else
|
101
|
+
connection.emit("pusher:cache_miss", nil, name)
|
102
|
+
trigger("cache_miss", channel: name)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
74
106
|
# Notify the +connection+ of the successful subscription and add the
|
75
107
|
# connection to the channel.
|
76
108
|
#
|
data/lib/pusher-fake.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
feature "Client subscribing to a channel" do
|
6
|
+
let(:cache_event) { "command" }
|
7
|
+
let(:cache_channel) { "cache-last-command" }
|
8
|
+
let(:other_user) { "Bob" }
|
9
|
+
|
6
10
|
before do
|
7
11
|
connect
|
8
12
|
end
|
@@ -49,16 +53,27 @@ feature "Client subscribing to a channel" do
|
|
49
53
|
expect(page).not_to have_content("Subscribed to presence-game-1.")
|
50
54
|
end
|
51
55
|
|
52
|
-
|
56
|
+
scenario "successfully subscribes to a cache channel, with no cached event" do
|
57
|
+
subscribe_to(cache_channel)
|
53
58
|
|
54
|
-
|
55
|
-
page.execute_script("Helpers.subscribe(#{MultiJson.dump(channel)})")
|
59
|
+
expect(page).to have_content("No cached event for cache-last-command.")
|
56
60
|
end
|
57
61
|
|
58
|
-
|
59
|
-
|
62
|
+
scenario "successfully subscribes to a cache channel, with cached event" do
|
63
|
+
subscribe_to(cache_channel)
|
64
|
+
Pusher.trigger(cache_channel, cache_event, {}, {})
|
65
|
+
|
66
|
+
connect_as(other_user, channel: cache_channel)
|
60
67
|
|
61
|
-
|
68
|
+
using_session(other_user) do
|
69
|
+
expect(page).to have_content("Channel #{cache_channel} received #{cache_event} event.")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
protected
|
74
|
+
|
75
|
+
def attempt_to_subscribe_to(channel)
|
76
|
+
page.execute_script("Helpers.subscribe(#{MultiJson.dump(channel)})")
|
62
77
|
end
|
63
78
|
|
64
79
|
def override_socket_id(value)
|
@@ -5,6 +5,7 @@ require "spec_helper"
|
|
5
5
|
feature "Receiving event webhooks" do
|
6
6
|
let(:channel) { "room-1" }
|
7
7
|
let(:other_user) { "Bob" }
|
8
|
+
let(:cache_channel) { "cache-last-command" }
|
8
9
|
let(:presence_channel) { "presence-room-1" }
|
9
10
|
|
10
11
|
before do
|
@@ -72,6 +73,24 @@ feature "Receiving event webhooks" do
|
|
72
73
|
"user_id" => user_id(other_user))
|
73
74
|
end
|
74
75
|
|
76
|
+
scenario "subscribing to a cache channel with no event" do
|
77
|
+
subscribe_to(cache_channel)
|
78
|
+
|
79
|
+
expect(events).to include_event("cache_miss",
|
80
|
+
"channel" => cache_channel)
|
81
|
+
end
|
82
|
+
|
83
|
+
scenario "subscribing to a cache channel with an event" do
|
84
|
+
subscribe_to(cache_channel)
|
85
|
+
events.clear
|
86
|
+
Pusher.trigger(cache_channel, "an event", {}, {})
|
87
|
+
|
88
|
+
subscribe_to_as(cache_channel, other_user)
|
89
|
+
|
90
|
+
expect(events).not_to include_event("cache_miss",
|
91
|
+
"channel" => cache_channel)
|
92
|
+
end
|
93
|
+
|
75
94
|
protected
|
76
95
|
|
77
96
|
def events
|
@@ -53,6 +53,64 @@ describe PusherFake::Channel, "#add" do
|
|
53
53
|
expect(PusherFake::Webhook).to have_received(:trigger)
|
54
54
|
.with("channel_occupied", channel: name).once
|
55
55
|
end
|
56
|
+
|
57
|
+
context "when a cached channel" do
|
58
|
+
let(:name) { "cache-name" }
|
59
|
+
|
60
|
+
before do
|
61
|
+
allow(subject).to receive(:connections).and_call_original
|
62
|
+
end
|
63
|
+
|
64
|
+
context "with a cached event" do
|
65
|
+
before do
|
66
|
+
subject.emit("example-cache-event", example: true)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "triggers the cached event to the connection added" do
|
70
|
+
subject.add(connection)
|
71
|
+
|
72
|
+
expect(connection).to have_received(:emit)
|
73
|
+
.with("example-cache-event", { example: true }, name).once
|
74
|
+
end
|
75
|
+
|
76
|
+
it "does not trigger cache miss event" do
|
77
|
+
subject.add(connection)
|
78
|
+
|
79
|
+
expect(connection).not_to have_received(:emit)
|
80
|
+
.with("pusher:cache-miss", nil, name)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "does not trigger cache miss webhook" do
|
84
|
+
subject.add(connection)
|
85
|
+
|
86
|
+
expect(PusherFake::Webhook).not_to have_received(:trigger)
|
87
|
+
.with("cache_miss", channel: name)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "without a cached event" do
|
92
|
+
it "triggers cache miss event" do
|
93
|
+
subject.add(connection)
|
94
|
+
|
95
|
+
expect(connection).to have_received(:emit)
|
96
|
+
.with("pusher:cache_miss", nil, name).once
|
97
|
+
end
|
98
|
+
|
99
|
+
it "triggers cache miss webhook" do
|
100
|
+
subject.add(connection)
|
101
|
+
|
102
|
+
expect(PusherFake::Webhook).to have_received(:trigger)
|
103
|
+
.with("cache_miss", channel: name).once
|
104
|
+
end
|
105
|
+
|
106
|
+
it "does not trigger event" do
|
107
|
+
subject.add(connection)
|
108
|
+
|
109
|
+
expect(connection).not_to have_received(:emit)
|
110
|
+
.with("example-cache-event", { example: true }, name)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
56
114
|
end
|
57
115
|
|
58
116
|
describe PusherFake::Channel, "#emit" do
|
@@ -65,6 +65,9 @@
|
|
65
65
|
|
66
66
|
list.removeChild(item);
|
67
67
|
})
|
68
|
+
.bind("pusher:cache_miss", function(client) {
|
69
|
+
Helpers.log("No cached event for " + name + ".");
|
70
|
+
})
|
68
71
|
.bind_global(function(event, message) {
|
69
72
|
Helpers.log("Channel " + name + " received " + event + " event.");
|
70
73
|
});
|
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.
|
4
|
+
version: 4.1.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-
|
11
|
+
date: 2022-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|