diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-30 18:09:15 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-30 18:09:15 +0300 |
commit | 536aa3a1f4b96abc4ca34489bf2cbe503afcded7 (patch) | |
tree | 88d08f7dfa29a32d6526773c4fe0fefd9f2bc7d1 /spec/services/spam | |
parent | 50ae4065530c4eafbeb7c5ff2c462c48c02947ca (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/spam')
-rw-r--r-- | spec/services/spam/akismet_service_spec.rb | 136 | ||||
-rw-r--r-- | spec/services/spam/spam_check_service_spec.rb | 6 |
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 |