date_spec.rb 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. require 'rails_helper'
  2. RSpec.describe Ticket::Number::Date do
  3. describe '.generate' do
  4. let(:number) { described_class.generate }
  5. before { travel_to(Time.zone.parse('1955-11-05')) }
  6. it 'updates the "Date" Ticket::Counter' do
  7. expect { number }
  8. .to change { Ticket::Counter.find_by(generator: 'Date')&.content }
  9. end
  10. context 'with a "ticket_number_date" setting with checksum: false (default)' do
  11. context 'and a single-digit system_id' do
  12. before { Setting.set('system_id', 1) }
  13. it 'returns a string following the pattern date + system_id + zero-padded number' do
  14. expect(number).to eq('1955110510001')
  15. end
  16. end
  17. context 'and a two-digit system_id' do
  18. before { Setting.set('system_id', 88) }
  19. it 'returns a string following the pattern date + system_id + zero-padded number' do
  20. expect(number).to eq('19551105880001')
  21. end
  22. end
  23. end
  24. context 'with a "ticket_number_date" setting with checksum: true' do
  25. before { Setting.set('ticket_number_date', { checksum: true }) }
  26. context 'and a single-digit system_id' do
  27. before { Setting.set('system_id', 1) }
  28. it 'returns a string following the pattern date + system_id + zero-padded number + checksum' do
  29. expect(number).to eq('19551105100012')
  30. end
  31. end
  32. context 'and a two-digit system_id' do
  33. before { Setting.set('system_id', 88) }
  34. it 'returns a string following the pattern date + system_id + zero-padded number + checksum' do
  35. expect(number).to eq('195511058800012')
  36. end
  37. end
  38. end
  39. end
  40. describe '.check' do
  41. context 'for tickets with date-style numbers' do
  42. let(:ticket) { create(:ticket, number: ticket_number) }
  43. let(:ticket_number) { "19551105#{Setting.get('system_id')}0001" }
  44. let(:check_query) { ticket.subject_build(ticket.title) }
  45. context 'when system_id is the same as when ticket was created' do
  46. before do
  47. Setting.set('system_id', 1)
  48. ticket # create ticket
  49. end
  50. it 'returns the ticket matching the number in the given string' do
  51. expect(described_class.check(check_query)).to eq(ticket)
  52. end
  53. end
  54. context 'when system_id is different from when ticket was created' do
  55. before do
  56. Setting.set('system_id', 1)
  57. ticket # create ticket
  58. Setting.set('system_id', 999)
  59. end
  60. it 'returns nil' do
  61. expect(described_class.check(check_query)).to be(nil)
  62. end
  63. context 'and "ticket_number_ignore_system_id" is true' do
  64. before { Setting.set('ticket_number_ignore_system_id', true) }
  65. it 'returns the ticket matching the number in the given string' do
  66. expect(described_class.check(check_query)).to eq(ticket)
  67. end
  68. end
  69. end
  70. end
  71. end
  72. end