text_module_csv_import_test.rb 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'test_helper'
  3. class TextModuleCsvImportTest < ActiveSupport::TestCase
  4. test 'import example verify' do
  5. TextModule.load('en-en')
  6. csv_string = TextModule.csv_example
  7. rows = CSV.parse(csv_string)
  8. header = rows.shift
  9. assert_equal('id', header[0])
  10. assert_equal('name', header[1])
  11. assert_equal('keywords', header[2])
  12. assert_equal('content', header[3])
  13. assert_equal('note', header[4])
  14. assert_equal('active', header[5])
  15. assert_not(header.include?('organization'))
  16. assert_not(header.include?('priority'))
  17. assert_not(header.include?('state'))
  18. assert_not(header.include?('owner'))
  19. assert_not(header.include?('customer'))
  20. end
  21. test 'empty payload' do
  22. csv_string = ''
  23. result = TextModule.csv_import(
  24. string: csv_string,
  25. parse_params: {
  26. col_sep: ';',
  27. },
  28. try: true,
  29. )
  30. assert_equal(true, result[:try])
  31. assert_nil(result[:records])
  32. assert_equal('failed', result[:result])
  33. assert_equal('Unable to parse empty file/string for TextModule.', result[:errors][0])
  34. csv_string = 'name;keywords;content;note;active;'
  35. result = TextModule.csv_import(
  36. string: csv_string,
  37. parse_params: {
  38. col_sep: ';',
  39. },
  40. try: true,
  41. )
  42. assert_equal(true, result[:try])
  43. assert(result[:records].blank?)
  44. assert_equal('failed', result[:result])
  45. assert_equal('No records found in file/string for TextModule.', result[:errors][0])
  46. end
  47. test 'verify required lookup headers' do
  48. csv_string = "firstname;lastname;active;\nfirstname-simple-import1;lastname-simple-import1;;true\nfirstname-simple-import2;lastname-simple-import2;false\n"
  49. result = TextModule.csv_import(
  50. string: csv_string,
  51. parse_params: {
  52. col_sep: ';',
  53. },
  54. try: true,
  55. )
  56. assert_equal(true, result[:try])
  57. assert_equal('failed', result[:result])
  58. assert_equal('No lookup column like id,name for TextModule found.', result[:errors][0])
  59. end
  60. test 'simple import' do
  61. TextModule.create!(
  62. name: 'nsome name1',
  63. content: 'nsome name1',
  64. active: true,
  65. updated_by_id: 1,
  66. created_by_id: 1,
  67. )
  68. csv_string = "name;keywords;content;note;active;\nsome name1;keyword1;\"some\ncontent1\";-;\nsome name2;keyword2;some content<br>test123\n"
  69. result = TextModule.csv_import(
  70. string: csv_string,
  71. parse_params: {
  72. col_sep: ';',
  73. },
  74. try: true,
  75. )
  76. assert_equal(true, result[:try])
  77. assert_equal(2, result[:records].count)
  78. assert_equal('success', result[:result])
  79. assert_nil(TextModule.find_by(name: 'some name1'))
  80. assert_nil(TextModule.find_by(name: 'some name2'))
  81. result = TextModule.csv_import(
  82. string: csv_string,
  83. parse_params: {
  84. col_sep: ';',
  85. },
  86. try: false,
  87. )
  88. assert_equal(false, result[:try])
  89. assert_equal(2, result[:records].count)
  90. assert_equal('success', result[:result])
  91. text_module1 = TextModule.find_by(name: 'some name1')
  92. assert(text_module1)
  93. assert_equal(text_module1.name, 'some name1')
  94. assert_equal(text_module1.keywords, 'keyword1')
  95. assert_equal(text_module1.content, 'some<br>content1')
  96. assert_equal(text_module1.active, true)
  97. text_module2 = TextModule.find_by(name: 'some name2')
  98. assert(text_module2)
  99. assert_equal(text_module2.name, 'some name2')
  100. assert_equal(text_module2.keywords, 'keyword2')
  101. assert_equal(text_module2.content, 'some content<br>test123')
  102. assert_equal(text_module2.active, true)
  103. text_module1.destroy!
  104. text_module2.destroy!
  105. end
  106. test 'simple import with delete' do
  107. assert_equal(0, TextModule.count)
  108. TextModule.create!(
  109. name: 'some name1',
  110. content: 'some name1',
  111. active: true,
  112. updated_by_id: 1,
  113. created_by_id: 1,
  114. )
  115. TextModule.create!(
  116. name: 'name should be deleted 2',
  117. content: 'name should be deleted 1',
  118. active: true,
  119. updated_by_id: 1,
  120. created_by_id: 1,
  121. )
  122. csv_string = "name;keywords;content;note;active;\nsome name1;keyword1;\"some\ncontent1\";-;\nsome name2;keyword2;some content<br>test123\n"
  123. result = TextModule.csv_import(
  124. string: csv_string,
  125. parse_params: {
  126. col_sep: ';',
  127. },
  128. try: true,
  129. delete: true,
  130. )
  131. assert_equal(true, result[:try])
  132. assert(result[:stats])
  133. assert_equal(2, result[:stats][:created])
  134. assert_equal(0, result[:stats][:updated])
  135. assert_equal(2, result[:stats][:deleted])
  136. assert_equal(2, result[:records].count)
  137. assert_equal('success', result[:result])
  138. assert(TextModule.find_by(name: 'some name1'))
  139. assert_nil(TextModule.find_by(name: 'some name2'))
  140. result = TextModule.csv_import(
  141. string: csv_string,
  142. parse_params: {
  143. col_sep: ';',
  144. },
  145. try: false,
  146. delete: true,
  147. )
  148. assert_equal(false, result[:try])
  149. assert(result[:stats])
  150. assert_equal(2, result[:stats][:created])
  151. assert_equal(0, result[:stats][:updated])
  152. assert_equal(2, result[:stats][:deleted])
  153. assert_equal(2, result[:records].count)
  154. assert_equal('success', result[:result])
  155. assert_equal(2, TextModule.count)
  156. text_module1 = TextModule.find_by(name: 'some name1')
  157. assert(text_module1)
  158. assert_equal(text_module1.name, 'some name1')
  159. assert_equal(text_module1.keywords, 'keyword1')
  160. assert_equal(text_module1.content, 'some<br>content1')
  161. assert_equal(text_module1.active, true)
  162. text_module2 = TextModule.find_by(name: 'some name2')
  163. assert(text_module2)
  164. assert_equal(text_module2.name, 'some name2')
  165. assert_equal(text_module2.keywords, 'keyword2')
  166. assert_equal(text_module2.content, 'some content<br>test123')
  167. assert_equal(text_module2.active, true)
  168. assert_nil(TextModule.find_by(name: 'name should be deleted 2'))
  169. text_module1.destroy!
  170. text_module2.destroy!
  171. end
  172. end