clarion/spec/models/speaker_profile_spec.rb
2014-08-07 15:19:28 +03:00

97 lines
3.1 KiB
Ruby

require 'rails_helper'
RSpec.describe SpeakerProfile, :type => :model do
it 'is invalid without a first name' do
expect(build(:speaker_profile, first_name: nil)).to have_error_on :first_name
end
it 'is invalid without a last name' do
expect(build(:speaker_profile, last_name: nil)).to have_error_on :last_name
end
it 'is invalid without a photo' do
expect(build(:speaker_profile, photo_url: nil)).to have_error_on :photo_url
end
describe 'mobile_phone' do
it 'must be present' do
expect(build(:speaker_profile, mobile_phone: nil)).to have_error_on :mobile_phone
end
it 'must be a valid phone number' do
expect(build(:speaker_profile, mobile_phone: 'abc')).to have_error_on :mobile_phone
end
it 'is stored in a normalized form' do
speaker_profile = create :speaker_profile, mobile_phone: '0883444555'
expect(speaker_profile.mobile_phone).to eq '359883444555'
speaker_profile.mobile_phone = '+1883444555'
speaker_profile.save
expect(speaker_profile.mobile_phone).to eq '1883444555'
end
end
describe 'public email' do
it 'can be absent' do
expect(build(:speaker_profile, public_email: '')).to_not have_error_on :public_email
end
it 'can contain exatly one @ when present' do
expect(build(:speaker_profile, public_email: 'test@@example.com')).to have_error_on :public_email
expect(build(:speaker_profile, public_email: 'test@example.com')).to_not have_error_on :public_email
expect(build(:speaker_profile, public_email: 'testexample.com')).to have_error_on :public_email
end
end
describe 'twitter handle' do
it 'can be absent' do
expect(build(:speaker_profile, twitter: '')).to_not have_error_on :twitter
end
context 'when present' do
it 'is stored without a starting @' do
expect(create(:speaker_profile, twitter: '@foobar').twitter).to eq 'foobar'
end
it 'must contain only alphanumeric symbols or an underscore' do
speaker_profile = build :speaker_profile
speaker_profile.twitter = 'fooBar_1'
expect(speaker_profile).to_not have_error_on :twitter
speaker_profile.twitter = 'foobar!'
expect(speaker_profile).to have_error_on :twitter
end
it 'must be maximum 15 symbols long' do
expect(build(:speaker_profile, twitter: 'a'*16)).to have_error_on :twitter
end
end
end
describe 'github account' do
it 'can be absent' do
expect(build(:speaker_profile, github: '')).to_not have_error_on :twitter
end
context 'when present' do
it 'must contain only alphanumeric symbols or a dash' do
speaker_profile = build :speaker_profile
speaker_profile.github = 'fooBar-1'
expect(speaker_profile).to_not have_error_on :github
speaker_profile.github = 'foobar!'
expect(speaker_profile).to have_error_on :github
end
it 'must not start with a dash' do
expect(build(:speaker_profile, github: '-foobar')).to have_error_on :github
end
end
end
it 'is invalid without a bio' do
expect(build(:speaker_profile, biography: nil)).to have_error_on :biography
end
end