require "abstract_unit" require "action_dispatch" require "active_record" class JsonParamsParsingTest < ActionDispatch::IntegrationTest def test_prevent_null_query # Make sure we have data to find klass = Class.new(ActiveRecord::Base) do def self.name; 'Foo'; end establish_connection adapter: "sqlite3", database: ":memory:" connection.create_table "foos" do |t| t.string :title t.timestamps null: false end end klass.create assert klass.first app = ->(env) { request = ActionDispatch::Request.new env params = ActionController::Parameters.new request.parameters if params[:t] klass.find_by_title(params[:t]) else nil end } assert_nil app.call(make_env({ 't' => nil })) assert_nil app.call(make_env({ 't' => [nil] })) [[[nil]], [[[nil]]]].each do |data| assert_nil app.call(make_env({ 't' => data })) end ensure klass.connection.drop_table("foos") end private def make_env json data = JSON.dump json content_length = data.length { 'CONTENT_LENGTH' => content_length, 'CONTENT_TYPE' => 'application/json', 'rack.input' => StringIO.new(data) } end end