mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 08:54:36 +08:00
67dec38f31
It is possible that a user could exist without an email, if so we should not enqueue a job to download their gravatar. This commit resolves this error that can occur: ``` Job exception: undefined method `email' for nil:NilClass /var/www/discourse/app/models/user.rb:1204:in `email' /var/www/discourse/app/jobs/regular/update_gravatar.rb:12:in `execute' ``` This commit also fixes the original spec which actually was wrong. The job never enqueued in the original spec and so the gravatar was never actually updated and the test was checking if the two values were the same, but they were both null and never updated, so of course they were the same! A new test has also been added to make sure the gravatar job isn't enqueued when a user's email is missing.
51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe Jobs::UpdateGravatar do
|
|
fab!(:user) { Fabricate(:user) }
|
|
let(:temp) { Tempfile.new('test') }
|
|
fab!(:upload) { Fabricate(:upload, user: user) }
|
|
let(:avatar) { user.create_user_avatar! }
|
|
|
|
it "picks gravatar if system avatar is picked and gravatar was just downloaded" do
|
|
temp.binmode
|
|
# tiny valid png
|
|
temp.write(Base64.decode64("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="))
|
|
temp.rewind
|
|
FileHelper.expects(:download).returns(temp)
|
|
|
|
Jobs.run_immediately!
|
|
|
|
expect(user.uploaded_avatar_id).to eq(nil)
|
|
expect(user.user_avatar.gravatar_upload_id).to eq(nil)
|
|
|
|
SiteSetting.automatically_download_gravatars = true
|
|
|
|
user.refresh_avatar
|
|
user.reload
|
|
|
|
expect(user.uploaded_avatar_id).to_not eq(nil)
|
|
expect(user.uploaded_avatar_id).to eq(user.user_avatar.gravatar_upload_id)
|
|
|
|
temp.unlink
|
|
end
|
|
|
|
it "does not enqueue a job when user is missing their email" do
|
|
user.primary_email.destroy
|
|
user.reload
|
|
|
|
expect(user.uploaded_avatar_id).to eq(nil)
|
|
expect(user.user_avatar.gravatar_upload_id).to eq(nil)
|
|
|
|
SiteSetting.automatically_download_gravatars = true
|
|
|
|
expect { user.refresh_avatar }
|
|
.to change { Jobs::UpdateGravatar.jobs.count }.by(0)
|
|
user.reload
|
|
|
|
expect(user.uploaded_avatar_id).to eq(nil)
|
|
expect(user.user_avatar.gravatar_upload_id).to eq(nil)
|
|
end
|
|
end
|