state_factory_spec.rb 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. require 'lib/import/transaction_factory_examples'
  4. RSpec.describe Import::OTRS::StateFactory do
  5. it_behaves_like 'Import::TransactionFactory'
  6. it 'creates a state backup in the pre_import_hook' do
  7. expect(described_class).to receive(:backup)
  8. described_class.pre_import_hook([])
  9. end
  10. def load_state_json(file)
  11. json_fixture("import/otrs/state/#{file}")
  12. end
  13. it 'updates ObjectManager Ticket state_id and pending_time filter' do
  14. states = %w[new open merged pending_reminder pending_auto_close_p pending_auto_close_n pending_auto_close_p closed_successful closed_unsuccessful closed_successful removed]
  15. state_backend_param = []
  16. states.each do |state|
  17. state_backend_param.push(load_state_json(state))
  18. end
  19. ticket_state_id = ::ObjectManager::Attribute.get(
  20. object: 'Ticket',
  21. name: 'state_id',
  22. )
  23. ticket_pending_time = ::ObjectManager::Attribute.get(
  24. object: 'Ticket',
  25. name: 'pending_time',
  26. )
  27. expect do
  28. described_class.import(state_backend_param)
  29. # sync changes
  30. ticket_state_id.reload
  31. ticket_pending_time.reload
  32. end.to change {
  33. ticket_state_id.data_option
  34. }.and change {
  35. ticket_state_id.screens
  36. }
  37. end
  38. it "doesn't update ObjectManager Ticket state_id and pending_time filter in diff import" do
  39. ticket_state_id = ::ObjectManager::Attribute.get(
  40. object: 'Ticket',
  41. name: 'state_id',
  42. )
  43. ticket_pending_time = ::ObjectManager::Attribute.get(
  44. object: 'Ticket',
  45. name: 'pending_time',
  46. )
  47. allow(Import::OTRS).to receive(:diff?).and_return(true)
  48. expect do
  49. described_class.update_attribute_settings
  50. # sync changes
  51. ticket_state_id.reload
  52. ticket_pending_time.reload
  53. end.to not_change {
  54. ticket_state_id.data_option
  55. }.and not_change {
  56. ticket_state_id.screens
  57. }.and not_change {
  58. ticket_pending_time.data_option
  59. }
  60. end
  61. it 'sets default create and update State' do
  62. state = ::Ticket::State.first
  63. state.default_create = false
  64. state.default_follow_up = false
  65. state.callback_loop = true
  66. state.save
  67. allow(Import::OTRS::SysConfigFactory).to receive(:postmaster_default_lookup).with(:state_default_create).and_return(state.name)
  68. allow(Import::OTRS::SysConfigFactory).to receive(:postmaster_default_lookup).with(:state_default_follow_up).and_return(state.name)
  69. described_class.update_attribute
  70. state.reload
  71. expect(state.default_create).to be true
  72. expect(state.default_follow_up).to be true
  73. end
  74. it "doesn't set default create and update State in diff import" do
  75. state = ::Ticket::State.first
  76. state.default_create = false
  77. state.default_follow_up = false
  78. state.callback_loop = true
  79. state.save
  80. allow(Import::OTRS).to receive(:diff?).and_return(true)
  81. described_class.update_attribute_settings
  82. state.reload
  83. expect(state.default_create).to be false
  84. expect(state.default_follow_up).to be false
  85. end
  86. context 'changing Ticket::State IDs' do
  87. let(:state_backend_param) do
  88. states = %w[new open merged pending_reminder pending_auto_close_p pending_auto_close_n pending_auto_close_p closed_successful closed_unsuccessful closed_successful removed]
  89. state_backend_param = []
  90. states.each do |state|
  91. state_backend_param.push(load_state_json(state))
  92. end
  93. state_backend_param
  94. end
  95. it 'updates Overviews' do
  96. name = 'My Pending Reached Tickets'
  97. overview = Overview.find_by(name: name)
  98. expect do
  99. described_class.import(state_backend_param)
  100. overview = Overview.find_by(name: name)
  101. end.to change {
  102. overview.id
  103. }.and change {
  104. overview.condition['ticket.state_id'][:value]
  105. }
  106. end
  107. it 'updates Macros' do
  108. name = 'Close & Tag as Spam'
  109. macro = Macro.find_by(name: name)
  110. expect do
  111. described_class.import(state_backend_param)
  112. macro = Macro.find_by(name: name)
  113. end.to change {
  114. macro.id
  115. }.and change {
  116. macro.perform['ticket.state_id'][:value]
  117. }
  118. end
  119. it 'updates Triggers' do
  120. name = 'auto reply (on new tickets)'
  121. trigger = Trigger.find_by(name: name)
  122. expect do
  123. described_class.import(state_backend_param)
  124. trigger = Trigger.find_by(name: name)
  125. end.to change {
  126. trigger.id
  127. }.and change {
  128. trigger.condition['ticket.state_id'][:value]
  129. }
  130. end
  131. end
  132. end