period_working_minutes_spec.rb 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. require 'rails_helper'
  2. RSpec.describe Escalation::PeriodWorkingMinutes do
  3. let(:instance) { described_class.new start_time, end_time, ticket, biz }
  4. let(:start_time) { 1.week.ago }
  5. let(:end_time) { 1.day.ago }
  6. let(:ticket) { create(:ticket) }
  7. let(:calendar) { create(:calendar, :'24/7') }
  8. let(:biz) { calendar.biz breaks: Escalation::TicketBizBreak.new(ticket, calendar).biz_breaks }
  9. describe '#period_working_minutes' do
  10. subject(:result) { instance.send(:period_working_minutes) }
  11. before do
  12. freeze_time
  13. ticket.update! state: Ticket::State.lookup(name: 'new')
  14. travel 1.hour
  15. ticket.update! state: Ticket::State.lookup(name: 'open')
  16. travel 30.minutes
  17. ticket.update! state: Ticket::State.lookup(name: 'pending close')
  18. travel 30.minutes
  19. ticket.update! state: Ticket::State.lookup(name: 'closed'), close_at: Time.current
  20. end
  21. context 'when timeframe takes whole ticket life' do
  22. let(:start_time) { ticket.created_at }
  23. let(:end_time) { ticket.close_at + 2.hours }
  24. it { is_expected.to be 90 }
  25. end
  26. context 'when timeframe starts before and ends after ticket life' do
  27. let(:start_time) { ticket.created_at - 1.week }
  28. let(:end_time) { ticket.close_at + 1.week }
  29. it { is_expected.to be 90 }
  30. end
  31. context 'when timeframe starts in the middle of ticket life' do
  32. let(:start_time) { ticket.created_at + 30.minutes }
  33. let(:end_time) { ticket.close_at }
  34. it { is_expected.to be 60 }
  35. end
  36. context 'when timeframe end in the middle of ticket life' do
  37. let(:start_time) { ticket.created_at }
  38. let(:end_time) { ticket.created_at + 30.minutes }
  39. it { is_expected.to be 30 }
  40. end
  41. end
  42. describe '#timeframe_start' do
  43. subject(:result) { instance.send(:timeframe_start) }
  44. context 'when start_time is early' do
  45. it { is_expected.to eq ticket.created_at }
  46. end
  47. context 'when start_time is later than #created_at' do
  48. let(:start_time) { 1.week.from_now }
  49. it { is_expected.to eq start_time }
  50. end
  51. end
  52. describe '#timeframe_end' do
  53. subject(:result) { instance.send(:timeframe_end) }
  54. context 'when end_time is late' do
  55. let(:end_time) { 1.week.from_now }
  56. before do
  57. ticket.update! close_at: 1.day.from_now
  58. end
  59. it { is_expected.to eq ticket.close_at }
  60. end
  61. context 'when end_time is before closing' do
  62. let(:end_time) { 1.week.from_now }
  63. before do
  64. ticket.update! close_at: 2.weeks.from_now
  65. end
  66. it { is_expected.to eq end_time }
  67. end
  68. context 'when #close_at is not set' do
  69. let(:end_time) { 1.week.ago }
  70. it { is_expected.to eq end_time }
  71. end
  72. end
  73. end