diff --git a/app/services/spam/spam_verdict_service.rb b/app/services/spam/spam_verdict_service.rb index 2d4bebc8b2bb6065253ca1cbc35b26ad7fc49449..f69ee255e01ae2195a6006773da2c1ec7facab36 100644 --- a/app/services/spam/spam_verdict_service.rb +++ b/app/services/spam/spam_verdict_service.rb @@ -70,7 +70,8 @@ def get_spamcheck_verdict result = spamcheck_client.spam?(spammable: target, user: user, context: context, extra_features: extra_features) if result.evaluated? - Abuse::TrustScore.create!(user: user, score: result.score, source: :spamcheck) + correlation_id = Labkit::Correlation::CorrelationId.current_id || '' + Abuse::TrustScoreWorker.perform_async(user.id, :spamcheck, result.score, correlation_id) end result.verdict diff --git a/spec/services/spam/spam_verdict_service_spec.rb b/spec/services/spam/spam_verdict_service_spec.rb index 361742699b0cbe25d6f4df4c4e13b25dabdf3edb..8669bca90bd8b462686fcbb752b4ead67f461344 100644 --- a/spec/services/spam/spam_verdict_service_spec.rb +++ b/spec/services/spam/spam_verdict_service_spec.rb @@ -263,11 +263,10 @@ end context 'if the endpoint is accessible' do - let(:user_scores) { Abuse::UserTrustScore.new(user) } - before do allow(service).to receive(:spamcheck_client).and_return(spam_client) allow(spam_client).to receive(:spam?).and_return(spam_client_result) + allow(Labkit::Correlation::CorrelationId).to receive(:current_id).and_return('cid') end context 'if the result is a NOOP verdict' do @@ -275,8 +274,8 @@ let(:verdict_value) { ::Spamcheck::SpamVerdict::Verdict::NOOP } it 'returns the verdict' do + expect(Abuse::TrustScoreWorker).not_to receive(:perform_async) is_expected.to eq(NOOP) - expect(user_scores.spam_score).to eq(0.0) end end @@ -286,8 +285,8 @@ context 'the result was evaluated' do it 'returns the verdict and updates the spam score' do + expect(Abuse::TrustScoreWorker).to receive(:perform_async).once.with(user.id, :spamcheck, instance_of(Float), 'cid') is_expected.to eq(ALLOW) - expect(user_scores.spam_score).to be_within(0.000001).of(verdict_score) end end @@ -295,8 +294,8 @@ let(:verdict_evaluated) { false } it 'returns the verdict and does not update the spam score' do + expect(Abuse::TrustScoreWorker).not_to receive(:perform_async) expect(subject).to eq(ALLOW) - expect(user_scores.spam_score).to eq(0.0) end end end @@ -317,8 +316,8 @@ with_them do it "returns expected spam constant and updates the spam score" do + expect(Abuse::TrustScoreWorker).to receive(:perform_async).once.with(user.id, :spamcheck, instance_of(Float), 'cid') is_expected.to eq(expected) - expect(user_scores.spam_score).to be_within(0.000001).of(verdict_score) end end end