@@ -29,7 +29,9 @@ defmodule Phoenix.Test.ChannelTest do
29
29
defmodule Channel do
30
30
use Phoenix.Channel
31
31
32
- intercept [ "stop" ]
32
+ intercept [ "stop" , { "intercept" , & Channel . intercept_predicate / 1 } ]
33
+
34
+ def intercept_predicate ( socket ) , do: socket . assigns [ :intercept ]
33
35
34
36
def join ( "foo:ok" , _ , socket ) do
35
37
{ :ok , socket }
@@ -62,6 +64,10 @@ defmodule Phoenix.Test.ChannelTest do
62
64
{ :ok , socket }
63
65
end
64
66
67
+ def join ( "foo:intercept" , payload , socket ) do
68
+ { :ok , assign ( socket , :intercept , payload [ "intercept" ] ) }
69
+ end
70
+
65
71
def handle_in ( "broadcast" , broadcast , socket ) do
66
72
broadcast_from! ( socket , "broadcast" , broadcast )
67
73
{ :noreply , socket }
@@ -102,6 +108,12 @@ defmodule Phoenix.Test.ChannelTest do
102
108
{ :stop , :shutdown , :ok , socket }
103
109
end
104
110
111
+ def handle_out ( "intercept" , payload , socket ) do
112
+ payload = Map . put ( payload , "intercepted" , true )
113
+ push ( socket , "intercept" , payload )
114
+ { :noreply , socket }
115
+ end
116
+
105
117
def handle_out ( "stop" , _payload , socket ) do
106
118
{ :stop , :shutdown , socket }
107
119
end
@@ -435,6 +447,18 @@ defmodule Phoenix.Test.ChannelTest do
435
447
assert_graceful_exit ( pid )
436
448
end
437
449
450
+ test "broadcast is intercepted when socket predicate returns true" do
451
+ { :ok , _ , socket } = subscribe_and_join ( socket ( UserSocket ) , Channel , "foo:intercept" , % { "intercept" => true } )
452
+ broadcast_from! ( socket , "intercept" , % { "intercepted" => false } )
453
+ assert_push "intercept" , % { "intercepted" => true }
454
+ end
455
+
456
+ test "broadcast isn't intercepted when socket predicate returns false" do
457
+ { :ok , _ , socket } = subscribe_and_join ( socket ( UserSocket ) , Channel , "foo:intercept" )
458
+ broadcast_from! ( socket , "intercept" , % { "intercepted" => false } )
459
+ assert_push "intercept" , % { "intercepted" => false }
460
+ end
461
+
438
462
## handle_info
439
463
440
464
test "handles messages and stops" do
0 commit comments