FIX: when destroying uploads clear card and profile background
There is an fk to user_profile that can make destroying uploads fail if they happen to be set as user profile. This ensures we clear this information when destroying uploads. There are more relationships, but this makes some more progress.
This commit is contained in:
parent
1671cd924d
commit
38e7b1a049
|
@ -39,6 +39,11 @@ class Upload < ActiveRecord::Base
|
|||
|
||||
validates_with UploadValidator
|
||||
|
||||
before_destroy do
|
||||
UserProfile.where(card_background_upload_id: self.id).update_all(card_background_upload_id: nil)
|
||||
UserProfile.where(profile_background_upload_id: self.id).update_all(profile_background_upload_id: nil)
|
||||
end
|
||||
|
||||
after_destroy do
|
||||
User.where(uploaded_avatar_id: self.id).update_all(uploaded_avatar_id: nil)
|
||||
UserAvatar.where(gravatar_upload_id: self.id).update_all(gravatar_upload_id: nil)
|
||||
|
|
|
@ -413,4 +413,25 @@ describe Upload do
|
|||
"https://#{SiteSetting.s3_upload_bucket}.s3.amazonaws.com/original/1X/#{upload.sha1}.#{upload.extension}?acl"
|
||||
)
|
||||
end
|
||||
|
||||
context '.destroy' do
|
||||
|
||||
it "can correctly clear information when destroying an upload" do
|
||||
upload = Fabricate(:upload)
|
||||
user = Fabricate(:user)
|
||||
|
||||
user.user_profile.update!(
|
||||
card_background_upload_id: upload.id,
|
||||
profile_background_upload_id: upload.id
|
||||
)
|
||||
|
||||
upload.destroy
|
||||
|
||||
user.user_profile.reload
|
||||
|
||||
expect(user.user_profile.card_background_upload_id).to eq(nil)
|
||||
expect(user.user_profile.profile_background_upload_id).to eq(nil)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue