Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-30 18:09:15 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-30 18:09:15 +0300
commit536aa3a1f4b96abc4ca34489bf2cbe503afcded7 (patch)
tree88d08f7dfa29a32d6526773c4fe0fefd9f2bc7d1 /spec/services/spam
parent50ae4065530c4eafbeb7c5ff2c462c48c02947ca (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/spam')
-rw-r--r--spec/services/spam/akismet_service_spec.rb136
-rw-r--r--spec/services/spam/spam_check_service_spec.rb6
2 files changed, 139 insertions, 3 deletions
diff --git a/spec/services/spam/akismet_service_spec.rb b/spec/services/spam/akismet_service_spec.rb
new file mode 100644
index 00000000000..a496cd1890e
--- /dev/null
+++ b/spec/services/spam/akismet_service_spec.rb
@@ -0,0 +1,136 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Spam::AkismetService do
+ let(:fake_akismet_client) { double(:akismet_client) }
+
+ let_it_be(:text) { "Would you like to buy some tinned meat product?" }
+ let_it_be(:spam_owner) { create(:user) }
+
+ subject do
+ options = { ip_address: '1.2.3.4', user_agent: 'some user_agent', referrer: 'some referrer' }
+ described_class.new(spam_owner.name, spam_owner.email, text, options)
+ end
+
+ before do
+ stub_application_setting(akismet_enabled: true)
+ allow(subject).to receive(:akismet_client).and_return(fake_akismet_client)
+ end
+
+ shared_examples 'no activity if Akismet is not enabled' do |method_call|
+ before do
+ stub_application_setting(akismet_enabled: false)
+ end
+
+ it 'is automatically false' do
+ expect(subject.send(method_call)).to be_falsey
+ end
+
+ it 'performs no check' do
+ expect(fake_akismet_client).not_to receive(:public_send)
+
+ subject.send(method_call)
+ end
+ end
+
+ shared_examples 'false if Akismet is not available' do |method_call|
+ context 'if Akismet is not available' do
+ before do
+ allow(fake_akismet_client).to receive(:public_send).and_raise(StandardError.new("oh noes!"))
+ end
+
+ specify do
+ expect(subject.send(method_call)).to be_falsey
+ end
+
+ it 'logs an error' do
+ logger_spy = double(:logger)
+ expect(Rails).to receive(:logger).and_return(logger_spy)
+ expect(logger_spy).to receive(:error).with(/skipping/)
+
+ subject.send(method_call)
+ end
+ end
+ end
+
+ describe '#spam?' do
+ it_behaves_like 'no activity if Akismet is not enabled', :spam?, :check
+
+ context 'if Akismet is enabled' do
+ context 'the text is spam' do
+ before do
+ allow(fake_akismet_client).to receive(:check).and_return([true, false])
+ end
+
+ specify do
+ expect(subject.spam?).to be_truthy
+ end
+ end
+
+ context 'the text is blatant spam' do
+ before do
+ allow(fake_akismet_client).to receive(:check).and_return([false, true])
+ end
+
+ specify do
+ expect(subject.spam?).to be_truthy
+ end
+ end
+
+ context 'the text is not spam' do
+ before do
+ allow(fake_akismet_client).to receive(:check).and_return([false, false])
+ end
+
+ specify do
+ expect(subject.spam?).to be_falsey
+ end
+ end
+
+ context 'if Akismet is not available' do
+ before do
+ allow(fake_akismet_client).to receive(:check).and_raise(StandardError.new("oh noes!"))
+ end
+
+ specify do
+ expect(subject.spam?).to be_falsey
+ end
+
+ it 'logs an error' do
+ logger_spy = double(:logger)
+ expect(Rails).to receive(:logger).and_return(logger_spy)
+ expect(logger_spy).to receive(:error).with(/skipping check/)
+
+ subject.spam?
+ end
+ end
+ end
+ end
+
+ describe '#submit_ham' do
+ it_behaves_like 'no activity if Akismet is not enabled', :submit_ham
+ it_behaves_like 'false if Akismet is not available', :submit_ham
+
+ context 'if Akismet is available' do
+ specify do
+ expect(fake_akismet_client).to receive(:public_send).with(:ham, any_args)
+
+ expect(subject.submit_ham).to be_truthy
+ end
+ end
+ end
+
+ describe '#submit_spam' do
+ it_behaves_like 'no activity if Akismet is not enabled', :submit_spam
+ it_behaves_like 'false if Akismet is not available', :submit_spam
+
+ context 'if Akismet is available' do
+ specify do
+ expect(fake_akismet_client).to receive(:public_send).with(:spam, any_args)
+
+ expect(subject.submit_spam).to be_truthy
+ end
+ end
+ end
+end
diff --git a/spec/services/spam/spam_check_service_spec.rb b/spec/services/spam/spam_check_service_spec.rb
index 5e06d14b8bc..732b64b52a0 100644
--- a/spec/services/spam/spam_check_service_spec.rb
+++ b/spec/services/spam/spam_check_service_spec.rb
@@ -85,7 +85,7 @@ describe Spam::SpamCheckService do
before do
issue.closed_at = Time.zone.now
- allow(AkismetService).to receive(:new).and_return(double(spam?: true))
+ allow(Spam::AkismetService).to receive(:new).and_return(double(spam?: true))
end
it 'returns false' do
@@ -105,7 +105,7 @@ describe Spam::SpamCheckService do
context 'when indicated as spam by akismet' do
before do
- allow(AkismetService).to receive(:new).and_return(double(spam?: true))
+ allow(Spam::AkismetService).to receive(:new).and_return(double(spam?: true))
end
context 'when allow_possible_spam feature flag is false' do
@@ -135,7 +135,7 @@ describe Spam::SpamCheckService do
context 'when not indicated as spam by akismet' do
before do
- allow(AkismetService).to receive(:new).and_return(double(spam?: false))
+ allow(Spam::AkismetService).to receive(:new).and_return(double(spam?: false))
end
it 'returns false' do