checks_core_workflow_examples.rb 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. RSpec.shared_examples 'FormUpdater::ChecksCoreWorkflow' do |object_name:|
  3. let(:field_name) { SecureRandom.uuid }
  4. let(:screens) do
  5. {
  6. create_middle: {
  7. '-all-' => {
  8. shown: true,
  9. required: false,
  10. },
  11. },
  12. create: {
  13. '-all-' => {
  14. shown: true,
  15. required: false,
  16. },
  17. },
  18. edit: {
  19. '-all-' => {
  20. shown: true,
  21. required: false,
  22. },
  23. },
  24. }
  25. end
  26. let(:object_attribute_field_type) { :object_manager_attribute_text }
  27. let(:core_workflow_perform_field) { nil }
  28. let(:object_attribute) do
  29. create(object_attribute_field_type, object_name: object_name, name: field_name, display: field_name, screens: screens)
  30. end
  31. shared_examples 'resolve fields' do |expected_result:|
  32. it 'checks that mapping was correct' do
  33. result = resolved_result.resolve
  34. expect(result[field_name]).to include(expected_result)
  35. end
  36. end
  37. context 'when core workflow validation will be mapped', db_strategy: :reset do
  38. before do
  39. object_attribute
  40. ObjectManager::Attribute.migration_execute
  41. object_attribute.reload
  42. if core_workflow_perform_field
  43. create(:core_workflow,
  44. object: object_name,
  45. perform: {
  46. "#{object_name}.#{field_name}": core_workflow_perform_field,
  47. })
  48. end
  49. end
  50. context 'when field is visible' do
  51. let(:core_workflow_perform_field) do
  52. {
  53. operator: 'show',
  54. show: true
  55. }
  56. end
  57. include_examples 'resolve fields', expected_result: { show: true, hidden: false }
  58. end
  59. context 'when field should be hidden' do
  60. let(:core_workflow_perform_field) do
  61. {
  62. operator: 'hide',
  63. hide: true
  64. }
  65. end
  66. include_examples 'resolve fields', expected_result: { show: true, hidden: true }
  67. end
  68. context 'when field should be hidden it should not be required' do
  69. let(:core_workflow_perform_field) do
  70. {
  71. operator: %w[hide set_mandatory],
  72. hide: true,
  73. set_mandatory: true,
  74. }
  75. end
  76. include_examples 'resolve fields', expected_result: { show: true, hidden: true, required: false }
  77. end
  78. context 'when field should be removed' do
  79. let(:core_workflow_perform_field) do
  80. {
  81. operator: 'remove',
  82. remove: true,
  83. }
  84. end
  85. include_examples 'resolve fields', expected_result: { show: false }
  86. end
  87. context 'when field is not required' do
  88. let(:core_workflow_perform_field) do
  89. {
  90. operator: 'set_optional',
  91. set_optional: true
  92. }
  93. end
  94. include_examples 'resolve fields', expected_result: { required: false }
  95. end
  96. context 'when field is required' do
  97. let(:core_workflow_perform_field) do
  98. {
  99. operator: 'set_mandatory',
  100. set_mandatory: true
  101. }
  102. end
  103. include_examples 'resolve fields', expected_result: { required: true }
  104. end
  105. context 'when field is readonly' do
  106. let(:core_workflow_perform_field) do
  107. {
  108. operator: 'set_readonly',
  109. set_readonly: true
  110. }
  111. end
  112. include_examples 'resolve fields', expected_result: { disabled: true }
  113. end
  114. context 'when field is not readonly' do
  115. let(:core_workflow_perform_field) do
  116. {
  117. operator: 'unset_readonly',
  118. unset_readonly: true
  119. }
  120. end
  121. include_examples 'resolve fields', expected_result: { disabled: false }
  122. end
  123. context 'when field value should be changed' do
  124. context 'with a text field' do
  125. let(:core_workflow_perform_field) do
  126. {
  127. operator: 'fill_in',
  128. fill_in: 'hello'
  129. }
  130. end
  131. include_examples 'resolve fields', expected_result: { value: 'hello' }
  132. end
  133. context 'with a select field' do
  134. let(:object_attribute_field_type) { :object_manager_attribute_select }
  135. let(:core_workflow_perform_field) do
  136. {
  137. operator: 'select',
  138. select: 'key_3'
  139. }
  140. end
  141. include_examples 'resolve fields', expected_result: { value: 'key_3' }
  142. end
  143. end
  144. context 'when field options needs to be handled' do
  145. let(:object_attribute_field_type) { :object_manager_attribute_select }
  146. context 'when clearable should be present' do
  147. include_examples 'resolve fields', expected_result: { clearable: true }
  148. end
  149. context 'when select options are handled (without clearable)' do
  150. let(:core_workflow_perform_field) do
  151. {
  152. operator: 'set_fixed_to',
  153. set_fixed_to: %w[key_2 key_3],
  154. }
  155. end
  156. include_examples 'resolve fields', expected_result: {
  157. options: [
  158. {
  159. value: 'key_2',
  160. label: 'value_2',
  161. },
  162. {
  163. value: 'key_3',
  164. label: 'value_3',
  165. }
  166. ],
  167. clearable: false,
  168. rejectNonExistentValues: true
  169. }
  170. end
  171. context 'when multi select options are handled' do
  172. let(:object_attribute_field_type) { :object_manager_attribute_multiselect }
  173. let(:core_workflow_perform_field) do
  174. {
  175. operator: 'set_fixed_to',
  176. set_fixed_to: %w[key_2 key_3],
  177. }
  178. end
  179. include_examples 'resolve fields', expected_result: {
  180. options: [
  181. {
  182. value: 'key_2',
  183. label: 'value_2',
  184. },
  185. {
  186. value: 'key_3',
  187. label: 'value_3',
  188. }
  189. ],
  190. rejectNonExistentValues: true
  191. }
  192. end
  193. context 'when treeselect options are handled' do
  194. let(:object_attribute_field_type) { :object_manager_attribute_tree_select }
  195. let(:core_workflow_perform_field) do
  196. {
  197. operator: 'set_fixed_to',
  198. set_fixed_to: ['Incident::Hardware', 'Incident::Softwareproblem::CRM', 'Change request'],
  199. }
  200. end
  201. include_examples 'resolve fields', expected_result: {
  202. options: [
  203. {
  204. label: 'Incident',
  205. value: 'Incident',
  206. disabled: true,
  207. children: [
  208. {
  209. label: 'Hardware',
  210. value: 'Incident::Hardware',
  211. disabled: false,
  212. },
  213. {
  214. label: 'Softwareproblem',
  215. value: 'Incident::Softwareproblem',
  216. disabled: true,
  217. children: [
  218. {
  219. label: 'CRM',
  220. value: 'Incident::Softwareproblem::CRM',
  221. disabled: false,
  222. },
  223. ]
  224. }
  225. ]
  226. },
  227. {
  228. label: 'Change request',
  229. value: 'Change request',
  230. disabled: false,
  231. }
  232. ]
  233. }
  234. end
  235. context 'when multi treeselect options are handled' do
  236. let(:object_attribute_field_type) { :object_manager_attribute_multi_tree_select }
  237. let(:core_workflow_perform_field) do
  238. {
  239. operator: 'set_fixed_to',
  240. set_fixed_to: ['Incident::Hardware', 'Incident::Softwareproblem::CRM', 'Change request'],
  241. }
  242. end
  243. include_examples 'resolve fields', expected_result: {
  244. options: [
  245. {
  246. label: 'Incident',
  247. value: 'Incident',
  248. disabled: true,
  249. children: [
  250. {
  251. label: 'Hardware',
  252. value: 'Incident::Hardware',
  253. disabled: false,
  254. },
  255. {
  256. label: 'Softwareproblem',
  257. value: 'Incident::Softwareproblem',
  258. disabled: true,
  259. children: [
  260. {
  261. label: 'CRM',
  262. value: 'Incident::Softwareproblem::CRM',
  263. disabled: false,
  264. },
  265. ]
  266. }
  267. ]
  268. },
  269. {
  270. label: 'Change request',
  271. value: 'Change request',
  272. disabled: false,
  273. }
  274. ]
  275. }
  276. end
  277. context 'when boolean field is used' do
  278. let(:object_attribute_field_type) { :object_manager_attribute_boolean }
  279. include_examples 'resolve fields', expected_result: {
  280. options: [
  281. {
  282. label: 'yes',
  283. value: 'true',
  284. },
  285. {
  286. label: 'no',
  287. value: 'false',
  288. }
  289. ],
  290. }
  291. end
  292. end
  293. end
  294. end