debian-mirror-gitlab/spec/support/shared_examples/models/concerns/issuable_shared_examples.rb
2020-03-13 15:44:24 +05:30

66 lines
2.1 KiB
Ruby

# frozen_string_literal: true
RSpec.shared_examples 'matches_cross_reference_regex? fails fast' do
it 'fails fast for long strings' do
# took well under 1 second in CI https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/3267#note_172823
expect do
Timeout.timeout(6.seconds) { mentionable.matches_cross_reference_regex? }
end.not_to raise_error
end
end
RSpec.shared_examples 'validates description length with custom validation' do
let(:issuable) { build(:issue, description: 'x' * (::Issuable::DESCRIPTION_LENGTH_MAX + 1)) }
let(:context) { :update }
subject { issuable.validate(context) }
context 'when Issuable is a new record' do
it 'validates the maximum description length' do
subject
expect(issuable.errors[:description]).to eq(["is too long (maximum is #{::Issuable::DESCRIPTION_LENGTH_MAX} characters)"])
end
context 'on create' do
let(:context) { :create }
it 'does not validate the maximum description length' do
allow(issuable).to receive(:description_max_length_for_new_records_is_valid).and_call_original
subject
expect(issuable).not_to have_received(:description_max_length_for_new_records_is_valid)
end
end
end
context 'when Issuable is an existing record' do
before do
allow(issuable).to receive(:expire_etag_cache) # to skip the expire_etag_cache callback
issuable.save!(validate: false)
end
it 'does not validate the maximum description length' do
subject
expect(issuable.errors).not_to have_key(:description)
end
end
end
RSpec.shared_examples 'truncates the description to its allowed maximum length on import' do
before do
allow(issuable).to receive(:importing?).and_return(true)
end
let(:issuable) { build(:issue, description: 'x' * (::Issuable::DESCRIPTION_LENGTH_MAX + 1)) }
subject { issuable.validate(:create) }
it 'truncates the description to its allowed maximum length' do
subject
expect(issuable.description).to eq('x' * ::Issuable::DESCRIPTION_LENGTH_MAX)
expect(issuable.errors[:description]).to be_empty
end
end