Skip to content

Commit

Permalink
record users that suspend other others, fixes #1869
Browse files Browse the repository at this point in the history
  • Loading branch information
pleary committed Aug 3, 2018
1 parent 8931b44 commit 2881266
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 5 deletions.
7 changes: 4 additions & 3 deletions app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@ def activate
# Don't take these out yet, useful for admin user management down the road

def suspend
@user.suspend!
flash[:notice] = t(:the_user_x_has_been_suspended, :user => @user.login)
redirect_back_or_default(@user)
@user.suspended_by_user = current_user
@user.suspend!
flash[:notice] = t(:the_user_x_has_been_suspended, :user => @user.login)
redirect_back_or_default(@user)
end

def unsuspend
Expand Down
9 changes: 8 additions & 1 deletion app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ class User < ActiveRecord::Base
# Roles
has_and_belongs_to_many :roles, -> { uniq }
belongs_to :curator_sponsor, class_name: "User"
belongs_to :suspended_by_user, class_name: "User"

has_subscribers
has_many :subscriptions, :dependent => :delete_all
Expand All @@ -202,6 +203,7 @@ class User < ActiveRecord::Base
before_save :set_time_zone
before_save :whitelist_licenses
before_save :get_lat_lon_from_ip_if_last_ip_changed
before_save :check_suspended_by_user
before_create :set_locale
after_save :update_observation_licenses
after_save :update_photo_licenses
Expand Down Expand Up @@ -557,7 +559,12 @@ def get_lat_lon_from_ip_if_last_ip_changed
get_lat_lon_from_ip
end
end


def check_suspended_by_user
return if suspended?
self.suspended_by_user_id = nil
end

def published_name
name.blank? ? login : name
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddSuspendedByUserIdToUsers < ActiveRecord::Migration
def change
add_column :users, :suspended_by_user_id, :integer
end
end
5 changes: 4 additions & 1 deletion db/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4546,7 +4546,8 @@ CREATE TABLE users (
icon_file_size integer,
icon_updated_at timestamp without time zone,
search_place_id integer,
curator_sponsor_id integer
curator_sponsor_id integer,
suspended_by_user_id integer
);


Expand Down Expand Up @@ -9326,3 +9327,5 @@ INSERT INTO schema_migrations (version) VALUES ('20180613193352');

INSERT INTO schema_migrations (version) VALUES ('20180719001655');

INSERT INTO schema_migrations (version) VALUES ('20180803162216');

40 changes: 40 additions & 0 deletions spec/controllers/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -242,3 +242,43 @@
expect( curator_user.curator_sponsor ).to be_blank
end
end

describe UsersController, "suspend" do
let(:user) { User.make! }
let(:curator_user) { make_curator }
it "suspends the user" do
expect( user.suspended_at ).to be_nil
sign_in curator_user
get :suspend, id: user.id
user.reload
expect( user.suspended_at ).not_to be_nil
end

it "sets the suspending user" do
expect( user.suspended_at ).to be_nil
sign_in curator_user
get :suspend, id: user.id
user.reload
expect( user.suspended_by_user ).to eq curator_user
end
end

describe UsersController, "unsuspend" do
let(:user) { User.make!( suspended_at: Time.now ) }
let(:curator_user) { make_curator }
it "unsuspends the user" do
expect( user.suspended_at ).not_to be_nil
sign_in curator_user
get :unsuspend, id: user.id
user.reload
expect( user.suspended_at ).to be_nil
end

it "unsets the suspending user" do
expect( user.suspended_at ).not_to be_nil
sign_in curator_user
get :unsuspend, id: user.id
user.reload
expect( user.suspended_by_user ).to be_nil
end
end

0 comments on commit 2881266

Please sign in to comment.