Use shoulda matchers validation presence matchers

This commit is contained in:
Matt Jankowski 2024-03-20 11:31:11 -04:00
parent 07a5d58551
commit 25ea484c83
17 changed files with 31 additions and 173 deletions

View File

@ -714,11 +714,7 @@ RSpec.describe Account do
end end
describe 'validations' do describe 'validations' do
it 'is invalid without a username' do it { is_expected.to validate_presence_of(:username) }
account = Fabricate.build(:account, username: nil)
account.valid?
expect(account).to model_have_error_on_field(:username)
end
it 'squishes the username before validation' do it 'squishes the username before validation' do
account = Fabricate(:account, domain: nil, username: " \u3000bob \t \u00a0 \n ") account = Fabricate(:account, domain: nil, username: " \u3000bob \t \u00a0 \n ")

View File

@ -64,14 +64,7 @@ describe Announcement do
end end
describe 'Validations' do describe 'Validations' do
describe 'text' do it { is_expected.to validate_presence_of(:text) }
it 'validates presence of attribute' do
record = Fabricate.build(:announcement, text: nil)
expect(record).to_not be_valid
expect(record.errors[:text]).to be_present
end
end
describe 'ends_at' do describe 'ends_at' do
it 'validates presence when starts_at is present' do it 'validates presence when starts_at is present' do

View File

@ -4,17 +4,8 @@ require 'rails_helper'
RSpec.describe Block do RSpec.describe Block do
describe 'validations' do describe 'validations' do
it 'is invalid without an account' do it { is_expected.to belong_to(:account) }
block = Fabricate.build(:block, account: nil) it { is_expected.to belong_to(:target_account) }
block.valid?
expect(block).to model_have_error_on_field(:account)
end
it 'is invalid without a target_account' do
block = Fabricate.build(:block, target_account: nil)
block.valid?
expect(block).to model_have_error_on_field(:target_account)
end
end end
it 'removes blocking cache after creation' do it 'removes blocking cache after creation' do

View File

@ -4,11 +4,6 @@ require 'rails_helper'
describe CustomEmojiCategory do describe CustomEmojiCategory do
describe 'validations' do describe 'validations' do
it 'validates name presence' do it { is_expected.to validate_presence_of(:name) }
record = described_class.new(name: nil)
expect(record).to_not be_valid
expect(record).to model_have_error_on_field(:name)
end
end end
end end

View File

@ -4,19 +4,8 @@ require 'rails_helper'
RSpec.describe CustomFilter do RSpec.describe CustomFilter do
describe 'Validations' do describe 'Validations' do
it 'requires presence of title' do it { is_expected.to validate_presence_of(:title) }
record = described_class.new(title: '') it { is_expected.to validate_presence_of(:context) }
record.valid?
expect(record).to model_have_error_on_field(:title)
end
it 'requires presence of context' do
record = described_class.new(context: nil)
record.valid?
expect(record).to model_have_error_on_field(:context)
end
it 'requires non-empty of context' do it 'requires non-empty of context' do
record = described_class.new(context: []) record = described_class.new(context: [])

View File

@ -4,11 +4,7 @@ require 'rails_helper'
describe DomainAllow do describe DomainAllow do
describe 'Validations' do describe 'Validations' do
it 'is invalid without a domain' do it { is_expected.to validate_presence_of(:domain) }
domain_allow = Fabricate.build(:domain_allow, domain: nil)
domain_allow.valid?
expect(domain_allow).to model_have_error_on_field(:domain)
end
it 'is invalid if the same normalized domain already exists' do it 'is invalid if the same normalized domain already exists' do
_domain_allow = Fabricate(:domain_allow, domain: 'にゃん') _domain_allow = Fabricate(:domain_allow, domain: 'にゃん')

View File

