From 1a7d2aba3b06a1e4fcc3861eeb70af30fc3330f6 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Fri, 7 Jul 2017 09:29:00 +0200 Subject: [PATCH] add created at filter logic to users finder and API --- app/finders/users_finder.rb | 13 +++++++++++++ lib/api/users.rb | 6 ++++++ spec/finders/users_finder_spec.rb | 4 +++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/finders/users_finder.rb b/app/finders/users_finder.rb index 07deceb827b..ae031162892 100644 --- a/app/finders/users_finder.rb +++ b/app/finders/users_finder.rb @@ -29,6 +29,7 @@ class UsersFinder users = by_active(users) users = by_external_identity(users) users = by_external(users) + users = by_created_at(users) users end @@ -71,4 +72,16 @@ class UsersFinder users.external end + + def by_created_at(users) + if params[:created_after].present? + users = users.where(users.klass.arel_table[:created_at].gteq(params[:created_after])) + end + + if params[:created_before].present? + users = users.where(users.klass.arel_table[:created_at].lteq(params[:created_before])) + end + + users + end end diff --git a/lib/api/users.rb b/lib/api/users.rb index 88bca235692..47a44ba9598 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -48,6 +48,8 @@ module API optional :active, type: Boolean, default: false, desc: 'Filters only active users' optional :external, type: Boolean, default: false, desc: 'Filters only external users' optional :blocked, type: Boolean, default: false, desc: 'Filters only blocked users' + optional :created_after, type: DateTime, desc: 'Return users created after the specified time' + optional :created_before, type: DateTime, desc: 'Return users created before the specified time' all_or_none_of :extern_uid, :provider use :pagination @@ -55,6 +57,10 @@ module API get do authenticated_as_admin! if params[:external].present? || (params[:extern_uid].present? && params[:provider].present?) + unless current_user.admin? + params.except!(:created_after, :created_before) + end + users = UsersFinder.new(current_user, params).execute authorized = can?(current_user, :read_users_list) diff --git a/spec/finders/users_finder_spec.rb b/spec/finders/users_finder_spec.rb index a2e5081b8d3..a5e4a39a695 100644 --- a/spec/finders/users_finder_spec.rb +++ b/spec/finders/users_finder_spec.rb @@ -47,7 +47,9 @@ describe UsersFinder do end it 'filters by created_at' do - users = described_class.new(user, created_after: 2.days.ago, created_before: Time.now + 2.days).execute + users = described_class.new(user, + created_after: 2.days.ago, + created_before: Time.now + 2.days).execute expect(users.count).to eq(4) end -- GitLab