Disable project avatar validation if avatar has not changed
Every time a column in the projects table is changed, the Avatarable concern would validate that the avatar file size was under 200K. This not only delays the database changes, but it also can lead to unrelated failures if the HTTP request fails for some reason. Closes #51053
This commit is contained in:
parent
8ff02cf7c4
commit
d4bdcfbf19
3 changed files with 26 additions and 1 deletions
|
@ -9,7 +9,7 @@ module Avatarable
|
|||
include Gitlab::Utils::StrongMemoize
|
||||
|
||||
validate :avatar_type, if: ->(user) { user.avatar.present? && user.avatar_changed? }
|
||||
validates :avatar, file_size: { maximum: 200.kilobytes.to_i }
|
||||
validates :avatar, file_size: { maximum: 200.kilobytes.to_i }, if: :avatar_changed?
|
||||
|
||||
mount_uploader :avatar, AvatarUploader
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Disable project avatar validation if avatar has not changed
|
||||
merge_request:
|
||||
author:
|
||||
type: performance
|
|
@ -12,6 +12,26 @@ describe Avatarable do
|
|||
stub_config_setting(relative_url_root: relative_url_root)
|
||||
end
|
||||
|
||||
describe '#update' do
|
||||
let(:validator) { project._validators[:avatar].detect { |v| v.is_a?(FileSizeValidator) } }
|
||||
|
||||
context 'when avatar changed' do
|
||||
it 'validates the file size' do
|
||||
expect(validator).to receive(:validate_each).and_call_original
|
||||
|
||||
project.update(avatar: 'uploads/avatar.png')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when avatar was not changed' do
|
||||
it 'skips validation of file size' do
|
||||
expect(validator).not_to receive(:validate_each)
|
||||
|
||||
project.update(name: 'Hello world')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#avatar_path' do
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
|
||||
|
|
Loading…
Reference in a new issue