gitlab-org--gitlab-foss/spec/controllers/concerns/spammable_actions/akismet_mark_as_spam_action...

80 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe SpammableActions::AkismetMarkAsSpamAction do
include AfterNextHelpers
controller(ActionController::Base) do
include SpammableActions::AkismetMarkAsSpamAction
end
let(:spammable_type) { 'SpammableType' }
let(:spammable) { double(:spammable, spammable_entity_type: double(:spammable_entity_type, titlecase: spammable_type)) }
let(:current_user) { create(:admin) }
before do
allow(Gitlab::Recaptcha).to receive(:load_configurations!) { true }
routes.draw { get 'mark_as_spam' => 'anonymous#mark_as_spam' }
allow(controller).to receive(:current_user) { double(:current_user, admin?: admin) }
allow(controller).to receive(:current_user).and_return(current_user)
end
describe '#mark_as_spam' do
subject { post :mark_as_spam }
before do
allow(controller).to receive(:spammable) { spammable }
allow(controller).to receive(:spammable_path) { '/fake_spammable_path' }
expect_next(Spam::AkismetMarkAsSpamService, target: spammable)
.to receive(:execute).and_return(execute_result)
end
context 'when user is admin', :enable_admin_mode do
let(:admin) { true }
context 'when service returns truthy' do
let(:execute_result) { true }
it 'redirects with notice' do
expect(subject).to redirect_to('/fake_spammable_path')
expect(subject.request.flash[:notice]).to match(/#{spammable_type}.*submitted.*successfully/)
end
end
context 'when service returns falsey' do
let(:execute_result) { false }
it 'redirects with notice' do
expect(subject).to redirect_to('/fake_spammable_path')
expect(subject.request.flash[:alert]).to match(/Error/)
end
end
end
context 'when user is not admin' do
let(:admin) { false }
let(:execute_result) { true }
it 'calls #access_denied!' do
expect(controller).to receive(:access_denied!) { false }
subject
end
end
end
describe '#spammable' do
it 'raises when unimplemented' do
expect { controller.send(:spammable) }.to raise_error(NotImplementedError)
end
end
describe '#spammable_path' do
it 'raises when unimplemented' do
expect { controller.send(:spammable_path) }.to raise_error(NotImplementedError)
end
end
end