123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- require 'test_helper'
- require 'stats/ticket_waiting_time'
- class StatsTicketWaitingTimeTest < ActiveSupport::TestCase
- test 'single ticket' do
- group1 = Group.create!(
- name: 'Group 1',
- active: true,
- email_address: EmailAddress.first,
- created_by_id: 1,
- updated_by_id: 1,
- )
- roles = Role.where(name: 'Agent')
- user1 = User.create!(
- login: 'assets_stats1@example.org',
- firstname: 'assets_stats1',
- lastname: 'assets_stats1',
- email: 'assets_stats1@example.org',
- password: 'some_pass',
- active: true,
- groups: [group1],
- roles: roles,
- created_by_id: 1,
- updated_by_id: 1,
- )
- user2 = User.create!(
- login: 'assets_stats2@example.org',
- firstname: 'assets_stats2',
- lastname: 'assets_stats2',
- email: 'assets_sla2@example.org',
- password: 'some_pass',
- active: true,
- groups: [group1],
- roles: roles,
- created_by_id: 1,
- updated_by_id: 1,
- )
- result = Stats::TicketWaitingTime.generate(user1)
- assert_equal(0, result[:handling_time])
- assert_equal('supergood', result[:state])
- assert_equal(0, result[:average_per_agent])
- assert_equal(0, result[:percent])
- ticket1 = Ticket.create!(
- title: 'com test 1',
- group: group1,
- customer_id: 2,
- state: Ticket::State.lookup(name: 'new'),
- priority: Ticket::Priority.lookup(name: '2 normal'),
- updated_by_id: 1,
- created_by_id: 1,
- )
- # communication 1: waiting time 2 hours (BUT too old yesterday)
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Customer'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-12 08:00',
- updated_at: '2017-04-12 08:00',
- )
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Agent'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-12 10:00',
- updated_at: '2017-04-12 10:00',
- )
- # communication 2: waiting time 2 hours
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Customer'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 08:00',
- updated_at: '2017-04-13 08:00',
- )
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Agent'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 10:00',
- updated_at: '2017-04-13 10:00',
- )
- # communication 3: waiting time 4 hours
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Customer'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 11:00',
- updated_at: '2017-04-13 11:00',
- )
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'System'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 15:00',
- updated_at: '2017-04-13 15:00',
- )
- # communication 4: INVALID waiting time 1 hour (because internal)
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: true,
- sender: Ticket::Article::Sender.find_by(name: 'Customer'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 15:00',
- updated_at: '2017-04-13 15:00',
- )
- Ticket::Article.create!(
- ticket_id: ticket1.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 1',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: true,
- sender: Ticket::Article::Sender.find_by(name: 'System'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 15:10',
- updated_at: '2017-04-13 15:10',
- )
- ticket2 = Ticket.create!(
- title: 'com test 2',
- group: group1,
- customer_id: 2,
- state: Ticket::State.lookup(name: 'new'),
- priority: Ticket::Priority.lookup(name: '2 normal'),
- updated_by_id: 1,
- created_by_id: 1,
- )
- average_time = Stats::TicketWaitingTime.calculate_average([ticket1.id, ticket2.id], '2017-04-13 00:00:00')
- expected_average_time = 60 * 60 * 2 # for communication 2
- expected_average_time += 60 * 60 * 4 # for communication 3
- expected_average_time = expected_average_time / 2 # for average
- travel_to Time.zone.local(2017, 0o4, 13, 23, 0o0, 44)
- assert_equal(expected_average_time, average_time)
- result = Stats::TicketWaitingTime.generate(user1)
- assert_equal(0, result[:handling_time])
- assert_equal('supergood', result[:state])
- assert_equal(180, result[:average_per_agent])
- assert_equal(0.0, result[:percent])
- ticket3 = Ticket.create!(
- title: 'com test 3',
- group: group1,
- customer_id: 2,
- owner: user1,
- state: Ticket::State.lookup(name: 'new'),
- priority: Ticket::Priority.lookup(name: '2 normal'),
- updated_by_id: 1,
- created_by_id: 1,
- )
- # communication 1: waiting time 2 hours (BUT too old yesterday)
- Ticket::Article.create!(
- ticket_id: ticket3.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 3',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Customer'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 08:00',
- updated_at: '2017-04-13 08:00',
- )
- Ticket::Article.create!(
- ticket_id: ticket3.id,
- from: 'a@example.com',
- to: 'a@example.com',
- subject: 'com test 3',
- message_id: 'some@id_com_1',
- body: 'some message 123',
- internal: false,
- sender: Ticket::Article::Sender.find_by(name: 'Agent'),
- type: Ticket::Article::Type.find_by(name: 'email'),
- updated_by_id: 1,
- created_by_id: 1,
- created_at: '2017-04-13 09:00',
- updated_at: '2017-04-13 09:00',
- )
- result = Stats::TicketWaitingTime.generate(user1)
- assert_equal(60, result[:handling_time])
- assert_equal('supergood', result[:state])
- assert_equal(140, result[:average_per_agent])
- assert_equal(1.0, result[:percent])
- travel_back
- end
- end
|