Use minitest/mock instead of mocha

This commit is contained in:
utilum 2018-05-27 20:50:04 +02:00
parent 565ce0eaba
commit 84854d9d05
8 changed files with 101 additions and 45 deletions

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true
require "test_helper"
require "minitest/mock"
require "stubs/test_connection"
require "stubs/room"
@ -226,12 +227,13 @@ class ActionCable::Channel::BaseTest < ActiveSupport::TestCase
events << ActiveSupport::Notifications::Event.new(*args)
end
@channel.stubs(:subscription_confirmation_sent?).returns(false)
@channel.send(:transmit_subscription_confirmation)
@channel.stub(:subscription_confirmation_sent?, false) do
@channel.send(:transmit_subscription_confirmation)
assert_equal 1, events.length
assert_equal "transmit_subscription_confirmation.action_cable", events[0].name
assert_equal "ActionCable::Channel::BaseTest::ChatChannel", events[0].payload[:channel_class]
assert_equal 1, events.length
assert_equal "transmit_subscription_confirmation.action_cable", events[0].name
assert_equal "ActionCable::Channel::BaseTest::ChatChannel", events[0].payload[:channel_class]
end
ensure
ActiveSupport::Notifications.unsubscribe "transmit_subscription_confirmation.action_cable"
end

View File

@ -1,10 +1,13 @@
# frozen_string_literal: true
require "test_helper"
require "active_support/testing/method_call_assertions"
require "stubs/test_connection"
require "stubs/room"
class ActionCable::Channel::BroadcastingTest < ActiveSupport::TestCase
include ActiveSupport::Testing::MethodCallAssertions
class ChatChannel < ActionCable::Channel::Base
end
@ -13,8 +16,16 @@ class ActionCable::Channel::BroadcastingTest < ActiveSupport::TestCase
end
test "broadcasts_to" do
ActionCable.stubs(:server).returns mock().tap { |m| m.expects(:broadcast).with("action_cable:channel:broadcasting_test:chat:Room#1-Campfire", "Hello World") }
ChatChannel.broadcast_to(Room.new(1), "Hello World")
assert_called_with(
ActionCable.server,
:broadcast,
[
"action_cable:channel:broadcasting_test:chat:Room#1-Campfire",
"Hello World"
]
) do
ChatChannel.broadcast_to(Room.new(1), "Hello World")
end
end
test "broadcasting_for with an object" do

View File

@ -4,8 +4,11 @@ require "test_helper"
require "stubs/test_connection"
require "stubs/room"
require "active_support/time"
require "active_support/testing/method_call_assertions"
class ActionCable::Channel::PeriodicTimersTest < ActiveSupport::TestCase
include ActiveSupport::Testing::MethodCallAssertions
class ChatChannel < ActionCable::Channel::Base
# Method name arg
periodically :send_updates, every: 1
@ -64,11 +67,22 @@ class ActionCable::Channel::PeriodicTimersTest < ActiveSupport::TestCase
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
mock = Minitest::Mock.new
3.times { mock.expect(:shutdown, nil) }
channel.subscribe_to_channel
channel.unsubscribe_from_channel
assert_equal [], channel.send(:active_periodic_timers)
assert_called(
@connection.server.event_loop,
:timer,
times: 3,
returns: mock
) do
channel = ChatChannel.new @connection, "{id: 1}", id: 1
channel.subscribe_to_channel
channel.unsubscribe_from_channel
assert_equal [], channel.send(:active_periodic_timers)
end
assert mock.verify
end
end

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true
require "test_helper"
require "minitest/mock"
require "stubs/test_connection"
require "stubs/room"
@ -20,24 +21,36 @@ class ActionCable::Channel::RejectionTest < ActiveSupport::TestCase
end
test "subscription rejection" do
@connection.expects(:subscriptions).returns mock().tap { |m| m.expects(:remove_subscription).with instance_of(SecretChannel) }
@channel = SecretChannel.new @connection, "{id: 1}", id: 1
@channel.subscribe_to_channel
subscriptions = Minitest::Mock.new
subscriptions.expect(:remove_subscription, SecretChannel, [SecretChannel])
expected = { "identifier" => "{id: 1}", "type" => "reject_subscription" }
assert_equal expected, @connection.last_transmission
@connection.stub(:subscriptions, subscriptions) do
@channel = SecretChannel.new @connection, "{id: 1}", id: 1
@channel.subscribe_to_channel
expected = { "identifier" => "{id: 1}", "type" => "reject_subscription" }
assert_equal expected, @connection.last_transmission
end
assert subscriptions.verify
end
test "does not execute action if subscription is rejected" do
@connection.expects(:subscriptions).returns mock().tap { |m| m.expects(:remove_subscription).with instance_of(SecretChannel) }
@channel = SecretChannel.new @connection, "{id: 1}", id: 1
@channel.subscribe_to_channel
subscriptions = Minitest::Mock.new
subscriptions.expect(:remove_subscription, SecretChannel, [SecretChannel])
expected = { "identifier" => "{id: 1}", "type" => "reject_subscription" }
assert_equal expected, @connection.last_transmission
assert_equal 1, @connection.transmissions.size
@connection.stub(:subscriptions, subscriptions) do
@channel = SecretChannel.new @connection, "{id: 1}", id: 1
@channel.subscribe_to_channel
@channel.perform_action("action" => :secret_action)
assert_equal 1, @connection.transmissions.size
expected = { "identifier" => "{id: 1}", "type" => "reject_subscription" }
assert_equal expected, @connection.last_transmission
assert_equal 1, @connection.transmissions.size
@channel.perform_action("action" => :secret_action)
assert_equal 1, @connection.transmissions.size
end
assert subscriptions.verify
end
end

