create_spec.rb 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. require 'models/form_updater/concerns/checks_core_workflow_examples'
  4. require 'models/form_updater/concerns/has_security_options_examples'
  5. RSpec.describe(FormUpdater::Updater::Ticket::Create) do
  6. subject(:resolved_result) do
  7. described_class.new(
  8. context: context,
  9. relation_fields: relation_fields,
  10. meta: meta,
  11. data: data,
  12. id: nil
  13. )
  14. end
  15. let(:group) { create(:group, name: 'Example 1') }
  16. let(:group2) { create(:group, name: 'Example 2') }
  17. let(:level1_group) { create(:group, name: 'Depth 1-G1', parent: group) }
  18. let(:level1_group2) { create(:group, name: 'Depth 1-G2', parent: group) }
  19. let(:level2_group) { create(:group, name: 'Depth 2-G1', parent: level1_group) }
  20. let(:user) { create(:agent, groups: [group, group2, level1_group2, level2_group]) }
  21. let(:context) { { current_user: user } }
  22. let(:meta) { { initial: true, form_id: SecureRandom.uuid } }
  23. let(:data) { {} }
  24. let(:relation_fields) do
  25. [
  26. {
  27. name: 'group_id',
  28. relation: 'group',
  29. },
  30. {
  31. name: 'state_id',
  32. relation: 'TicketState',
  33. },
  34. {
  35. name: 'priority_id',
  36. relation: 'TicketPriority',
  37. },
  38. ]
  39. end
  40. let(:expected_group_options) do
  41. [
  42. {
  43. value: group.id,
  44. label: group.name_last,
  45. disabled: false,
  46. children: [
  47. {
  48. value: level1_group.id,
  49. label: level1_group.name_last,
  50. disabled: true,
  51. children: [
  52. {
  53. value: level2_group.id,
  54. label: level2_group.name_last,
  55. disabled: false
  56. }
  57. ]
  58. },
  59. {
  60. value: level1_group2.id,
  61. label: level1_group2.name_last,
  62. disabled: false,
  63. },
  64. ]
  65. },
  66. {
  67. value: group2.id,
  68. label: group2.name_last,
  69. disabled: false
  70. }
  71. ]
  72. end
  73. let(:expected_result) do
  74. {
  75. 'group_id' => {
  76. options: expected_group_options
  77. },
  78. 'state_id' => {
  79. options: Ticket::State.by_category(:viewable_agent_new).reorder(name: :asc).map { |state| { value: state.id, label: state.name } },
  80. },
  81. 'priority_id' => {
  82. options: Ticket::Priority.where(active: true).reorder(id: :asc).map { |priority| { value: priority.id, label: priority.name } },
  83. },
  84. }
  85. end
  86. context 'when resolving' do
  87. it 'returns all resolved relation fields with correct value + label' do
  88. expect(resolved_result.resolve).to include(
  89. 'group_id' => include(expected_result['group_id']),
  90. 'state_id' => include(expected_result['state_id']),
  91. 'priority_id' => include(expected_result['priority_id']),
  92. )
  93. end
  94. context 'with only one group for user' do
  95. let(:user) { create(:agent, groups: [level2_group]) }
  96. it 'returns group_id as integer' do
  97. expect(resolved_result.resolve).to include(
  98. 'group_id' => include(value: level2_group.id)
  99. )
  100. end
  101. end
  102. context 'when no permission on all parent groups' do
  103. let(:user) { create(:agent, groups: [group2, level2_group]) }
  104. let(:expected_group_options) do
  105. [
  106. {
  107. value: group.id,
  108. label: group.name_last,
  109. disabled: true,
  110. children: [
  111. {
  112. value: level1_group.id,
  113. label: level1_group.name_last,
  114. disabled: true,
  115. children: [
  116. {
  117. value: level2_group.id,
  118. label: level2_group.name_last,
  119. disabled: false
  120. }
  121. ]
  122. },
  123. ]
  124. },
  125. {
  126. value: group2.id,
  127. label: group2.name_last,
  128. disabled: false
  129. }
  130. ]
  131. end
  132. it 'returns current group options' do
  133. expect(resolved_result.resolve).to include(
  134. 'group_id' => include(expected_result['group_id']),
  135. )
  136. end
  137. end
  138. context 'when group_id is given in data' do
  139. let(:data) { { 'group_id' => group.id } }
  140. it 'returns no new value for group' do
  141. expect(resolved_result.resolve).to not_include(
  142. 'group_id' => include(value: group.id)
  143. )
  144. end
  145. end
  146. context 'with different default priority' do
  147. before do
  148. Ticket::Priority.find(1).update!(default_create: true)
  149. end
  150. it 'returns initial value for priority_id' do
  151. expect(resolved_result.resolve).to include(
  152. 'priority_id' => include(initialValue: 1)
  153. )
  154. end
  155. end
  156. end
  157. include_examples 'FormUpdater::ChecksCoreWorkflow', object_name: 'Ticket'
  158. include_examples 'HasSecurityOptions', type: 'create'
  159. end