diff --git a/app/controllers/spam_controller.rb b/app/controllers/spam_controller.rb index a5fdd875..0f2d20a6 100644 --- a/app/controllers/spam_controller.rb +++ b/app/controllers/spam_controller.rb @@ -155,4 +155,18 @@ class SpamController < ApplicationController paginate_results(Map.order('updated_at DESC')) end end + + def filter_users + @users = case params[:type] + when 'banned' + paginate_results(User.where(status: 0).order('created_at DESC')) + when 'moderator' + paginate_results(User.where(role: 'moderator').order('created_at DESC')) + when 'admin' + paginate_results(User.where(role: 'admin').order('created_at DESC')) + else + paginate_results(User.where(status: 1).order('created_at DESC')) + end + puts @users.inspect + end end diff --git a/config/routes.rb b/config/routes.rb index e7e54f2f..3b09b28b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -136,7 +136,7 @@ Mapknitter::Application.routes.draw do delete action + '/:ids', action: action, as: action end - %w(filter_maps).each do |action| + %w(filter_maps filter_users).each do |action| get action + '/:type', action: action, as: action end end diff --git a/test/controllers/spam_controller_test.rb b/test/controllers/spam_controller_test.rb index 2c82b801..324bc180 100644 --- a/test/controllers/spam_controller_test.rb +++ b/test/controllers/spam_controller_test.rb @@ -537,4 +537,50 @@ class SpamControllerTest < ActionController::TestCase assert_equal 5, Map.count assert_equal 1, @maps.length end + + test 'should filter users and show only active users' do + @user.ban + + assert_equal User::Status::BANNED, @user.status + assert_equal 'quentin', @user.login + + session[:user_id] = 2 + post(:filter_users, params: { type: 'active' }) + @users = assigns(:users) + + assert_equal 4, User.count + assert_equal 3, @users.length + assert @users.all? { |user| user.status == User::Status::NORMAL } + assert @users.collect(&:login).exclude?('quentin') + end + + test 'should filter users and show only banned users' do + @user.ban + + session[:user_id] = 2 + post(:filter_users, params: { type: 'banned' }) + @users = assigns(:users) + + assert_equal 4, User.count + assert_equal 1, @users.length + assert @users.all? { |user| user.status == User::Status::BANNED && user.login == 'quentin'} + end + + test 'should filter users and show only moderators' do + session[:user_id] = 2 + post(:filter_users, params: { type: 'moderator', limit: 5 }) + @users = assigns(:users) + + assert_equal 4, User.count + assert_equal 0, @users.length + end + + test 'should filter users and show only admins' do + session[:user_id] = 2 + post(:filter_users, params: { type: 'admin', limit: 5 }) + @users = assigns(:users) + + assert_equal 4, User.count + assert_equal 1, @users.length + end end diff --git a/test/integration/routes_test.rb b/test/integration/routes_test.rb index 9a997052..cf65701f 100644 --- a/test/integration/routes_test.rb +++ b/test/integration/routes_test.rb @@ -39,6 +39,10 @@ class RoutesTest < ActionDispatch::IntegrationTest end test "test filter-maps route" do - assert_routing({ path: '/moderate/filter_maps/created', method: :get }, { controller: 'spam', action: 'filter_maps', type: 'created' }) + assert_routing({ path: '/moderate/filter_maps/updated', method: :get }, { controller: 'spam', action: 'filter_maps', type: 'updated' }) + end + + test "test filter-users route" do + assert_routing({ path: '/moderate/filter_users/active', method: :get }, { controller: 'spam', action: 'filter_users', type: 'active' }) end end