From: Andy Allan Date: Sun, 16 Feb 2025 14:48:26 +0000 (+0000) Subject: Merge pull request #5690 from tomhughes/ruby34 X-Git-Tag: live~277 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/4485cae913bbb7c138aa435bf0ecfd8d8f6f5095?hp=fff01b5d6f69f6eed1efb8eb3107577623b87bfe Merge pull request #5690 from tomhughes/ruby34 Add ruby 3.4 to test matrix --- diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 085d1bfea..d02943640 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -31,7 +31,7 @@ class AccountsController < ApplicationController (params[:user][:auth_provider] == current_user.auth_provider && params[:user][:auth_uid] == current_user.auth_uid) update_user(current_user, user_params) - if current_user.errors.count.zero? + if current_user.errors.empty? redirect_to edit_account_path else render :edit diff --git a/app/controllers/concerns/user_methods.rb b/app/controllers/concerns/user_methods.rb index d79ed48d2..447aea3fc 100644 --- a/app/controllers/concerns/user_methods.rb +++ b/app/controllers/concerns/user_methods.rb @@ -59,8 +59,9 @@ module UserMethods # Ignore errors sending email end else - current_user.errors.add(:new_email, current_user.errors[:email]) - current_user.errors.add(:email, []) + current_user.errors.delete(:email).each do |error| + current_user.errors.add(:new_email, error) + end end user.restore_email! diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 5c70d9704..e2ec400a5 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -29,6 +29,8 @@ class ReportsController < ApplicationController @report.issue.reopen unless @report.issue.open? @report.issue.save! + @report.issue.reported_user&.spam_check + redirect_to helpers.reportable_url(@report.issue.reportable), :notice => t(".successful_report") else flash.now[:notice] = t(".provide_details") diff --git a/app/models/user.rb b/app/models/user.rb index 21fe2181b..8d061e26b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -359,7 +359,7 @@ class User < ApplicationRecord trace_score = traces.size * 50 diary_entry_score = diary_entries.visible.inject(0) { |acc, elem| acc + elem.body.spam_score } diary_comment_score = diary_comments.visible.inject(0) { |acc, elem| acc + elem.body.spam_score } - report_score = Report.where(:category => "spam", :issue => issues.with_status("open")).count * 20 + report_score = Report.where(:category => "spam", :issue => issues.with_status("open")).distinct.count(:user_id) * 20 score = description.spam_score / 4.0 score += diary_entries.visible.where("created_at > ?", 1.day.ago).count * 10 diff --git a/test/controllers/reports_controller_test.rb b/test/controllers/reports_controller_test.rb index 25b80e8f4..a7f65de62 100644 --- a/test/controllers/reports_controller_test.rb +++ b/test/controllers/reports_controller_test.rb @@ -111,4 +111,42 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest assert_equal 2, issue.reports.count end + + def test_spam_reports_can_suspend + target_user = create(:user) + + session_for(create(:user)) + + post reports_path(:report => { + :details => "Spammer", + :category => "spam", + :issue => { :reportable_id => target_user.id, :reportable_type => "User" } + }) + assert_equal "active", target_user.reload.status + + session_for(create(:user)) + + post reports_path(:report => { + :details => "Spammer", + :category => "spam", + :issue => { :reportable_id => target_user.id, :reportable_type => "User" } + }) + assert_equal "active", target_user.reload.status + + post reports_path(:report => { + :details => "Spammer", + :category => "spam", + :issue => { :reportable_id => target_user.id, :reportable_type => "User" } + }) + assert_equal "active", target_user.reload.status + + session_for(create(:user)) + + post reports_path(:report => { + :details => "Spammer", + :category => "spam", + :issue => { :reportable_id => target_user.id, :reportable_type => "User" } + }) + assert_equal "suspended", target_user.reload.status + end end