about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSumit Khanna <notify@battlepenguin.com>2018-12-13 22:07:21 -0600
committerEugen Rochko <eugen@zeonfederated.com>2018-12-14 05:07:21 +0100
commit769c2d2680c365cfafb35e27bc1d3b39deac118e (patch)
tree9e6453eccdc3909bdff0f14c77daf58edb65a037
parent11a91592aac049c6c0efffbb9b17347663303d47 (diff)
Error message for avatar image that's too large. #9204 (#9518)
* Error message for avatar image that's too large. #9204

* Code climate/formatting

* Removed avatar error message

* Moved valid image dimentions check to update service

* removed unnescessary begin block

* code climate formatting

* code climate indent fix
-rw-r--r--app/services/update_account_service.rb3
-rw-r--r--spec/controllers/settings/profiles_controller_spec.rb22
-rw-r--r--spec/fixtures/files/4096x4097.pngbin0 -> 58859 bytes
3 files changed, 25 insertions, 0 deletions
diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb
index 36665177d..01756a73d 100644
--- a/app/services/update_account_service.rb
+++ b/app/services/update_account_service.rb
@@ -12,6 +12,9 @@ class UpdateAccountService < BaseService
       check_links(account)
       process_hashtags(account)
     end
+  rescue Mastodon::DimensionsValidationError => de
+    account.errors.add(:avatar, de.message)
+    false
   end
 
   private
diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
index a453200af..5b1fe3aca 100644
--- a/spec/controllers/settings/profiles_controller_spec.rb
+++ b/spec/controllers/settings/profiles_controller_spec.rb
@@ -26,4 +26,26 @@ RSpec.describe Settings::ProfilesController, type: :controller do
       expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
     end
   end
+
+  describe 'PUT #update with new profile image' do
+    it 'updates profile image' do
+      allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
+      account = Fabricate(:account, user: @user, display_name: 'AvatarTest')
+      expect(account.avatar.instance.avatar_file_name).to be_nil
+
+      put :update, params: { account: { avatar: fixture_file_upload('files/avatar.gif', 'image/gif') } }
+      expect(response).to redirect_to(settings_profile_path)
+      expect(account.reload.avatar.instance.avatar_file_name).not_to be_nil
+      expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
+    end
+  end
+
+  describe 'PUT #update with oversized image' do
+    it 'gives the user an error message' do
+      allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
+      account = Fabricate(:account, user: @user, display_name: 'AvatarTest')
+      put :update, params: { account: { avatar: fixture_file_upload('files/4096x4097.png', 'image/png') } }
+      expect(response.body).to include('images are not supported')
+    end
+  end
 end
diff --git a/spec/fixtures/files/4096x4097.png b/spec/fixtures/files/4096x4097.png
new file mode 100644
index 000000000..d1110cc2d
--- /dev/null
+++ b/spec/fixtures/files/4096x4097.png
Binary files differ