From fbc1e4a2523e4ec22de243c37aa35fe0a3322130 Mon Sep 17 00:00:00 2001 From: Florian Liebe Date: Mon, 13 Jun 2022 14:56:50 +0200 Subject: [PATCH] Fixes #3952 - Notifications are sent for all tickets when an organization of a customer is updated. --- .../user/updates_ticket_organization.rb | 6 ++- spec/models/ticket_spec.rb | 37 ------------- .../user/updates_ticket_organization_spec.rb | 52 +++++++++++++++++++ 3 files changed, 56 insertions(+), 39 deletions(-) create mode 100644 spec/models/user/updates_ticket_organization_spec.rb diff --git a/app/models/user/updates_ticket_organization.rb b/app/models/user/updates_ticket_organization.rb index bd7a149cc..9e2b7bb7c 100644 --- a/app/models/user/updates_ticket_organization.rb +++ b/app/models/user/updates_ticket_organization.rb @@ -19,9 +19,11 @@ module User::UpdatesTicketOrganization # update last 100 tickets of user tickets = Ticket.where(customer_id: id).limit(100) tickets.each do |ticket| - if ticket.organization_id != organization_id + next if ticket.organization_id == organization_id + + Transaction.execute(disable_notification: true, reset_user_id: true) do ticket.organization_id = organization_id - ticket.save + ticket.save! end end end diff --git a/spec/models/ticket_spec.rb b/spec/models/ticket_spec.rb index 16b195f35..eedd77423 100644 --- a/spec/models/ticket_spec.rb +++ b/spec/models/ticket_spec.rb @@ -1487,43 +1487,6 @@ RSpec.describe Ticket, type: :model do end end - describe 'Associations:' do - describe '#organization' do - subject(:ticket) { build(:ticket, customer: customer, organization: nil) } - - let(:customer) { create(:customer, :with_org) } - - context 'on creation' do - it 'automatically adopts the organization of its #customer' do - expect { ticket.save } - .to change(ticket, :organization).to(customer.organization) - end - end - - context 'on update of #customer.organization' do - context 'to nil' do - it 'automatically updates to #customer’s new value' do - ticket.save - - expect { customer.update(organization: nil) } - .to change { ticket.reload.organization }.to(nil) - end - end - - context 'to a different organization' do - let(:new_org) { create(:organization) } - - it 'automatically updates to #customer’s new value' do - ticket.save - - expect { customer.update(organization: new_org) } - .to change { ticket.reload.organization }.to(new_org) - end - end - end - end - end - describe '.search' do shared_examples 'search permissions' do diff --git a/spec/models/user/updates_ticket_organization_spec.rb b/spec/models/user/updates_ticket_organization_spec.rb new file mode 100644 index 000000000..769a201ca --- /dev/null +++ b/spec/models/user/updates_ticket_organization_spec.rb @@ -0,0 +1,52 @@ +# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ + +require 'rails_helper' + +RSpec.describe User::UpdatesTicketOrganization, type: :model do + subject(:ticket) { build(:ticket, customer: customer, organization: nil) } + + let(:customer) { create(:customer, :with_org) } + + context 'when ticket is created' do + it 'automatically adopts the organization of its #customer' do + expect { ticket.save } + .to change(ticket, :organization).to(customer.organization) + end + end + + context 'when #customer.organization is updated' do + context 'when set to nil' do + it 'automatically updates to #customer’s new value' do + ticket.save + + expect { customer.update(organization: nil) } + .to change { ticket.reload.organization }.to(nil) + end + end + + context 'when #customer.organization is updated to a different organization' do + let(:old_org) { customer.organization } + let(:new_org) { create(:organization) } + + it 'automatically updates to #customer’s new value' do + ticket.save + + expect { customer.update(organization: new_org) } + .to change { ticket.reload.organization }.to(new_org) + end + + it 'has made all changes with user id 1' do + expect(ticket.updated_by.id).to eq 1 + end + + # https://github.com/zammad/zammad/issues/3952 + it 'does not send notifications' do + allow(NotificationFactory::Mailer).to receive(:send) + + customer.update(organization: old_org) + + expect(NotificationFactory::Mailer).not_to have_received(:send) + end + end + end +end