386 lines
12 KiB
Ruby
386 lines
12 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Profile, type: :model do
|
|
describe 'squish_spaces' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
let!(:profile) do
|
|
create :profile, first_name: ' First Name ',
|
|
last_name: ' Last Name ',
|
|
city: ' New York ',
|
|
postcode: ' AB 135-144 '
|
|
end
|
|
|
|
it 'squishes spaces' do
|
|
profile.reload
|
|
expect(profile.first_name).to eq 'First Name'
|
|
expect(profile.last_name).to eq 'Last Name'
|
|
expect(profile.city).to eq 'New York'
|
|
expect(profile.postcode).to eq 'AB 135-144'
|
|
end
|
|
end
|
|
|
|
describe 'creating partial priofile' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
let!(:user) { create(:user) }
|
|
|
|
subject { Profile.create(params.merge(user: user)) }
|
|
|
|
context 'empty params' do
|
|
let!(:params) { {} }
|
|
|
|
it { expect(subject).to be_valid }
|
|
it { expect(subject.first_name.nil?).to be_truthy }
|
|
it { expect(subject.last_name.nil?).to be_truthy }
|
|
it { expect(subject.dob.nil?).to be_truthy }
|
|
it { expect(subject.address.nil?).to be_truthy }
|
|
it { expect(subject.postcode.nil?).to be_truthy }
|
|
it { expect(subject.city.nil?).to be_truthy }
|
|
it { expect(subject.country.nil?).to be_truthy }
|
|
it { expect(subject.metadata.nil?).to be_truthy }
|
|
it { expect(subject.state).to eq('drafted') }
|
|
it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') }
|
|
|
|
context 'add empty params' do
|
|
|
|
let!(:params) {
|
|
{
|
|
last_name: Faker::Name.last_name,
|
|
first_name: Faker::Name.first_name,
|
|
dob: Faker::Date.birthday,
|
|
country: Faker::Address.country_code_long,
|
|
city: Faker::Address.city,
|
|
address: Faker::Address.street_address,
|
|
postcode: Faker::Address.zip_code
|
|
}
|
|
}
|
|
|
|
before do
|
|
subject.update(params)
|
|
end
|
|
|
|
it { expect(subject).to be_valid }
|
|
it { expect(subject.first_name.present?).to be_truthy }
|
|
it { expect(subject.last_name.present?).to be_truthy }
|
|
it { expect(subject.dob.present?).to be_truthy }
|
|
it { expect(subject.address.present?).to be_truthy }
|
|
it { expect(subject.postcode.present?).to be_truthy }
|
|
it { expect(subject.city.present?).to be_truthy }
|
|
it { expect(subject.country.present?).to be_truthy }
|
|
it { expect(subject.metadata.nil?).to be_truthy }
|
|
it { expect(subject.state).to eq('drafted') }
|
|
it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') }
|
|
end
|
|
end
|
|
|
|
context 'all profile params' do
|
|
let!(:params) {
|
|
{
|
|
last_name: Faker::Name.last_name,
|
|
first_name: Faker::Name.first_name,
|
|
dob: Faker::Date.birthday,
|
|
country: Faker::Address.country_code_long,
|
|
city: Faker::Address.city,
|
|
address: Faker::Address.street_address,
|
|
postcode: Faker::Address.zip_code
|
|
}
|
|
}
|
|
|
|
it { expect(subject).to be_valid }
|
|
it { expect(subject.first_name.present?).to be_truthy }
|
|
it { expect(subject.last_name.present?).to be_truthy }
|
|
it { expect(subject.dob.present?).to be_truthy }
|
|
it { expect(subject.address.present?).to be_truthy }
|
|
it { expect(subject.postcode.present?).to be_truthy }
|
|
it { expect(subject.city.present?).to be_truthy }
|
|
it { expect(subject.country.present?).to be_truthy }
|
|
it { expect(subject.metadata.present?).to be_falsey }
|
|
it { expect(subject.state).to eq('drafted') }
|
|
it { expect(subject.user.labels.find_by(key: 'profile').value).to eq('drafted') }
|
|
end
|
|
end
|
|
|
|
context 'profile_state!' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
|
|
let!(:user) { create(:user) }
|
|
let!(:verified_profile) { create(:profile, user_id: user.id, state: 'verified') }
|
|
let!(:rejected_profile) { create(:profile, user_id: user.id, state: 'rejected') }
|
|
let!(:drafted_profile) { create(:profile, user_id: user.id, state: 'drafted') }
|
|
let!(:profile_params) {
|
|
{
|
|
user_id: user.id,
|
|
last_name: Faker::Name.last_name,
|
|
first_name: Faker::Name.first_name,
|
|
dob: Faker::Date.birthday,
|
|
country: Faker::Address.country_code_long,
|
|
city: Faker::Address.city,
|
|
address: Faker::Address.street_address,
|
|
postcode: Faker::Address.zip_code
|
|
}
|
|
}
|
|
|
|
it 'profile with state drafted' do
|
|
profile = Profile.new(profile_params)
|
|
profile.save
|
|
profile.valid?
|
|
|
|
expect(profile.errors[:state]).to eq(['already exists'])
|
|
end
|
|
|
|
it 'profile with state submitted' do
|
|
profile = Profile.new(profile_params.merge(state: 'submitted'))
|
|
profile.save
|
|
profile.valid?
|
|
|
|
expect(profile.errors[:state]).to eq(['already exists'])
|
|
end
|
|
|
|
it 'profile with state verified' do
|
|
profile = Profile.new(profile_params.merge(state: 'verified'))
|
|
profile.save
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
|
|
it 'profile with state rejected' do
|
|
profile = Profile.new(profile_params.merge(state: 'rejected'))
|
|
profile.save
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
end
|
|
|
|
context 'create_or_update_profile_label' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
|
|
let!(:user) { create(:user) }
|
|
let!(:profile_params) {
|
|
{
|
|
user_id: user.id,
|
|
last_name: Faker::Name.last_name,
|
|
first_name: Faker::Name.first_name,
|
|
dob: Faker::Date.birthday,
|
|
country: Faker::Address.country_code_long,
|
|
city: Faker::Address.city,
|
|
address: Faker::Address.street_address,
|
|
postcode: Faker::Address.zip_code
|
|
}
|
|
}
|
|
|
|
it 'creating profile label' do
|
|
expect(user.labels.count).to eq 0
|
|
|
|
Profile.create(profile_params)
|
|
expect(user.labels.count).to eq 1
|
|
expect(user.labels.first.key).to eq 'profile'
|
|
expect(user.labels.first.value).to eq 'drafted'
|
|
end
|
|
|
|
it 'updating profile label' do
|
|
profile = Profile.create(profile_params.merge(state: 'submitted'))
|
|
expect(user.labels.count).to eq 1
|
|
expect(user.labels.first.key).to eq 'profile'
|
|
expect(user.labels.first.value).to eq 'submitted'
|
|
|
|
expect(user.labels.count).to eq 1
|
|
|
|
profile.update(state: 'verified')
|
|
expect(user.labels.count).to eq 1
|
|
expect(user.labels.first.key).to eq 'profile'
|
|
expect(user.labels.first.value).to eq 'verified'
|
|
end
|
|
|
|
context 'dob param' do
|
|
let!(:profile) { create(:profile, user_id: user.id, state: 'verified') }
|
|
|
|
it 'should be valid dob' do
|
|
profile.update(dob: Time.now)
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
|
|
it 'should be invalid dob format' do
|
|
profile.update(dob: '')
|
|
expect(profile.valid?).to eq false
|
|
expect(profile.errors[:dob]).to eq ["invalid date format"]
|
|
end
|
|
|
|
it 'should be invalid dob format' do
|
|
profile.update(dob: Time.now + 3.days)
|
|
expect(profile.valid?).to eq false
|
|
expect(profile.errors[:dob]).to eq ["cant be in future"]
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'update_document_label' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
|
|
let!(:user) { create(:user) }
|
|
let!(:user_without_document) { create(:user) }
|
|
let!(:document_verified_level) { Level.find(4) }
|
|
let!(:document_verified_label) { create_label_with_level(user, document_verified_level) }
|
|
|
|
let!(:profile_params) {
|
|
{
|
|
last_name: Faker::Name.last_name,
|
|
first_name: Faker::Name.first_name,
|
|
dob: Faker::Date.birthday,
|
|
country: Faker::Address.country_code_long,
|
|
city: Faker::Address.city,
|
|
address: Faker::Address.street_address,
|
|
postcode: Faker::Address.zip_code
|
|
}
|
|
}
|
|
|
|
it 'change document state when new profile created' do
|
|
expect(user.labels.find_by(key: :document).value).to eq 'verified'
|
|
|
|
Profile.create(profile_params.merge(user_id: user.id))
|
|
expect(user.labels.count).to eq 2
|
|
expect(user.labels.find_by(key: :document).value).to eq 'verified'
|
|
end
|
|
|
|
it 'do not change document state when document doesnt exist' do
|
|
expect(user_without_document.labels.find_by(key: :document)).to eq nil
|
|
|
|
Profile.create(profile_params.merge(user_id: user_without_document.id))
|
|
expect(user_without_document.labels.count).to eq 1
|
|
expect(user_without_document.labels.find_by(key: :document)).to eq nil
|
|
end
|
|
end
|
|
|
|
context 'event api behaviour' do
|
|
let!(:permission) { create(:permission, role: 'member') }
|
|
let!(:user) { create(:user, state: 'pending', role: 'member') }
|
|
let!(:profile) { create(:profile, user_id: user.id, first_name: old_name) }
|
|
let!(:old_name) { Faker::Name.first_name }
|
|
let!(:new_name) { Faker::Name.first_name }
|
|
|
|
let(:profile_update) { profile.update(first_name: new_name ) }
|
|
|
|
before do
|
|
allow(EventAPI).to receive(:notify)
|
|
end
|
|
|
|
it 'receives event with label create' do
|
|
profile_update
|
|
|
|
expect(EventAPI).to have_received(:notify).with('model.profile.updated',
|
|
hash_including(
|
|
changes: { first_name: old_name },
|
|
record: hash_including(first_name: new_name)
|
|
))
|
|
end
|
|
end
|
|
|
|
context 'validation' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
|
|
context 'encrypted fields length' do
|
|
let!(:profile) { create(:profile) }
|
|
|
|
it 'encrypted first name should be valid with 255 characters' do
|
|
profile.update(first_name: Faker::Alphanumeric.alphanumeric(number: 255))
|
|
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
|
|
it 'encrypted last name should be valid with 255 characters' do
|
|
profile.update(last_name: Faker::Alphanumeric.alphanumeric(number: 255))
|
|
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
|
|
it 'encrypted address should be valid with 255 characters' do
|
|
profile.update(address: Faker::Alphanumeric.alphanumeric(number: 255))
|
|
|
|
expect(profile.valid?).to eq true
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'submasked fields' do
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
|
|
let!(:user) { create(:user) }
|
|
|
|
let!(:profile) do
|
|
create :profile, first_name: 'Oleksandr',
|
|
last_name: 'Berezniy',
|
|
city: 'New York',
|
|
postcode: 'AB 135-144',
|
|
dob: Date.new(2007, 5, 12)
|
|
end
|
|
|
|
let!(:profile_without_last_name) do
|
|
create :profile, first_name: 'Oleksandr',
|
|
last_name: nil,
|
|
city: 'New York',
|
|
postcode: 'AB 135-144'
|
|
end
|
|
|
|
let!(:profile_without_dob) do
|
|
create :profile, first_name: 'Oleksandr',
|
|
last_name: nil,
|
|
city: 'New York',
|
|
postcode: 'AB 135-144',
|
|
dob: nil
|
|
end
|
|
|
|
context 'last_name' do
|
|
it { expect(profile.sub_masked_last_name).to eq 'B*******' }
|
|
|
|
it 'should mask all letters except first one' do
|
|
profile.update(last_name: 'Teylor_1')
|
|
expect(profile.sub_masked_last_name).to eq 'T*******'
|
|
end
|
|
|
|
it 'should mask all letters except first one' do
|
|
profile.update(last_name: ' Last name ')
|
|
expect(profile.sub_masked_last_name).to eq 'L********'
|
|
end
|
|
|
|
it 'should mask all letters except first one' do
|
|
profile.update(last_name: '')
|
|
expect(profile.sub_masked_last_name).to eq ''
|
|
end
|
|
|
|
it 'should mask all letters except first one' do
|
|
expect(profile_without_last_name.sub_masked_last_name).to eq nil
|
|
end
|
|
end
|
|
|
|
context 'dob' do
|
|
it { expect(profile.sub_masked_dob).to eq '2007-05-**' }
|
|
|
|
it 'should mask only date numbers' do
|
|
profile.update(dob: Date.new(2020, 12, 12))
|
|
expect(profile.sub_masked_dob).to eq '2020-12-**'
|
|
end
|
|
|
|
it 'should mask only date numbers' do
|
|
expect(profile_without_dob.sub_masked_dob).to eq nil
|
|
end
|
|
end
|
|
end
|
|
end
|