View File

@ -2,6 +2,7 @@
require "test_helper"
require "active_support/testing/method_call_assertions"
require "minitest/mock"
require "stubs/test_connection"
require "stubs/room"
@ -54,29 +55,41 @@ module ActionCable::StreamTests
test "streaming start and stop" do
run_in_eventmachine do
connection = TestConnection.new
connection.pubsub.expects(:subscribe).with("test_room_1", kind_of(Proc), kind_of(Proc))
channel = ChatChannel.new connection, "{id: 1}", id: 1
channel.subscribe_to_channel
pubsub = Minitest::Mock.new connection.pubsub
wait_for_async
pubsub.expect(:subscribe, nil, ["test_room_1", Proc, Proc])
pubsub.expect(:unsubscribe, nil, ["test_room_1", Proc])
connection.pubsub.expects(:unsubscribe)
channel.unsubscribe_from_channel
connection.stub(:pubsub, pubsub) do
channel = ChatChannel.new connection, "{id: 1}", id: 1
channel.subscribe_to_channel
wait_for_async
channel.unsubscribe_from_channel
end
assert pubsub.verify
end
end
test "stream from non-string channel" do
run_in_eventmachine do
connection = TestConnection.new
connection.pubsub.expects(:subscribe).with("channel", kind_of(Proc), kind_of(Proc))
pubsub = Minitest::Mock.new connection.pubsub
channel = SymbolChannel.new connection, ""
channel.subscribe_to_channel
pubsub.expect(:subscribe, nil, ["channel", Proc, Proc])
pubsub.expect(:unsubscribe, nil, ["channel", Proc])
wait_for_async
connection.stub(:pubsub, pubsub) do
channel = SymbolChannel.new connection, ""
channel.subscribe_to_channel
connection.pubsub.expects(:unsubscribe)
channel.unsubscribe_from_channel
wait_for_async
channel.unsubscribe_from_channel
end
assert pubsub.verify
end
end

View File

@ -43,10 +43,11 @@ class ActionCable::Connection::ClientSocketTest < ActionCable::TestCase
# Internal hax = :(
client = connection.websocket.send(:websocket)
client.instance_variable_get("@stream").expects(:write).raises("foo")
client.instance_variable_get("@stream").stub(:write, proc { raise "foo" }) do
assert_not_called(client, :client_gone) do
client.write("boo")
assert_not_called(client, :client_gone) do
client.write("boo")
end
end
assert_equal %w[ foo ], connection.errors
end

View File

@ -2,6 +2,7 @@
require "test_helper"
require "active_support/testing/method_call_assertions"
require "minitest/mock"
require "stubs/test_server"
class ActionCable::Connection::StreamTest < ActionCable::TestCase
@ -44,10 +45,11 @@ class ActionCable::Connection::StreamTest < ActionCable::TestCase
# Internal hax = :(
client = connection.websocket.send(:websocket)
client.instance_variable_get("@stream").instance_variable_get("@rack_hijack_io").expects(:write).raises(closed_exception, "foo")
assert_called(client, :client_gone) do
client.write("boo")
rack_hijack_io = client.instance_variable_get("@stream").instance_variable_get("@rack_hijack_io")
rack_hijack_io.stub(:write, proc { raise(closed_exception, "foo") }) do
assert_called(client, :client_gone) do
client.write("boo")
end
end
assert_equal [], connection.errors
end

View File

@ -3,7 +3,7 @@
require "stubs/user"
class TestConnection
attr_reader :identifiers, :logger, :current_user, :server, :transmissions
attr_reader :identifiers, :logger, :current_user, :server, :subscriptions, :transmissions
delegate :pubsub, to: :server