@ -4,11 +4,7 @@ require 'rails_helper'
RSpec.describe DomainBlock do RSpec.describe DomainBlock do
describe 'validations' do describe 'validations' do
it 'is invalid without a domain' do it { is_expected.to validate_presence_of(:domain) }
domain_block = Fabricate.build(:domain_block, domain: nil)
domain_block.valid?
expect(domain_block).to model_have_error_on_field(:domain)
end
it 'is invalid if the same normalized domain already exists' do it 'is invalid if the same normalized domain already exists' do
_domain_block = Fabricate(:domain_block, domain: 'にゃん') _domain_block = Fabricate(:domain_block, domain: 'にゃん')

View File

@ -9,17 +9,8 @@ RSpec.describe Follow do
describe 'validations' do describe 'validations' do
subject { described_class.new(account: alice, target_account: bob, rate_limit: true) } subject { described_class.new(account: alice, target_account: bob, rate_limit: true) }
it 'is invalid without an account' do it { is_expected.to belong_to(:account) }
follow = Fabricate.build(:follow, account: nil) it { is_expected.to belong_to(:target_account) }
follow.valid?
expect(follow).to model_have_error_on_field(:account)
end
it 'is invalid without a target_account' do
follow = Fabricate.build(:follow, target_account: nil)
follow.valid?
expect(follow).to model_have_error_on_field(:target_account)
end
it 'is invalid if account already follows too many people' do it 'is invalid if account already follows too many people' do
alice.update(following_count: FollowLimitValidator::LIMIT) alice.update(following_count: FollowLimitValidator::LIMIT)

View File

@ -3,24 +3,8 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Import do RSpec.describe Import do
let(:account) { Fabricate(:account) } describe 'Validations' do
let(:type) { 'following' } it { is_expected.to validate_presence_of(:type) }
let(:data) { attachment_fixture('imports.txt') } it { is_expected.to validate_presence_of(:data) }
describe 'validations' do
it 'has a valid parameters' do
import = described_class.create(account: account, type: type, data: data)
expect(import).to be_valid
end
it 'is invalid without an type' do
import = described_class.create(account: account, data: data)
expect(import).to model_have_error_on_field(:type)
end
it 'is invalid without a data' do
import = described_class.create(account: account, type: type)
expect(import).to model_have_error_on_field(:data)
end
end end
end end

View File

@ -4,19 +4,8 @@ require 'rails_helper'
describe IpBlock do describe IpBlock do
describe 'validations' do describe 'validations' do
it 'validates ip presence', :aggregate_failures do it { is_expected.to validate_presence_of(:ip) }
ip_block = described_class.new(ip: nil, severity: :no_access) it { is_expected.to validate_presence_of(:severity) }
expect(ip_block).to_not be_valid
expect(ip_block).to model_have_error_on_field(:ip)
end
it 'validates severity presence', :aggregate_failures do
ip_block = described_class.new(ip: '127.0.0.1', severity: nil)
expect(ip_block).to_not be_valid
expect(ip_block).to model_have_error_on_field(:severity)
end
it 'validates ip uniqueness', :aggregate_failures do it 'validates ip uniqueness', :aggregate_failures do
described_class.create!(ip: '127.0.0.1', severity: :no_access) described_class.create!(ip: '127.0.0.1', severity: :no_access)

View File

@ -3,14 +3,7 @@
require 'rails_helper' require 'rails_helper'
describe Marker do describe Marker do
describe 'validations' do describe 'Validations' do
describe 'timeline' do it { is_expected.to validate_inclusion_of(:timeline).in_array(described_class::TIMELINES) }
it 'must be included in valid list' do
record = described_class.new(timeline: 'not real timeline')
expect(record).to_not be_valid
expect(record).to model_have_error_on_field(:timeline)
end
end
end end
end end

View File

@ -228,12 +228,7 @@ RSpec.describe MediaAttachment, :paperclip_processing do
end end
end end
it 'is invalid without file' do it { is_expected.to validate_presence_of(:file) }
media = described_class.new
expect(media.valid?).to be false
expect(media).to model_have_error_on_field(:file)
end
describe 'size limit validation' do describe 'size limit validation' do
it 'rejects video files that are too large' do it 'rejects video files that are too large' do

