80 lines
2.3 KiB
Ruby
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
|