From 14dd0430cb14642c5337a4c155c91b2c3ce2fa6b Mon Sep 17 00:00:00 2001 From: r888888888 Date: Wed, 5 Mar 2014 17:33:57 -0800 Subject: [PATCH] fixes #1257 --- app/controllers/admin/users_controller.rb | 5 +---- app/models/user.rb | 19 +++++++++++++++++-- test/unit/user_test.rb | 20 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 64a317543..b19f11142 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -10,10 +10,7 @@ module Admin def update @user = User.find(params[:id]) sanitize_params! - @user.level = params[:user][:level] - @user.inviter_id = CurrentUser.id - TransactionLogItem.record_account_upgrade(@user) - @user.save + @user.promote_to!(params[:user][:level]) redirect_to edit_admin_user_path(@user), :notice => "User updated" end diff --git a/app/models/user.rb b/app/models/user.rb index b37409996..1957b04a0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -242,8 +242,23 @@ class User < ActiveRecord::Base end end - def promote_to(level) - update_attributes({:level => level}, :as => :admin) + def promote_to!(new_level) + self.level = new_level + self.inviter_id = CurrentUser.user.id + TransactionLogItem.record_account_upgrade(self) + if level > level_was + body_prefix = "Promoted" + elsif level < level_was + body_prefix = "Demoted" + else + body_prefix = "" + end + + feedback.create( + :category => "neutral", + :body => "#{body_prefix} by #{inviter.name} from #{level_string(level_was)} to #{level_string(level)}" + ) + save end def promote_to_admin_if_first_user diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 26255e5fb..dddb9741b 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -13,6 +13,26 @@ class UserTest < ActiveSupport::TestCase CurrentUser.user = nil CurrentUser.ip_addr = nil end + + context "promoting a user" do + setup do + CurrentUser.user = FactoryGirl.create(:moderator_user) + end + + should "create a transaction log item" do + assert_difference("TransactionLogItem.count") do + @user.promote_to!(User::Levels::GOLD) + end + end + + should "create a neutral feedback" do + assert_difference("UserFeedback.count") do + @user.promote_to!(User::Levels::GOLD) + end + + assert_equal("Promoted by #{CurrentUser.user.name} from Member to Gold", @user.feedback.last.body) + end + end context "favoriting a post" do setup do