diff --git a/app/logical/upload_limit.rb b/app/logical/upload_limit.rb index ecc4a4ac9..2bdce1f47 100644 --- a/app/logical/upload_limit.rb +++ b/app/logical/upload_limit.rb @@ -43,6 +43,7 @@ class UploadLimit user.with_lock do if incremental user.upload_points += UploadLimit.upload_value(user.upload_points, post.is_deleted) + user.upload_points = user.upload_points.clamp(0, MAXIMUM_POINTS) user.save! else user.update!(upload_points: UploadLimit.points_for_user(user)) diff --git a/test/unit/upload_limit_test.rb b/test/unit/upload_limit_test.rb index 0f4673552..2df738ab7 100644 --- a/test/unit/upload_limit_test.rb +++ b/test/unit/upload_limit_test.rb @@ -25,6 +25,16 @@ class UploadLimitTest < ActiveSupport::TestCase @post.approve!(@approver) assert_equal(1010, @user.reload.upload_points) end + + should "not increase the uploader's upload points beyond the maximum" do + @user.update!(upload_points: UploadLimit::MAXIMUM_POINTS) + + @post = create(:post, uploader: @user, is_pending: true, created_at: 7.days.ago) + assert_equal(UploadLimit::MAXIMUM_POINTS, @user.reload.upload_points) + + @post.approve!(@approver) + assert_equal(UploadLimit::MAXIMUM_POINTS, @user.reload.upload_points) + end end context "an approved post that is deleted" do