ticket_csv_import_test.rb 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. require 'test_helper'
  2. class TicketCsvImportTest < ActiveSupport::TestCase
  3. test 'import example verify' do
  4. csv_string = Ticket.csv_example
  5. rows = CSV.parse(csv_string)
  6. header = rows.shift
  7. assert_equal('id', header[0])
  8. assert_equal('number', header[1])
  9. assert_equal('title', header[2])
  10. assert_equal('note', header[3])
  11. assert_equal('first_response_at', header[4])
  12. assert_equal('first_response_escalation_at', header[5])
  13. assert(header.include?('organization'))
  14. assert(header.include?('priority'))
  15. assert(header.include?('state'))
  16. assert(header.include?('owner'))
  17. assert(header.include?('customer'))
  18. end
  19. test 'empty payload' do
  20. csv_string = ''
  21. result = Ticket.csv_import(
  22. string: csv_string,
  23. parse_params: {
  24. col_sep: ';',
  25. },
  26. try: true,
  27. )
  28. assert_equal(true, result[:try])
  29. assert_nil(result[:records])
  30. assert_equal('failed', result[:result])
  31. assert_equal('Unable to parse empty file/string for Ticket.', result[:errors][0])
  32. csv_string = 'id;number;title;state;priority;'
  33. result = Ticket.csv_import(
  34. string: csv_string,
  35. parse_params: {
  36. col_sep: ';',
  37. },
  38. try: true,
  39. )
  40. assert_equal(true, result[:try])
  41. assert(result[:records].blank?)
  42. assert_equal('failed', result[:result])
  43. assert_equal('No records found in file/string for Ticket.', result[:errors][0])
  44. end
  45. test 'simple import' do
  46. csv_string = "id;number;title;state;priority;owner;customer;group;note\n;123456;some title1;new;2 normal;-;nicole.braun@zammad.org;Users;some note1\n;123457;some title2;closed;1 low;admin@example.com;nicole.braun@zammad.org;Users;some note2\n"
  47. result = Ticket.csv_import(
  48. string: csv_string,
  49. parse_params: {
  50. col_sep: ';',
  51. },
  52. try: true,
  53. )
  54. assert_equal(true, result[:try])
  55. assert_equal(2, result[:records].count)
  56. assert_equal('success', result[:result])
  57. assert_nil(Ticket.find_by(number: '123456'))
  58. assert_nil(Ticket.find_by(number: '123457'))
  59. result = Ticket.csv_import(
  60. string: csv_string,
  61. parse_params: {
  62. col_sep: ';',
  63. },
  64. try: false,
  65. )
  66. assert_equal(false, result[:try])
  67. assert_equal(2, result[:records].count)
  68. assert_equal('success', result[:result])
  69. ticket1 = Ticket.find_by(number: '123456')
  70. assert(ticket1)
  71. assert_equal(ticket1.number, '123456')
  72. assert_equal(ticket1.title, 'some title1')
  73. assert_equal(ticket1.state.name, 'new')
  74. assert_equal(ticket1.priority.name, '2 normal')
  75. assert_equal(ticket1.owner.login, '-')
  76. assert_equal(ticket1.customer.login, 'nicole.braun@zammad.org')
  77. assert_equal(ticket1.note, 'some note1')
  78. ticket2 = Ticket.find_by(number: '123457')
  79. assert(ticket2)
  80. assert_equal(ticket2.number, '123457')
  81. assert_equal(ticket2.title, 'some title2')
  82. assert_equal(ticket2.state.name, 'closed')
  83. assert_equal(ticket2.priority.name, '1 low')
  84. assert_equal(ticket2.owner.login, 'admin@example.com')
  85. assert_equal(ticket2.customer.login, 'nicole.braun@zammad.org')
  86. assert_equal(ticket2.note, 'some note2')
  87. ticket1.destroy!
  88. ticket2.destroy!
  89. end
  90. test 'simple import with invalid id' do
  91. csv_string = "id;number;title;state;priority;owner;customer;group;note\n999999999;123456;some title1;new;2 normal;-;nicole.braun@zammad.org;Users;some note1\n;123457;some title2;closed;1 low;admin@example.com;nicole.braun@zammad.org;Users;some note2\n"
  92. result = Ticket.csv_import(
  93. string: csv_string,
  94. parse_params: {
  95. col_sep: ';',
  96. },
  97. try: true,
  98. )
  99. assert_equal(true, result[:try])
  100. assert_equal(1, result[:errors].count)
  101. assert_equal('failed', result[:result])
  102. assert_equal("Line 1: unknown record with id '999999999' for Ticket.", result[:errors][0])
  103. assert_nil(Ticket.find_by(number: '123456'))
  104. assert_nil(Ticket.find_by(number: '123457'))
  105. result = Ticket.csv_import(
  106. string: csv_string,
  107. parse_params: {
  108. col_sep: ';',
  109. },
  110. try: false,
  111. )
  112. assert_equal(false, result[:try])
  113. assert_equal(1, result[:records].count)
  114. assert_equal('failed', result[:result])
  115. assert_nil(Ticket.find_by(number: '123456'))
  116. ticket2 = Ticket.find_by(number: '123457')
  117. assert(ticket2)
  118. assert_equal(ticket2.title, 'some title2')
  119. assert_equal(ticket2.note, 'some note2')
  120. csv_string = "id;number;title;state;priority;owner;customer;group;note\n999999999;123456;some title1;new;2 normal;-;nicole.braun@zammad.org;Users;some note1\n;123457;some title22;closed;1 low;admin@example.com;nicole.braun@zammad.org;Users;some note22\n"
  121. result = Ticket.csv_import(
  122. string: csv_string,
  123. parse_params: {
  124. col_sep: ';',
  125. },
  126. try: false,
  127. )
  128. assert_equal(false, result[:try])
  129. assert_equal(1, result[:records].count)
  130. assert_equal('failed', result[:result])
  131. assert_nil(Ticket.find_by(number: '123456'))
  132. ticket2 = Ticket.find_by(number: '123457')
  133. assert(ticket2)
  134. assert_equal(ticket2.title, 'some title22')
  135. assert_equal(ticket2.note, 'some note22')
  136. ticket2.destroy!
  137. end
  138. test 'invalid attributes' do
  139. csv_string = "id;number;not_existing;state;priority;owner;customer;group;note\n;123456;some title1;new;2 normal;-;nicole.braun@zammad.org;Users;some note1\n;123457;some title2;closed;1 low;admin@example.com;nicole.braun@zammad.org;Users;some note2\n"
  140. result = Ticket.csv_import(
  141. string: csv_string,
  142. parse_params: {
  143. col_sep: ';',
  144. },
  145. try: true,
  146. )
  147. assert_equal(true, result[:try])
  148. assert_equal(2, result[:errors].count)
  149. assert_equal('failed', result[:result])
  150. assert_equal("Line 1: unknown attribute 'not_existing' for Ticket.", result[:errors][0])
  151. assert_equal("Line 2: unknown attribute 'not_existing' for Ticket.", result[:errors][1])
  152. assert_nil(Ticket.find_by(number: '123456'))
  153. assert_nil(Ticket.find_by(number: '123457'))
  154. result = Ticket.csv_import(
  155. string: csv_string,
  156. parse_params: {
  157. col_sep: ';',
  158. },
  159. try: false,
  160. )
  161. assert_equal(false, result[:try])
  162. assert_equal(2, result[:errors].count)
  163. assert_equal('failed', result[:result])
  164. assert_equal("Line 1: unknown attribute 'not_existing' for Ticket.", result[:errors][0])
  165. assert_equal("Line 2: unknown attribute 'not_existing' for Ticket.", result[:errors][1])
  166. assert_nil(Ticket.find_by(number: '123456'))
  167. assert_nil(Ticket.find_by(number: '123457'))
  168. end
  169. end