From f8dd3eb72b2362bb77b8bce48619328b11438142 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 12 Sep 2019 22:37:32 -0500 Subject: [PATCH] Fix #4165: Add mechanism to test error responses. https://danbooru.donmai.us/posts.json?error=500&message=testing --- app/controllers/application_controller.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 798a191c2..130e6e0a0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,6 +10,7 @@ class ApplicationController < ActionController::Base before_action :api_check before_action :set_variant before_action :enable_cors + before_action :cause_error after_action :reset_current_user layout "default" @@ -107,6 +108,19 @@ class ApplicationController < ActionController::Base request.variant = params[:variant].try(:to_sym) end + # allow api clients to force errors for testing purposes. + def cause_error + return unless params[:error].present? + + status = params[:error].to_i + raise ArgumentError, "invalid status code" unless status.in?(400..599) + + error = StandardError.new(params[:message]) + error.set_backtrace(caller) + + render_error_page(status, error) + end + User::Roles.each do |role| define_method("#{role}_only") do if !CurrentUser.user.send("is_#{role}?") || CurrentUser.user.is_banned? || IpBan.is_banned?(CurrentUser.ip_addr)