2019-10-14 08:54:58 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'rails_helper'
|
2021-07-31 15:49:42 +00:00
|
|
|
require Rails.root.join 'spec/models/concerns/access_tokenable_shared.rb'
|
2019-10-14 08:54:58 +00:00
|
|
|
|
|
|
|
RSpec.describe User do
|
2019-12-01 10:12:15 +00:00
|
|
|
let!(:user) { create(:user) }
|
|
|
|
|
2019-10-14 08:54:58 +00:00
|
|
|
context 'validations' do
|
|
|
|
it { is_expected.to validate_presence_of(:email) }
|
|
|
|
it { is_expected.to validate_presence_of(:name) }
|
2021-02-04 14:38:46 +00:00
|
|
|
it { is_expected.to validate_length_of(:name).is_at_least(1) }
|
2019-10-14 08:54:58 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'associations' do
|
2020-03-07 06:48:16 +00:00
|
|
|
it { is_expected.to have_many(:accounts).through(:account_users) }
|
|
|
|
it { is_expected.to have_many(:account_users) }
|
2019-12-01 10:12:15 +00:00
|
|
|
it { is_expected.to have_many(:assigned_conversations).class_name('Conversation').dependent(:nullify) }
|
2019-10-14 08:54:58 +00:00
|
|
|
it { is_expected.to have_many(:inbox_members).dependent(:destroy) }
|
2020-02-29 15:11:09 +00:00
|
|
|
it { is_expected.to have_many(:notification_settings).dependent(:destroy) }
|
2019-10-14 08:54:58 +00:00
|
|
|
it { is_expected.to have_many(:messages) }
|
2020-03-18 11:23:35 +00:00
|
|
|
it { is_expected.to have_many(:events) }
|
2021-01-17 18:26:56 +00:00
|
|
|
it { is_expected.to have_many(:teams) }
|
2019-10-14 08:54:58 +00:00
|
|
|
end
|
2019-10-16 21:48:07 +00:00
|
|
|
|
2021-01-14 15:05:22 +00:00
|
|
|
describe 'concerns' do
|
|
|
|
it_behaves_like 'access_tokenable'
|
|
|
|
end
|
|
|
|
|
2019-10-16 21:48:07 +00:00
|
|
|
describe 'pubsub_token' do
|
2019-12-01 10:12:15 +00:00
|
|
|
before { user.update(name: Faker::Name.name) }
|
2019-10-16 21:48:07 +00:00
|
|
|
|
2019-12-01 10:12:15 +00:00
|
|
|
it { expect(user.pubsub_token).not_to eq(nil) }
|
|
|
|
it { expect(user.saved_changes.keys).not_to eq('pubsub_token') }
|
2019-10-16 21:48:07 +00:00
|
|
|
end
|
2020-11-25 08:29:38 +00:00
|
|
|
|
2021-02-08 11:08:35 +00:00
|
|
|
describe 'hmac_identifier' do
|
|
|
|
it 'return nil if CHATWOOT_INBOX_HMAC_KEY is not set' do
|
|
|
|
expect(user.hmac_identifier).to eq('')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'return value if CHATWOOT_INBOX_HMAC_KEY is set' do
|
|
|
|
ConfigLoader.new.process
|
|
|
|
i = InstallationConfig.find_by(name: 'CHATWOOT_INBOX_HMAC_KEY')
|
|
|
|
i.value = 'random_secret_key'
|
|
|
|
i.save!
|
|
|
|
GlobalConfig.clear_cache
|
|
|
|
|
|
|
|
expected_hmac_identifier = OpenSSL::HMAC.hexdigest('sha256', 'random_secret_key', user.email)
|
|
|
|
|
|
|
|
expect(user.hmac_identifier).to eq expected_hmac_identifier
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-11-25 08:29:38 +00:00
|
|
|
context 'sso_auth_token' do
|
|
|
|
it 'can generate multiple sso tokens which can be validated' do
|
|
|
|
sso_auth_token1 = user.generate_sso_auth_token
|
|
|
|
sso_auth_token2 = user.generate_sso_auth_token
|
|
|
|
expect(sso_auth_token1).present?
|
|
|
|
expect(sso_auth_token2).present?
|
|
|
|
expect(user.valid_sso_auth_token?(sso_auth_token1)).to eq true
|
|
|
|
expect(user.valid_sso_auth_token?(sso_auth_token2)).to eq true
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'wont validate an invalid token' do
|
|
|
|
expect(user.valid_sso_auth_token?(SecureRandom.hex(32))).to eq false
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'wont validate an invalidated token' do
|
|
|
|
sso_auth_token = user.generate_sso_auth_token
|
|
|
|
user.invalidate_sso_auth_token(sso_auth_token)
|
|
|
|
expect(user.valid_sso_auth_token?(sso_auth_token)).to eq false
|
|
|
|
end
|
|
|
|
end
|
2021-07-15 09:54:38 +00:00
|
|
|
|
|
|
|
describe 'access token' do
|
|
|
|
it 'creates a single access token upon user creation' do
|
|
|
|
new_user = create(:user)
|
|
|
|
token_count = AccessToken.where(owner: new_user).count
|
|
|
|
expect(token_count).to eq(1)
|
|
|
|
end
|
|
|
|
end
|
2019-10-14 08:54:58 +00:00
|
|
|
end
|