From a5c386cbb24449c3830f15cdbf7fa9b22c24d47c Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Tue, 15 Jun 2021 14:06:44 +0100 Subject: [PATCH] Fixes #3610 - Chat-Message references not cleared with data privacy task. --- app/models/chat/message.rb | 3 +++ app/models/chat/session.rb | 2 +- spec/factories/chat/message.rb | 9 +++++++++ spec/models/user_spec.rb | 10 ++++++++-- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 spec/factories/chat/message.rb diff --git a/app/models/chat/message.rb b/app/models/chat/message.rb index 2eed65dc0..b51ff27d4 100644 --- a/app/models/chat/message.rb +++ b/app/models/chat/message.rb @@ -3,5 +3,8 @@ class Chat::Message < ApplicationModel include ChecksHtmlSanitized + belongs_to :chat_session, class_name: 'Chat::Session' + belongs_to :created_by, class_name: 'User', optional: true + sanitized_html :content end diff --git a/app/models/chat/session.rb b/app/models/chat/session.rb index bdc8aa1bc..aab42f497 100644 --- a/app/models/chat/session.rb +++ b/app/models/chat/session.rb @@ -9,7 +9,7 @@ class Chat::Session < ApplicationModel include Chat::Session::Assets # rubocop:disable Rails/InverseOf - has_many :messages, class_name: 'Chat::Message', foreign_key: 'chat_session_id' + has_many :messages, class_name: 'Chat::Message', foreign_key: 'chat_session_id', dependent: :destroy belongs_to :user, class_name: 'User', optional: true belongs_to :chat, class_name: 'Chat' # rubocop:enable Rails/InverseOf diff --git a/spec/factories/chat/message.rb b/spec/factories/chat/message.rb new file mode 100644 index 000000000..9c3249f0e --- /dev/null +++ b/spec/factories/chat/message.rb @@ -0,0 +1,9 @@ +# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/ + +FactoryBot.define do + factory :'chat/message' do + chat_session { create(:'chat/session') } + content { 'test 1234' } + created_by_id { 1 } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 0b7bac5b5..3e8a59316 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -879,9 +879,9 @@ RSpec.describe User, type: :model do 'Taskbar' => { 'user_id' => 1 }, 'Sla' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'UserDevice' => { 'user_id' => 1 }, - 'Chat::Message' => { 'created_by_id' => 0 }, + 'Chat::Message' => { 'created_by_id' => 1 }, 'Chat::Agent' => { 'created_by_id' => 1, 'updated_by_id' => 1 }, - 'Chat::Session' => { 'user_id' => 0, 'created_by_id' => 0, 'updated_by_id' => 0 }, + 'Chat::Session' => { 'user_id' => 1, 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Tag' => { 'created_by_id' => 0 }, 'Karma::User' => { 'user_id' => 0 }, 'Karma::ActivityLog' => { 'user_id' => 1 }, @@ -930,6 +930,9 @@ RSpec.describe User, type: :model do mention = create(:mention, mentionable: create(:ticket), user: user) mention_created_by = create(:mention, mentionable: create(:ticket), user: create(:agent), created_by: user) user_created_by = create(:customer, created_by_id: user.id, updated_by_id: user.id, out_of_office_replacement_id: user.id) + chat_session = create(:'chat/session', user: user) + chat_message = create(:'chat/message', chat_session: chat_session) + chat_message2 = create(:'chat/message', chat_session: chat_session, created_by: user) expect(overview.reload.user_ids).to eq([user.id]) # create a chat agent for admin user (id=1) before agent user @@ -970,6 +973,9 @@ RSpec.describe User, type: :model do expect { mention.reload }.to raise_exception(ActiveRecord::RecordNotFound) expect(mention_created_by.reload.created_by_id).not_to eq(user.id) expect(overview.reload.user_ids).to eq([]) + expect { chat_session.reload }.to raise_exception(ActiveRecord::RecordNotFound) + expect { chat_message.reload }.to raise_exception(ActiveRecord::RecordNotFound) + expect { chat_message2.reload }.to raise_exception(ActiveRecord::RecordNotFound) # move ownership objects expect { group.reload }.to change(group, :created_by_id).to(1)