chore: Ability to Disable Gravatars (#5027)
fixes: #3853 - Introduced DISABLE_GRAVATAR Global Config, which will stop chatwoot from making API requests to gravatar - Cleaned up avatar-related logic and centralized it into the avatarable concern - Added specs for the missing cases - Added migration for existing installations to move the avatar to attachment, rather than making the API that results in 404.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
require 'rails_helper'
|
||||
require Rails.root.join 'spec/models/concerns/access_tokenable_shared.rb'
|
||||
require Rails.root.join 'spec/models/concerns/avatarable_shared.rb'
|
||||
|
||||
RSpec.describe AgentBot, type: :model do
|
||||
describe 'associations' do
|
||||
@@ -9,5 +10,6 @@ RSpec.describe AgentBot, type: :model do
|
||||
|
||||
describe 'concerns' do
|
||||
it_behaves_like 'access_tokenable'
|
||||
it_behaves_like 'avatarable'
|
||||
end
|
||||
end
|
||||
|
||||
41
spec/models/concerns/avatarable_shared.rb
Normal file
41
spec/models/concerns/avatarable_shared.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
require 'rails_helper'
|
||||
|
||||
shared_examples_for 'avatarable' do
|
||||
let(:avatarable) { create(described_class.to_s.underscore) }
|
||||
|
||||
it { is_expected.to have_one_attached(:avatar) }
|
||||
|
||||
it 'add avatar_url method' do
|
||||
expect(avatarable.respond_to?(:avatar_url)).to be true
|
||||
end
|
||||
|
||||
context 'when avatarable has an email attribute' do
|
||||
it 'enques job when email is changed on avatarable create' do
|
||||
avatarable = build(described_class.to_s.underscore, account: create(:account))
|
||||
if avatarable.respond_to?(:email)
|
||||
avatarable.email = 'test@test.com'
|
||||
avatarable.skip_reconfirmation! if avatarable.is_a? User
|
||||
expect(Avatar::AvatarFromGravatarJob).to receive(:set).with(wait: 30.seconds).and_call_original
|
||||
end
|
||||
avatarable.save!
|
||||
expect(Avatar::AvatarFromGravatarJob).to have_been_enqueued.with(avatarable, avatarable.email) if avatarable.respond_to?(:email)
|
||||
end
|
||||
|
||||
it 'enques job when email is changes on avatarable update' do
|
||||
if avatarable.respond_to?(:email)
|
||||
avatarable.email = 'xyc@test.com'
|
||||
avatarable.skip_reconfirmation! if avatarable.is_a? User
|
||||
expect(Avatar::AvatarFromGravatarJob).to receive(:set).with(wait: 30.seconds).and_call_original
|
||||
end
|
||||
avatarable.save!
|
||||
expect(Avatar::AvatarFromGravatarJob).to have_been_enqueued.with(avatarable, avatarable.email) if avatarable.respond_to?(:email)
|
||||
end
|
||||
|
||||
it 'will not enqueu when email is not changed on avatarable update' do
|
||||
avatarable.updated_at = Time.now.utc
|
||||
expect do
|
||||
avatarable.save!
|
||||
end.not_to have_enqueued_job(Avatar::AvatarFromGravatarJob)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
require Rails.root.join 'spec/models/concerns/avatarable_shared.rb'
|
||||
|
||||
RSpec.describe Contact do
|
||||
context 'validations' do
|
||||
it { is_expected.to validate_presence_of(:account_id) }
|
||||
@@ -12,6 +14,10 @@ RSpec.describe Contact do
|
||||
it { is_expected.to have_many(:conversations).dependent(:destroy_async) }
|
||||
end
|
||||
|
||||
describe 'concerns' do
|
||||
it_behaves_like 'avatarable'
|
||||
end
|
||||
|
||||
context 'prepare contact attributes before validation' do
|
||||
it 'sets email to lowercase' do
|
||||
contact = create(:contact, email: 'Test@test.com')
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
require 'rails_helper'
|
||||
require Rails.root.join 'spec/models/concerns/out_of_offisable_shared.rb'
|
||||
require Rails.root.join 'spec/models/concerns/avatarable_shared.rb'
|
||||
|
||||
RSpec.describe Inbox do
|
||||
describe 'validations' do
|
||||
@@ -37,6 +38,7 @@ RSpec.describe Inbox do
|
||||
|
||||
describe 'concerns' do
|
||||
it_behaves_like 'out_of_offisable'
|
||||
it_behaves_like 'avatarable'
|
||||
end
|
||||
|
||||
describe '#add_member' do
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
require 'rails_helper'
|
||||
require Rails.root.join 'spec/models/concerns/access_tokenable_shared.rb'
|
||||
require Rails.root.join 'spec/models/concerns/avatarable_shared.rb'
|
||||
|
||||
RSpec.describe User do
|
||||
let!(:user) { create(:user) }
|
||||
@@ -25,6 +26,7 @@ RSpec.describe User do
|
||||
|
||||
describe 'concerns' do
|
||||
it_behaves_like 'access_tokenable'
|
||||
it_behaves_like 'avatarable'
|
||||
end
|
||||
|
||||
describe 'pubsub_token' do
|
||||
|
||||
Reference in New Issue
Block a user