aboutsummaryrefslogtreecommitdiffstats
path: root/test/channel/base_test.rb
diff options
context:
space:
mode:
authorCristian Bica <cristian.bica@gmail.com>2015-07-23 00:10:22 +0300
committerCristian Bica <cristian.bica@gmail.com>2015-07-23 15:00:30 +0300
commita97a1fc7452088b875edb6b258c92d6eab1c19a4 (patch)
treed0e1952753f699ad19fbac5b2d0968824717555d /test/channel/base_test.rb
parentbdbc91ab5840faf1e1c5002eb9d0be442ec52504 (diff)
downloadrails-a97a1fc7452088b875edb6b258c92d6eab1c19a4.tar.gz
rails-a97a1fc7452088b875edb6b258c92d6eab1c19a4.tar.bz2
rails-a97a1fc7452088b875edb6b258c92d6eab1c19a4.zip
Improve channel actions dispatcher to allow inheritance/mixins
Fixes #14
Diffstat (limited to 'test/channel/base_test.rb')
-rw-r--r--test/channel/base_test.rb40
1 files changed, 38 insertions, 2 deletions
diff --git a/test/channel/base_test.rb b/test/channel/base_test.rb
index aa31d23297..e7944ff06b 100644
--- a/test/channel/base_test.rb
+++ b/test/channel/base_test.rb
@@ -3,7 +3,22 @@ require 'stubs/test_connection'
require 'stubs/room'
class ActionCable::Channel::BaseTest < ActiveSupport::TestCase
- class ChatChannel < ActionCable::Channel::Base
+ class ActionCable::Channel::Base
+ def kick
+ @last_action = [ :kick ]
+ end
+
+ def topic
+ end
+ end
+
+ class BasicChannel < ActionCable::Channel::Base
+ def chatters
+ @last_action = [ :chatters ]
+ end
+ end
+
+ class ChatChannel < BasicChannel
attr_reader :room, :last_action
on_subscribe :toggle_subscribed
on_unsubscribe :toggle_subscribed
@@ -29,6 +44,10 @@ class ActionCable::Channel::BaseTest < ActiveSupport::TestCase
@last_action = [ :speak, data ]
end
+ def topic(data)
+ @last_action = [ :topic, data ]
+ end
+
def subscribed?
@subscribed
end
@@ -87,11 +106,28 @@ class ActionCable::Channel::BaseTest < ActiveSupport::TestCase
assert_equal [ :speak, data ], @channel.last_action
end
- test "try calling a private method" do
+ test "should not dispatch a private method" do
@channel.perform_action 'action' => :rm_rf
assert_nil @channel.last_action
end
+ test "should not dispatch a public method defined on Base" do
+ @channel.perform_action 'action' => :kick
+ assert_nil @channel.last_action
+ end
+
+ test "should dispatch a public method defined on Base and redefined on channel" do
+ data = { 'action' => :topic, 'content' => "This is Sparta!" }
+
+ @channel.perform_action data
+ assert_equal [ :topic, data ], @channel.last_action
+ end
+
+ test "should dispatch calling a public method defined in an ancestor" do
+ @channel.perform_action 'action' => :chatters
+ assert_equal [ :chatters ], @channel.last_action
+ end
+
test "transmitting data" do
@channel.perform_action 'action' => :get_latest