From 7c718d9c1817356f319ede95483e011a6f1b35bf Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Wed, 8 Jun 2022 14:50:54 +0200 Subject: [PATCH] Fixes #3935 - DataPrivacy Tasks fail if Zammad has to solve references on users with invalid email addresses. --- app/models/user.rb | 2 +- spec/models/user_spec.rb | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index b9eacd295..0d5e6897f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1157,7 +1157,7 @@ raise 'At least one user need to have admin permissions' record[column] = 1 end - record.save! + record.save!(validate: false) rescue => e Rails.logger.error e end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 253a180c5..df598b21d 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1009,14 +1009,14 @@ RSpec.describe User, type: :model do 'Trigger' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Translation' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'ObjectManager::Attribute' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, - 'User' => { 'created_by_id' => 1, 'out_of_office_replacement_id' => 1, 'updated_by_id' => 1 }, + 'User' => { 'created_by_id' => 2, 'out_of_office_replacement_id' => 1, 'updated_by_id' => 2 }, 'Organization' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Macro' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'CoreWorkflow' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Mention' => { 'created_by_id' => 1, 'updated_by_id' => 0, 'user_id' => 1 }, 'Channel' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Role' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, - 'History' => { 'created_by_id' => 5 }, + 'History' => { 'created_by_id' => 6 }, 'Webhook' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Overview' => { 'created_by_id' => 1, 'updated_by_id' => 0 }, 'ActivityStream' => { 'created_by_id' => 0 }, @@ -1055,6 +1055,11 @@ RSpec.describe User, type: :model do create(:'chat/agent') chat_agent_user = create(:'chat/agent', created_by_id: user.id, updated_by_id: user.id) + # invalid user (by email) which has been updated by the user which + # will get deleted (#3935) + invalid_user = build(:user, email: 'abc', created_by_id: user.id, updated_by_id: user.id) + invalid_user.save!(validate: false) + # move ownership objects group = create(:group, created_by_id: user.id) job = create(:job, updated_by_id: user.id) @@ -1108,6 +1113,7 @@ RSpec.describe User, type: :model do .and change(user_created_by, :out_of_office_replacement_id).to(1) expect { draft_start.reload }.to change(draft_start, :created_by_id).to(1) expect { draft_zoom.reload }.to change(draft_zoom, :created_by_id).to(1) + expect { invalid_user.reload }.to change(invalid_user, :created_by_id).to(1) end it 'does delete cache after user deletion' do