1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
# frozen_string_literal: true
require_relative 'helper'
separate_testing do
require_relative '../lib/rack/query_parser'
end
describe Rack::QueryParser do
it "can normalize values with missing values" do
query_parser = Rack::QueryParser.make_default(8)
query_parser.parse_nested_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=").must_equal({"a" => ""})
query_parser.parse_nested_query("a").must_equal({"a" => nil})
end
it "accepts bytesize_limit to specify maximum size of query string to parse" do
query_parser = Rack::QueryParser.make_default(32, bytesize_limit: 3)
query_parser.parse_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=a").must_equal({"a" => "a"})
query_parser.parse_nested_query("a=a", '&').must_equal({"a" => "a"})
proc { query_parser.parse_query("a=aa") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=aa") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=aa", '&') }.must_raise Rack::QueryParser::QueryLimitError
end
it "accepts params_limit to specify maximum number of query parameters to parse" do
query_parser = Rack::QueryParser.make_default(32, params_limit: 2)
query_parser.parse_query("a=a&b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a&b=b").must_equal({"a" => "a", "b" => "b"})
query_parser.parse_nested_query("a=a&b=b", '&').must_equal({"a" => "a", "b" => "b"})
proc { query_parser.parse_query("a=a&b=b&c=c") }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_nested_query("a=a&b=b&c=c", '&') }.must_raise Rack::QueryParser::QueryLimitError
proc { query_parser.parse_query("b[]=a&b[]=b&b[]=c") }.must_raise Rack::QueryParser::QueryLimitError
end
end
|