rails--rails/actionpack/lib/action_dispatch/testing/test_response.rb

137 lines
4.7 KiB
Ruby

module ActionDispatch
# Integration test methods such as ActionDispatch::Integration::Session#get
# and ActionDispatch::Integration::Session#post return objects of class
# TestResponse, which represent the HTTP response results of the requested
# controller actions.
#
# See Response for more information on controller response objects.
class TestResponse < Response
def self.from_response(response)
new.tap do |resp|
resp.status = response.status
resp.headers = response.headers
resp.body = response.body
end
end
module DeprecatedHelpers
def template
ActiveSupport::Deprecation.warn("response.template has been deprecated. Use controller.template instead", caller)
@template
end
attr_writer :template
def session
ActiveSupport::Deprecation.warn("response.session has been deprecated. Use request.session instead", caller)
@request.session
end
def assigns
ActiveSupport::Deprecation.warn("response.assigns has been deprecated. Use controller.assigns instead", caller)
@template.controller.assigns
end
def layout
ActiveSupport::Deprecation.warn("response.layout has been deprecated. Use template.layout instead", caller)
@template.layout
end
def redirected_to
::ActiveSupport::Deprecation.warn("response.redirected_to is deprecated. Use response.redirect_url instead", caller)
redirect_url
end
def redirect_url_match?(pattern)
::ActiveSupport::Deprecation.warn("response.redirect_url_match? is deprecated. Use assert_match(/foo/, response.redirect_url) instead", caller)
return false if redirect_url.nil?
p = Regexp.new(pattern) if pattern.class == String
p = pattern if pattern.class == Regexp
return false if p.nil?
p.match(redirect_url) != nil
end
# Returns the template of the file which was used to
# render this response (or nil)
def rendered
ActiveSupport::Deprecation.warn("response.rendered has been deprecated. Use tempate.rendered instead", caller)
@template.instance_variable_get(:@_rendered)
end
# A shortcut to the flash. Returns an empty hash if no session flash exists.
def flash
ActiveSupport::Deprecation.warn("response.flash has been deprecated. Use request.flash instead", caller)
request.session['flash'] || {}
end
# Do we have a flash?
def has_flash?
ActiveSupport::Deprecation.warn("response.has_flash? has been deprecated. Use flash.any? instead", caller)
!flash.empty?
end
# Do we have a flash that has contents?
def has_flash_with_contents?
ActiveSupport::Deprecation.warn("response.has_flash_with_contents? has been deprecated. Use flash.any? instead", caller)
!flash.empty?
end
# Does the specified flash object exist?
def has_flash_object?(name=nil)
ActiveSupport::Deprecation.warn("response.has_flash_object? has been deprecated. Use flash[name] instead", caller)
!flash[name].nil?
end
# Does the specified object exist in the session?
def has_session_object?(name=nil)
ActiveSupport::Deprecation.warn("response.has_session_object? has been deprecated. Use session[name] instead", caller)
!session[name].nil?
end
# A shortcut to the template.assigns
def template_objects
ActiveSupport::Deprecation.warn("response.template_objects has been deprecated. Use tempate.assigns instead", caller)
@template.assigns || {}
end
# Does the specified template object exist?
def has_template_object?(name=nil)
ActiveSupport::Deprecation.warn("response.has_template_object? has been deprecated. Use tempate.assigns[name].nil? instead", caller)
!template_objects[name].nil?
end
# Returns binary content (downloadable file), converted to a String
def binary_content
ActiveSupport::Deprecation.warn("response.binary_content has been deprecated. Use response.body instead", caller)
body
end
end
include DeprecatedHelpers
# Was the response successful?
def success?
(200..299).include?(response_code)
end
# Was the URL not found?
def missing?
response_code == 404
end
# Were we redirected?
def redirect?
(300..399).include?(response_code)
end
# Was there a server-side error?
def error?
(500..599).include?(response_code)
end
alias_method :server_error?, :error?
# Was there a client client?
def client_error?
(400..499).include?(response_code)
end
end
end