Browse Source

Fixes #5013 - Dashboard „REOPENING RATE“ statistic shows nothing.

Co-authored-by: Florian Liebe <fl@zammad.com>
Rolf Schmidt 1 year ago
parent
commit
c0e25c8531

+ 2 - 3
app/models/ticket/calls_stats_ticket_reopen_log.rb

@@ -5,8 +5,7 @@ module Ticket::CallsStatsTicketReopenLog
   extend ActiveSupport::Concern
 
   included do
-    before_create :ticket_call_stats_ticket_reopen_log
-    before_update :ticket_call_stats_ticket_reopen_log
+    after_commit :ticket_call_stats_ticket_reopen_log
   end
 
   private
@@ -16,6 +15,6 @@ module Ticket::CallsStatsTicketReopenLog
     # return if we run import mode
     return if Setting.get('import_mode')
 
-    Stats::TicketReopen.log('Ticket', id, saved_changes, updated_by_id)
+    Stats::TicketReopen.log('Ticket', id, previous_changes, updated_by_id)
   end
 end

+ 0 - 14
spec/models/ticket/calls_stats_ticket_reopen_log_examples.rb

@@ -1,14 +0,0 @@
-# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
-
-RSpec.shared_examples 'TicketCallsStatsTicketReopenLog' do
-
-  it 'can only be loaded for Ticket' do
-    expect(described_class).to eq Ticket
-  end
-
-  it 'calls Stats::TicketReopen.log' do
-    allow(Stats::TicketReopen).to receive(:log)
-    create(described_class.name.underscore)
-    expect(Stats::TicketReopen).to have_received(:log)
-  end
-end

+ 23 - 0
spec/models/ticket/calls_stats_ticket_reopen_log_spec.rb

@@ -0,0 +1,23 @@
+# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
+
+require 'rails_helper'
+
+RSpec.describe 'Ticket::CallsStatsTicketReopenLog' do
+  let(:agent)  { create(:agent, groups: Group.all) }
+  let(:ticket) { create(:ticket, group: Group.first, owner: agent) }
+
+  it 'does track reopened tickets' do
+    ticket.update(state: Ticket::State.find_by(name: 'closed'))
+    ticket.update(state: Ticket::State.find_by(name: 'open'))
+    expect(StatsStore.find_by(key: 'ticket:reopen', stats_storable_type: 'User', stats_storable_id: agent.id).data).to eq({ 'ticket_id'=> ticket.id })
+  end
+
+  it 'does calculate dashboard correctly' do
+    create_list(:ticket, 8, group: Group.first, owner: agent, state: Ticket::State.find_by(name: 'closed'))
+    tickets_reopened = create_list(:ticket, 2, group: Group.first, owner: agent, state: Ticket::State.find_by(name: 'closed'))
+    tickets_reopened.each { |ticket| ticket.update(state: Ticket::State.find_by(name: 'open')) }
+
+    Stats.generate
+    expect(StatsStore.find_by(key: 'dashboard', stats_storable_type: 'User', stats_storable_id: agent.id).data['StatsTicketReopen']).to eq({ 'used_for_average' => 20.0, 'percent' => 20.0, 'average_per_agent' => 20.0, 'state' => 'good', 'count' => 2, 'total' => 10 })
+  end
+end

+ 0 - 2
spec/models/ticket_spec.rb

@@ -12,7 +12,6 @@ require 'models/concerns/has_taskbars_examples'
 require 'models/concerns/has_xss_sanitized_note_examples'
 require 'models/concerns/has_object_manager_attributes_examples'
 require 'models/tag/writes_to_ticket_history_examples'
-require 'models/ticket/calls_stats_ticket_reopen_log_examples'
 require 'models/ticket/enqueues_user_ticket_counter_job_examples'
 require 'models/ticket/escalation_examples'
 require 'models/ticket/resets_pending_time_seconds_examples'
@@ -34,7 +33,6 @@ RSpec.describe Ticket, type: :model do
   it_behaves_like 'HasXssSanitizedNote', model_factory: :ticket
   it_behaves_like 'HasObjectManagerAttributes'
   it_behaves_like 'Ticket::Escalation'
-  it_behaves_like 'TicketCallsStatsTicketReopenLog'
   it_behaves_like 'TicketEnqueuesTicketUserTicketCounterJob'
   it_behaves_like 'TicketResetsPendingTimeSeconds'
   it_behaves_like 'TicketSetsCloseTime'