2018-12-25 09:35:15 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "abstract_unit"
|
|
|
|
|
|
|
|
class ActionableExceptionsTest < ActionDispatch::IntegrationTest
|
|
|
|
Actions = []
|
|
|
|
|
|
|
|
class ActionError < StandardError
|
|
|
|
include ActiveSupport::ActionableError
|
|
|
|
|
|
|
|
action "Successful action" do
|
|
|
|
Actions << "Action!"
|
|
|
|
end
|
|
|
|
|
|
|
|
action "Failed action" do
|
|
|
|
raise "Inaction!"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Noop = -> env { [200, {}, [""]] }
|
|
|
|
|
|
|
|
setup do
|
|
|
|
@app = ActionDispatch::ActionableExceptions.new(Noop)
|
|
|
|
|
|
|
|
Actions.clear
|
|
|
|
end
|
|
|
|
|
|
|
|
test "dispatches an actionable error" do
|
|
|
|
post ActionDispatch::ActionableExceptions.endpoint, params: {
|
|
|
|
error: ActionError.name,
|
|
|
|
action: "Successful action",
|
|
|
|
location: "/",
|
2020-06-11 10:15:49 -04:00
|
|
|
}, headers: { "action_dispatch.show_detailed_exceptions" => true }
|
2018-12-25 09:35:15 -05:00
|
|
|
|
|
|
|
assert_equal ["Action!"], Actions
|
|
|
|
|
|
|
|
assert_equal 302, response.status
|
|
|
|
assert_equal "/", response.headers["Location"]
|
|
|
|
end
|
|
|
|
|
2019-02-06 01:55:23 -05:00
|
|
|
test "cannot dispatch errors if not allowed" do
|
|
|
|
post ActionDispatch::ActionableExceptions.endpoint, params: {
|
|
|
|
error: ActionError.name,
|
|
|
|
action: "Successful action",
|
|
|
|
location: "/",
|
2020-06-11 10:15:49 -04:00
|
|
|
}, headers: { "action_dispatch.show_detailed_exceptions" => false }
|
2019-02-06 01:55:23 -05:00
|
|
|
|
|
|
|
assert_empty Actions
|
|
|
|
end
|
|
|
|
|
2018-12-25 09:35:15 -05:00
|
|
|
test "dispatched action can fail" do
|
|
|
|
assert_raise RuntimeError do
|
|
|
|
post ActionDispatch::ActionableExceptions.endpoint, params: {
|
|
|
|
error: ActionError.name,
|
|
|
|
action: "Failed action",
|
|
|
|
location: "/",
|
2020-06-11 10:15:49 -04:00
|
|
|
}, headers: { "action_dispatch.show_detailed_exceptions" => true }
|
2018-12-25 09:35:15 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "cannot dispatch non-actionable errors" do
|
|
|
|
assert_raise ActiveSupport::ActionableError::NonActionable do
|
|
|
|
post ActionDispatch::ActionableExceptions.endpoint, params: {
|
|
|
|
error: RuntimeError.name,
|
|
|
|
action: "Inexistent action",
|
|
|
|
location: "/",
|
2020-06-11 10:15:49 -04:00
|
|
|
}, headers: { "action_dispatch.show_detailed_exceptions" => true }
|
2018-12-25 09:35:15 -05:00
|
|
|
end
|
|
|
|
end
|
2019-04-19 00:49:56 -04:00
|
|
|
|
|
|
|
test "cannot dispatch Inexistent errors" do
|
|
|
|
assert_raise ActiveSupport::ActionableError::NonActionable do
|
|
|
|
post ActionDispatch::ActionableExceptions.endpoint, params: {
|
|
|
|
error: "",
|
|
|
|
action: "Inexistent action",
|
|
|
|
location: "/",
|
2020-06-11 10:15:49 -04:00
|
|
|
}, headers: { "action_dispatch.show_detailed_exceptions" => true }
|
2019-04-19 00:49:56 -04:00
|
|
|
end
|
|
|
|
end
|
2018-12-25 09:35:15 -05:00
|
|
|
end
|