diff --git a/lib/jsonapi/plugs/query_parser.ex b/lib/jsonapi/plugs/query_parser.ex index 2335a4a6..e9df8f6d 100644 --- a/lib/jsonapi/plugs/query_parser.ex +++ b/lib/jsonapi/plugs/query_parser.ex @@ -182,6 +182,7 @@ defmodule JSONAPI.QueryParser do |> Enum.map(fn field -> valid_sort = Keyword.get(opts, :sort, []) [_, direction, field] = Regex.run(~r/(-?)(\S*)/, field) + field = underscore(field) unless field in valid_sort do raise InvalidQuery, resource: config.view.type(), param: field, param_type: :sort diff --git a/test/jsonapi/plugs/query_parser_test.exs b/test/jsonapi/plugs/query_parser_test.exs index e647f207..2a3a5c12 100644 --- a/test/jsonapi/plugs/query_parser_test.exs +++ b/test/jsonapi/plugs/query_parser_test.exs @@ -49,11 +49,13 @@ defmodule JSONAPI.QueryParserTest do end test "parse_sort/2 turns sorts into valid ecto sorts" do - config = struct(Config, opts: [sort: ~w(name title)], view: MyView) + config = struct(Config, opts: [sort: ~w(name title updated_at)], view: MyView) assert parse_sort(config, "name,title").sort == [asc: :name, asc: :title] assert parse_sort(config, "name").sort == [asc: :name] assert parse_sort(config, "-name").sort == [desc: :name] assert parse_sort(config, "name,-title").sort == [asc: :name, desc: :title] + assert parse_sort(config, "updatedAt").sort == [asc: :updated_at] + assert parse_sort(config, "-updatedAt").sort == [desc: :updated_at] end test "parse_sort/2 raises on invalid sorts" do