overviews_spec.rb 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe 'Manage > Overviews', type: :system do
  4. let(:group) { create(:group) }
  5. let(:owner_one) { create(:agent, groups: [group]) }
  6. let(:owner_two) { create(:agent, groups: [group]) }
  7. let(:owner_three) { create(:agent, groups: [group]) }
  8. let(:customer_one) { create(:customer, organization_id: organization_one.id, groups: [group]) }
  9. let(:customer_two) { create(:customer, organization_id: organization_two.id, groups: [group]) }
  10. let(:customer_three) { create(:customer, organization_id: organization_three.id, groups: [group]) }
  11. let(:organization_one) { create(:organization, name: 'Test Org One') }
  12. let(:organization_two) { create(:organization, name: 'Test Org Two') }
  13. let(:organization_three) { create(:organization, name: 'Test Org Three') }
  14. let!(:ticket_one) do
  15. create(:ticket,
  16. title: 'Test Ticket One',
  17. group: group,
  18. owner_id: owner_one.id,
  19. customer_id: customer_one.id)
  20. end
  21. let!(:ticket_two) do
  22. create(:ticket,
  23. title: 'Test Ticket Two',
  24. group: group,
  25. owner_id: owner_two.id,
  26. customer_id: customer_two.id)
  27. end
  28. let!(:ticket_three) do
  29. create(:ticket,
  30. title: 'Test Ticket Three',
  31. group: group,
  32. owner_id: owner_three.id,
  33. customer_id: customer_three.id)
  34. end
  35. let(:overview) { create(:overview, condition: condition) }
  36. shared_examples 'previewing the correct ticket for single selected object' do
  37. before do
  38. wait.until { page.has_css?('.js-previewLoader.hide', visible: :all) }
  39. scroll_into_view('.ticket_selector')
  40. end
  41. context "with 'is' operator" do
  42. let(:operator) { 'is' }
  43. it 'shows selected customer ticket' do
  44. within '.js-preview .js-tableBody' do
  45. expect(page).to have_selector('tr.item', text: ticket_one.title)
  46. end
  47. end
  48. it 'does not show customer ticket that is not selected' do
  49. within '.js-preview .js-tableBody' do
  50. expect(page).to have_no_selector('tr.item', text: ticket_two.title)
  51. expect(page).to have_no_selector('tr.item', text: ticket_three.title)
  52. end
  53. end
  54. end
  55. context "with 'is not' operator" do
  56. let(:operator) { 'is not' }
  57. it 'does not show selected customer ticket' do
  58. within '.js-preview .js-tableBody' do
  59. expect(page).to have_no_selector('tr.item', text: ticket_one.title)
  60. end
  61. end
  62. it 'does not show customer ticket that is not selected' do
  63. within '.js-preview .js-tableBody' do
  64. expect(page).to have_selector('tr.item', text: ticket_two.title)
  65. expect(page).to have_selector('tr.item', text: ticket_three.title)
  66. end
  67. end
  68. end
  69. end
  70. shared_examples 'previewing the correct ticket for multiple selected objects' do
  71. before do
  72. wait.until { page.has_css?('.js-previewLoader.hide', visible: :all) }
  73. scroll_into_view('.ticket_selector')
  74. end
  75. context "with 'is' operator" do
  76. let(:operator) { 'is' }
  77. it 'shows selected customer ticket' do
  78. within '.js-preview .js-tableBody' do
  79. expect(page).to have_selector('tr.item', text: ticket_one.title)
  80. expect(page).to have_selector('tr.item', text: ticket_two.title)
  81. end
  82. end
  83. it 'does not show customer ticket that is not selected' do
  84. within '.js-preview .js-tableBody' do
  85. expect(page).to have_no_selector('tr.item', text: ticket_three.title)
  86. end
  87. end
  88. end
  89. context "with 'is not' operator" do
  90. let(:operator) { 'is not' }
  91. it 'does not show selected customer ticket' do
  92. within '.js-preview .js-tableBody' do
  93. expect(page).to have_no_selector('tr.item', text: ticket_one.title)
  94. expect(page).to have_no_selector('tr.item', text: ticket_two.title)
  95. end
  96. end
  97. it 'does not show customer ticket that is not selected' do
  98. within '.js-preview .js-tableBody' do
  99. expect(page).to have_selector('tr.item', text: ticket_three.title)
  100. end
  101. end
  102. end
  103. end
  104. context 'conditions for shown tickets' do
  105. context 'for customer' do
  106. context 'for new overview' do
  107. before do
  108. visit '/#manage/overviews'
  109. click_on 'New Overview'
  110. modal_ready
  111. within '.ticket_selector' do
  112. ticket_select = find('.js-attributeSelector select .js-ticket')
  113. ticket_select.select 'Customer'
  114. select operator, from: 'condition::ticket.customer_id::operator'
  115. select 'specific', from: 'condition::ticket.customer_id::pre_condition'
  116. end
  117. end
  118. context 'when single customer is selected' do
  119. before do
  120. within '.ticket_selector' do
  121. fill_in 'condition::ticket.customer_id::value_completion', with: customer_one.firstname
  122. find("[data-object-id='#{customer_one.id}'].js-object").click
  123. end
  124. end
  125. it_behaves_like 'previewing the correct ticket for single selected object'
  126. end
  127. context 'when multiple customer is selected' do
  128. before do
  129. within '.ticket_selector' do
  130. fill_in 'condition::ticket.customer_id::value_completion', with: customer_one.firstname
  131. find("[data-object-id='#{customer_one.id}'].js-object").click
  132. fill_in 'condition::ticket.customer_id::value_completion', with: customer_two.firstname
  133. find("[data-object-id='#{customer_two.id}'].js-object").click
  134. end
  135. end
  136. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  137. end
  138. end
  139. context 'for existing overview' do
  140. let(:condition) do
  141. { 'ticket.customer_id' => {
  142. operator: operator,
  143. pre_condition: 'specific',
  144. value: condition_value
  145. } }
  146. end
  147. before do
  148. overview
  149. visit '/#manage/overviews'
  150. within '.table-overview .js-tableBody' do
  151. find("tr[data-id='#{overview.id}'] td.table-draggable").click
  152. end
  153. within '.ticket_selector' do
  154. # trigger the preview
  155. fill_in 'condition::ticket.customer_id::value_completion', with: customer_one.firstname
  156. end
  157. end
  158. context 'when single customer exists' do
  159. let(:condition_value) { customer_one.id }
  160. it_behaves_like 'previewing the correct ticket for single selected object'
  161. end
  162. context 'when multiple customer exists' do
  163. let(:condition_value) { [customer_one.id, customer_two.id] }
  164. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  165. end
  166. end
  167. end
  168. context 'for owner' do
  169. context 'for new overview' do
  170. before do
  171. visit '/#manage/overviews'
  172. click_on 'New Overview'
  173. modal_ready
  174. within '.ticket_selector' do
  175. ticket_select = find('.js-attributeSelector select .js-ticket')
  176. ticket_select.select 'Owner'
  177. select operator, from: 'condition::ticket.owner_id::operator'
  178. select 'specific', from: 'condition::ticket.owner_id::pre_condition'
  179. end
  180. end
  181. context 'when single owner is selected' do
  182. before do
  183. within '.ticket_selector' do
  184. fill_in 'condition::ticket.owner_id::value_completion', with: owner_one.firstname
  185. first('.recipientList-entry.js-object').click
  186. end
  187. end
  188. it_behaves_like 'previewing the correct ticket for single selected object'
  189. end
  190. context 'when multiple owner is selected' do
  191. before do
  192. within '.ticket_selector' do
  193. fill_in 'condition::ticket.owner_id::value_completion', with: owner_one.firstname
  194. find("[data-object-id='#{owner_one.id}'].js-object").click
  195. fill_in 'condition::ticket.owner_id::value_completion', with: owner_two.firstname
  196. find("[data-object-id='#{owner_two.id}'].js-object").click
  197. end
  198. end
  199. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  200. end
  201. end
  202. context 'for existing overview' do
  203. let(:condition) do
  204. { 'ticket.owner_id' => {
  205. operator: operator,
  206. pre_condition: 'specific',
  207. value: condition_value
  208. } }
  209. end
  210. before do
  211. overview
  212. visit '/#manage/overviews'
  213. within '.table-overview .js-tableBody' do
  214. find("tr[data-id='#{overview.id}'] td.table-draggable").click
  215. end
  216. within '.ticket_selector' do
  217. # trigger the preview
  218. fill_in 'condition::ticket.owner_id::value_completion', with: owner_one.firstname
  219. end
  220. end
  221. context 'when single owner exists' do
  222. let(:condition_value) { owner_one.id }
  223. it_behaves_like 'previewing the correct ticket for single selected object'
  224. end
  225. context 'when multiple owner exists' do
  226. let(:condition_value) { [owner_one.id, owner_two.id] }
  227. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  228. end
  229. end
  230. end
  231. context 'for organization' do
  232. # let(:condition) do
  233. # { 'ticket.organization_id' => {
  234. # operator: operator,
  235. # pre_condition: 'specific',
  236. # value: [101, 102, 103]
  237. # } }
  238. # end
  239. context 'for new overview' do
  240. before do
  241. visit '/#manage/overviews'
  242. click_on 'New Overview'
  243. modal_ready
  244. within '.ticket_selector' do
  245. ticket_select = find('.js-attributeSelector select .js-ticket')
  246. ticket_select.select 'Organization'
  247. select operator, from: 'condition::ticket.organization_id::operator'
  248. select 'specific', from: 'condition::ticket.organization_id::pre_condition'
  249. end
  250. end
  251. context 'when single organization is selected' do
  252. before do
  253. within '.ticket_selector' do
  254. fill_in 'condition::ticket.organization_id::value_completion', with: organization_one.name
  255. find(".js-optionsList [data-value='#{organization_one.id}'].js-option").click
  256. end
  257. end
  258. it_behaves_like 'previewing the correct ticket for single selected object'
  259. end
  260. context 'when multiple organization is selected' do
  261. before do
  262. within '.ticket_selector' do
  263. fill_in 'condition::ticket.organization_id::value_completion', with: organization_one.name
  264. find(".js-optionsList [data-value='#{organization_one.id}'].js-option").click
  265. fill_in 'condition::ticket.organization_id::value_completion', with: organization_two.name
  266. find(".js-optionsList [data-value='#{organization_two.id}'].js-option").click
  267. end
  268. end
  269. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  270. end
  271. end
  272. context 'for existing overview' do
  273. let(:condition) do
  274. { 'ticket.organization_id' => {
  275. operator: operator,
  276. pre_condition: 'specific',
  277. value: condition_value
  278. } }
  279. end
  280. before do
  281. overview
  282. visit '/#manage/overviews'
  283. within '.table-overview .js-tableBody' do
  284. find("tr[data-id='#{overview.id}'] td.table-draggable").click
  285. end
  286. within '.ticket_selector' do
  287. # trigger the preview
  288. fill_in 'condition::ticket.organization_id::value_completion', with: organization_one.name
  289. end
  290. end
  291. context 'when single organization exists' do
  292. let(:condition_value) { organization_one.id }
  293. it_behaves_like 'previewing the correct ticket for single selected object'
  294. end
  295. context 'when multiple organization exists' do
  296. let(:condition_value) { [organization_one.id, organization_two.id] }
  297. it_behaves_like 'previewing the correct ticket for multiple selected objects'
  298. end
  299. end
  300. end
  301. end
  302. end