summaryrefslogtreecommitdiff
path: root/spec/services/spam/spam_action_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/spam/spam_action_service_spec.rb')
-rw-r--r--spec/services/spam/spam_action_service_spec.rb54
1 files changed, 51 insertions, 3 deletions
diff --git a/spec/services/spam/spam_action_service_spec.rb b/spec/services/spam/spam_action_service_spec.rb
index e8ac826df1c..9ca52b92267 100644
--- a/spec/services/spam/spam_action_service_spec.rb
+++ b/spec/services/spam/spam_action_service_spec.rb
@@ -9,11 +9,11 @@ RSpec.describe Spam::SpamActionService do
let(:issue) { create(:issue, project: project, author: user) }
let(:fake_ip) { '1.2.3.4' }
let(:fake_user_agent) { 'fake-user-agent' }
- let(:fake_referrer) { 'fake-http-referrer' }
+ let(:fake_referer) { 'fake-http-referer' }
let(:env) do
{ 'action_dispatch.remote_ip' => fake_ip,
'HTTP_USER_AGENT' => fake_user_agent,
- 'HTTP_REFERRER' => fake_referrer }
+ 'HTTP_REFERER' => fake_referer }
end
let_it_be(:project) { create(:project, :public) }
@@ -80,7 +80,7 @@ RSpec.describe Spam::SpamActionService do
{
ip_address: fake_ip,
user_agent: fake_user_agent,
- referrer: fake_referrer
+ referer: fake_referer
}
end
@@ -222,6 +222,38 @@ RSpec.describe Spam::SpamActionService do
end
end
+ context 'spam verdict service advises to block the user' do
+ before do
+ allow(fake_verdict_service).to receive(:execute).and_return(BLOCK_USER)
+ end
+
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
+
+ it_behaves_like 'only checks for spam if a request is provided'
+
+ it 'marks as spam' do
+ response = subject
+
+ expect(response.message).to match(expected_service_check_response_message)
+ expect(issue).to be_spam
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it_behaves_like 'only checks for spam if a request is provided'
+
+ it 'does not mark as spam' do
+ response = subject
+
+ expect(response.message).to match(expected_service_check_response_message)
+ expect(issue).not_to be_spam
+ end
+ end
+ end
+
context 'when spam verdict service conditionally allows' do
before do
allow(fake_verdict_service).to receive(:execute).and_return(CONDITIONAL_ALLOW)
@@ -281,6 +313,22 @@ RSpec.describe Spam::SpamActionService do
end
end
+ context 'when spam verdict service returns noop' do
+ before do
+ allow(fake_verdict_service).to receive(:execute).and_return(NOOP)
+ end
+
+ it 'does not create a spam log' do
+ expect { subject }.not_to change(SpamLog, :count)
+ end
+
+ it 'clears spam flags' do
+ expect(issue).to receive(:clear_spam_flags!)
+
+ subject
+ end
+ end
+
context 'with spam verdict service options' do
before do
allow(fake_verdict_service).to receive(:execute).and_return(ALLOW)