Browse Source

Fixes #5166 - After Znuny import in Zammad: Users without a valid email address gives an 500 error in Zammad when creating a new mail

Martin Edenhofer 10 months ago
parent
commit
48881ba10e
2 changed files with 31 additions and 1 deletions
  1. 7 1
      app/controllers/users_controller.rb
  2. 24 0
      spec/requests/user_spec.rb

+ 7 - 1
app/controllers/users_controller.rb

@@ -263,8 +263,14 @@ class UsersController < ApplicationController
       users = []
       user_all.each do |user|
         realname = user.fullname
+
+        # improve realname, if possible
         if user.email.present? && realname != user.email
-          realname = Channel::EmailBuild.recipient_line realname, user.email
+          begin
+            realname = Channel::EmailBuild.recipient_line(realname, user.email)
+          rescue Mail::Field::IncompleteParseError
+            # mute if parsing of recipient_line was not successful / #5166
+          end
         end
         a = if params[:term]
               { id: user.id, label: realname, value: user.email, inactive: !user.active }

+ 24 - 0
spec/requests/user_spec.rb

@@ -1682,6 +1682,30 @@ RSpec.describe 'User', performs_jobs: true, type: :request do
     end
   end
 
+  describe 'GET /api/v1/users/search, with invalid attributes', authenticated_as: :agent do
+    let(:agent) { create(:agent) }
+    let(:customer_invalid) do
+      create(
+        :customer,
+        login:     'customer1@example.com',
+        firstname: 'Some',
+        lastname:  'Customer1',
+        email:     'customer1@example.com',
+      )
+    end
+
+    context 'when email address is invalid' do
+      before do
+        customer_invalid.update_attribute(:email, 'eee lala')
+        post '/api/v1/users/search', params: { term: 'Customer1' }, as: :json
+      end
+
+      it 'succeeds' do
+        expect(response).to have_http_status(:success)
+      end
+    end
+  end
+
   describe 'PUT /api/v1/users/{id}', authenticated_as: :admin do
     let(:admin) { create(:admin) }
     let(:agent) { create(:agent) }