185 lines
4.3 KiB
Ruby
185 lines
4.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Person do
|
|
subject { create :initial_person }
|
|
|
|
it_behaves_like 'nameable'
|
|
|
|
describe '#account' do
|
|
it { is_expected.to have_one(:account).dependent(:restrict_with_exception) }
|
|
end
|
|
|
|
describe '#account_connection_token' do
|
|
def allow_value(*)
|
|
super.for :account_connection_token
|
|
end
|
|
|
|
it { is_expected.not_to validate_presence_of :account_connection_token }
|
|
|
|
it do
|
|
is_expected.to \
|
|
validate_length_of(:account_connection_token).is_equal_to(32)
|
|
end
|
|
|
|
it { is_expected.to allow_value nil }
|
|
it { is_expected.to allow_value SecureRandom.alphanumeric(32) }
|
|
it { is_expected.to allow_value '_' * 32 }
|
|
|
|
it { is_expected.not_to allow_value '' }
|
|
it { is_expected.not_to allow_value 'q' }
|
|
it { is_expected.not_to allow_value SecureRandom.alphanumeric(31) }
|
|
it { is_expected.not_to allow_value SecureRandom.alphanumeric(33) }
|
|
|
|
%w[
|
|
~ ` ! @ # $ % ^ & * ( ) - = + [ { ] } \ | ; : ' " , < . > / ?
|
|
].each do |char|
|
|
it { is_expected.not_to allow_value char * 32 }
|
|
end
|
|
end
|
|
|
|
describe '#contact_list' do
|
|
xit { is_expected.to belong_to(:contact_list).required }
|
|
|
|
context 'when it was changed' do
|
|
before do
|
|
subject.contact_list = ContactList.new
|
|
end
|
|
|
|
specify do
|
|
expect { subject.save }.to raise_error(
|
|
ActiveRecord::StatementInvalid,
|
|
/\APG::RaiseException:\s
|
|
ERROR:\s\scan\snot\schange\scolumn\s"contact_list_id"$/x,
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#all_relationships' do
|
|
let! :relationship_2 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 4.days.ago
|
|
end
|
|
|
|
let! :relationship_3 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 2.days.ago
|
|
end
|
|
|
|
let! :relationship_1 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 6.days.ago
|
|
end
|
|
|
|
it do
|
|
is_expected.to \
|
|
have_many(:all_relationships)
|
|
.class_name('Relationship')
|
|
.inverse_of(:person)
|
|
.dependent(:restrict_with_exception)
|
|
.order(from_date: :asc)
|
|
end
|
|
|
|
specify do
|
|
expect(subject.all_relationships).to eq [
|
|
relationship_1,
|
|
relationship_2,
|
|
relationship_3,
|
|
]
|
|
end
|
|
end
|
|
|
|
describe '#current_relationship' do
|
|
it do
|
|
is_expected.to \
|
|
have_one(:current_relationship)
|
|
.class_name('Relationship')
|
|
.inverse_of(:person)
|
|
.dependent(:restrict_with_exception)
|
|
.order(from_date: :desc)
|
|
end
|
|
|
|
let! :relationship_2 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 4.days.ago
|
|
end
|
|
|
|
let! :relationship_3 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 2.days.ago
|
|
end
|
|
|
|
let! :relationship_1 do
|
|
create :supporter_relationship,
|
|
person: subject,
|
|
from_date: 6.days.ago
|
|
end
|
|
|
|
specify do
|
|
expect(subject.current_relationship).to eq relationship_3
|
|
end
|
|
end
|
|
|
|
describe '#person_comments' do
|
|
it do
|
|
is_expected.to \
|
|
have_many(:person_comments)
|
|
.dependent(:restrict_with_exception)
|
|
end
|
|
end
|
|
|
|
describe '#passports' do
|
|
it do
|
|
is_expected.to \
|
|
have_many(:passports)
|
|
.dependent(:restrict_with_exception)
|
|
end
|
|
end
|
|
|
|
describe '#full_name' do
|
|
specify do
|
|
expect(subject.full_name).to be_instance_of String
|
|
end
|
|
|
|
specify do
|
|
expect(subject.full_name).to be_frozen
|
|
end
|
|
|
|
specify do
|
|
expect(subject.full_name).to eq(
|
|
[
|
|
subject.last_name,
|
|
subject.first_name,
|
|
subject.middle_name,
|
|
].compact.join(' '),
|
|
)
|
|
end
|
|
end
|
|
|
|
describe '#generate_account_connection_token' do
|
|
specify do
|
|
expect { subject.generate_account_connection_token }.to \
|
|
change(subject, :account_connection_token)
|
|
.from(nil)
|
|
end
|
|
|
|
context 'when token already exists' do
|
|
before do
|
|
subject.generate_account_connection_token
|
|
end
|
|
|
|
specify do
|
|
expect { subject.generate_account_connection_token }.to \
|
|
change(subject, :account_connection_token)
|
|
.from(subject.account_connection_token)
|
|
end
|
|
end
|
|
end
|
|
end
|