diff --git a/app/services/members/list_service.rb b/app/services/members/list_service.rb index e217d8240..6ed15eefd 100644 --- a/app/services/members/list_service.rb +++ b/app/services/members/list_service.rb @@ -100,7 +100,7 @@ class Members::ListService 'users.id' end - "#{order_key} #{direction}, users.id ASC LIMIT #{limit} OFFSET #{offset}" + Arel.sql("#{order_key} #{direction}, users.id ASC LIMIT #{limit} OFFSET #{offset}") end end end diff --git a/test/integration/members/list_test.rb b/test/integration/members/list_test.rb new file mode 100644 index 000000000..c3bf544d2 --- /dev/null +++ b/test/integration/members/list_test.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'test_helper' + +class ListTest < ActionDispatch::IntegrationTest + def setup + @admin = User.find_by(username: 'admin') + login_as(@admin, scope: :user) + end + + test 'all members' do + post '/api/members/list', params: { query: { + search: '', + order_by: 'id', + page: 1, + size: 20 + } }.to_json, headers: default_headers + + # Check response format & status + assert_equal 200, response.status, response.body + assert_match Mime[:json].to_s, response.content_type + + # Check that we have all users + users = json_response(response.body) + assert_equal User.members.count, users.size, 'some users are missing' + + # Check that users are ordered by id + first_user = User.members.order(:id).limit(1).first + last_user = User.members.order(id: :desc).limit(1).first + assert_equal first_user.id, users.first[:id] + assert_equal last_user.id, users.last[:id] + end +end