View File

@ -4,16 +4,7 @@ require 'rails_helper'
RSpec.describe Mention do RSpec.describe Mention do
describe 'validations' do describe 'validations' do
it 'is invalid without an account' do it { is_expected.to belong_to(:account) }
mention = Fabricate.build(:mention, account: nil) it { is_expected.to belong_to(:status) }
mention.valid?
expect(mention).to model_have_error_on_field(:account)
end
it 'is invalid without a status' do
mention = Fabricate.build(:mention, status: nil)
mention.valid?
expect(mention).to model_have_error_on_field(:status)
end
end end
end end

View File

@ -31,21 +31,16 @@ describe Poll do
end end
describe 'validations' do describe 'validations' do
context 'when valid' do subject { Fabricate.build(:poll) }
let(:poll) { Fabricate.build(:poll) }
context 'when valid' do
it 'is valid with valid attributes' do it 'is valid with valid attributes' do
expect(poll).to be_valid expect(subject).to be_valid
end end
end end
context 'when not valid' do context 'when not valid' do
let(:poll) { Fabricate.build(:poll, expires_at: nil) } it { is_expected.to validate_presence_of(:expires_at) }
it 'is invalid without an expire date' do
poll.valid?
expect(poll).to model_have_error_on_field(:expires_at)
end
end end
end end
end end

View File

@ -21,11 +21,7 @@ RSpec.describe User do
end end
describe 'validations' do describe 'validations' do
it 'is invalid without an account' do it { is_expected.to belong_to(:account) }
user = Fabricate.build(:user, account: nil)
user.valid?
expect(user).to model_have_error_on_field(:account)
end
it 'is invalid without a valid email' do it 'is invalid without a valid email' do
user = Fabricate.build(:user, email: 'john@') user = Fabricate.build(:user, email: 'john@')

View File

@ -4,37 +4,10 @@ require 'rails_helper'
RSpec.describe WebauthnCredential do RSpec.describe WebauthnCredential do
describe 'validations' do describe 'validations' do
it 'is invalid without an external id' do it { is_expected.to validate_presence_of(:external_id) }
webauthn_credential = Fabricate.build(:webauthn_credential, external_id: nil) it { is_expected.to validate_presence_of(:public_key) }
it { is_expected.to validate_presence_of(:nickname) }
webauthn_credential.valid? it { is_expected.to validate_presence_of(:sign_count) }
expect(webauthn_credential).to model_have_error_on_field(:external_id)
end
it 'is invalid without a public key' do
webauthn_credential = Fabricate.build(:webauthn_credential, public_key: nil)
webauthn_credential.valid?
expect(webauthn_credential).to model_have_error_on_field(:public_key)
end
it 'is invalid without a nickname' do
webauthn_credential = Fabricate.build(:webauthn_credential, nickname: nil)
webauthn_credential.valid?
expect(webauthn_credential).to model_have_error_on_field(:nickname)
end
it 'is invalid without a sign_count' do
webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: nil)
webauthn_credential.valid?
expect(webauthn_credential).to model_have_error_on_field(:sign_count)
end
it 'is invalid if already exist a webauthn credential with the same external id' do it 'is invalid if already exist a webauthn credential with the same external id' do
Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw') Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw')

View File

@ -6,12 +6,7 @@ RSpec.describe Webhook do
let(:webhook) { Fabricate(:webhook) } let(:webhook) { Fabricate(:webhook) }
describe 'Validations' do describe 'Validations' do
it 'requires presence of events' do it { is_expected.to validate_presence_of(:events) }
record = described_class.new(events: nil)
record.valid?
expect(record).to model_have_error_on_field(:events)
end
it 'requires non-empty events value' do it 'requires non-empty events value' do
record = described_class.new(events: []) record = described_class.new(events: [])