diff options
Diffstat (limited to 'actioncable/test/channel/periodic_timers_test.rb')
-rw-r--r-- | actioncable/test/channel/periodic_timers_test.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/actioncable/test/channel/periodic_timers_test.rb b/actioncable/test/channel/periodic_timers_test.rb new file mode 100644 index 0000000000..03464003cf --- /dev/null +++ b/actioncable/test/channel/periodic_timers_test.rb @@ -0,0 +1,68 @@ +require 'test_helper' +require 'stubs/test_connection' +require 'stubs/room' +require 'active_support/time' + +class ActionCable::Channel::PeriodicTimersTest < ActiveSupport::TestCase + class ChatChannel < ActionCable::Channel::Base + # Method name arg + periodically :send_updates, every: 1 + + # Proc arg + periodically -> { ping }, every: 2 + + # Block arg + periodically every: 3 do + ping + end + + private + def ping + end + end + + setup do + @connection = TestConnection.new + end + + test "periodic timers definition" do + timers = ChatChannel.periodic_timers + + assert_equal 3, timers.size + + timers.each_with_index do |timer, i| + assert_kind_of Proc, timer[0] + assert_equal i+1, timer[1][:every] + end + end + + test 'disallow negative and zero periods' do + [ 0, 0.0, 0.seconds, -1, -1.seconds, 'foo', :foo, Object.new ].each do |invalid| + assert_raise ArgumentError, /Expected every:/ do + ChatChannel.periodically :send_updates, every: invalid + end + end + end + + test 'disallow block and arg together' do + assert_raise ArgumentError, /not both/ do + ChatChannel.periodically(:send_updates, every: 1) { ping } + end + end + + test 'disallow unknown args' do + [ 'send_updates', Object.new, nil ].each do |invalid| + assert_raise ArgumentError, /Expected a Symbol/ do + ChatChannel.periodically invalid, every: 1 + end + end + end + + test "timer start and stop" do + @connection.server.event_loop.expects(:timer).times(3).returns(stub(shutdown: nil)) + channel = ChatChannel.new @connection, "{id: 1}", { id: 1 } + + channel.unsubscribe_from_channel + assert_equal [], channel.send(:active_periodic_timers) + end +end |