assets_spec.rb 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe 'Assets', db_strategy: :reset, type: :system do
  4. let(:organization) { create(:organization, note: 'hello') }
  5. let(:customer) { create(:customer, organization: organization, note: 'hello', last_login: Time.zone.now, login_failed: 1) }
  6. let(:agent) do
  7. user = create(:agent, groups: [Group.find_by(name: 'Users')], note: 'hello', last_login: Time.zone.now, login_failed: 1)
  8. create(:twitter_authorization, user: user)
  9. user
  10. end
  11. let(:admin) { create(:admin, groups: [Group.find_by(name: 'Users')], note: 'hello', last_login: Time.zone.now, login_failed: 1) }
  12. let(:ticket) { create(:ticket, owner: agent, group: Group.find_by(name: 'Users'), customer: customer, created_by: admin) }
  13. context 'groups' do
  14. before do
  15. visit '/'
  16. end
  17. def group_note
  18. page.execute_script('return App.Group.first().note')
  19. end
  20. def group_name_last
  21. page.execute_script('return App.Group.first().name_last')
  22. end
  23. describe 'when customer', authenticated_as: :customer do
  24. it 'can not access group details' do
  25. expect(group_note).to be_nil
  26. end
  27. it 'can access name_last attribute (#4981)' do
  28. expect(group_name_last).not_to be_nil
  29. end
  30. end
  31. describe 'when agent', authenticated_as: :agent do
  32. it 'can access group details' do
  33. expect(group_note).not_to be_nil
  34. end
  35. end
  36. describe 'when admin', authenticated_as: :admin do
  37. it 'can access group details' do
  38. expect(group_note).not_to be_nil
  39. end
  40. end
  41. end
  42. context 'organizations' do
  43. def organization_note
  44. page.execute_script("return App.Organization.find(#{organization.id}).note")
  45. end
  46. before do
  47. visit "#ticket/zoom/#{ticket.id}"
  48. end
  49. describe 'when customer', authenticated_as: :customer do
  50. it 'can not access organization details' do
  51. expect(organization_note).to be_nil
  52. end
  53. end
  54. describe 'when agent', authenticated_as: :agent do
  55. it 'can access organization details' do
  56. expect(organization_note).not_to be_nil
  57. end
  58. end
  59. describe 'when admin', authenticated_as: :admin do
  60. it 'can access organization details' do
  61. expect(organization_note).not_to be_nil
  62. end
  63. end
  64. end
  65. context 'roles' do
  66. def role_name
  67. page.execute_script('return App.Role.first().name')
  68. end
  69. before do
  70. visit "#ticket/zoom/#{ticket.id}"
  71. end
  72. describe 'when customer', authenticated_as: :customer do
  73. it 'can not access role details' do
  74. expect(role_name).to eq('Role_1')
  75. end
  76. end
  77. describe 'when agent', authenticated_as: :agent do
  78. it 'can access role details' do
  79. expect(role_name).not_to eq('Role_1')
  80. end
  81. end
  82. describe 'when admin', authenticated_as: :admin do
  83. it 'can access role details' do
  84. expect(role_name).not_to eq('Role_1')
  85. end
  86. end
  87. end
  88. context 'users' do
  89. def customer_email
  90. page.execute_script("return App.User.find(#{customer.id}).email")
  91. end
  92. def customer_note
  93. page.execute_script("return App.User.find(#{customer.id}).note")
  94. end
  95. def customer_available_group_count
  96. page.execute_script('return App.Group.all().length')
  97. end
  98. def owner_firstname
  99. page.execute_script("return App.User.find(#{agent.id}).firstname")
  100. end
  101. def owner_accounts
  102. page.execute_script("return App.User.find(#{agent.id}).accounts")
  103. end
  104. def owner_details
  105. [
  106. page.execute_script("return App.User.find(#{agent.id}).last_login"),
  107. page.execute_script("return App.User.find(#{agent.id}).login_failed"),
  108. page.execute_script("return App.User.find(#{agent.id}).email"),
  109. page.execute_script("return App.User.find(#{agent.id}).note"),
  110. ].compact
  111. end
  112. describe 'when customer', authenticated_as: :customer do
  113. let(:agent_groups) { create_list(:group, 3) }
  114. context 'when zoom' do
  115. before do
  116. visit "#ticket/zoom/#{ticket.id}"
  117. end
  118. it 'can access customer email' do
  119. expect(customer_email).not_to be_nil
  120. end
  121. it 'can not access customer note' do
  122. expect(customer_note).to be_nil
  123. end
  124. it 'can not access owner details' do
  125. expect(owner_details).to be_empty
  126. end
  127. it 'can access owner firstname' do
  128. expect(owner_firstname).not_to be_nil
  129. end
  130. it 'can access not owner owner accounts' do
  131. expect(owner_accounts).to be_nil
  132. end
  133. context 'when groups are restricted', authenticated_as: :authenticate do
  134. def authenticate
  135. agent_groups
  136. Setting.set('customer_ticket_create_group_ids', [Group.first.id])
  137. customer
  138. end
  139. it 'can not access agent groups' do
  140. expect(customer_available_group_count).to eq(1)
  141. end
  142. context 'when there are old tickets for the customer', authenticated_as: :authenticate do
  143. def authenticate
  144. agent_groups
  145. create(:ticket, group: agent_groups.first, customer: customer)
  146. Setting.set('customer_ticket_create_group_ids', [Group.first.id])
  147. customer
  148. end
  149. it 'can access one of the agent groups' do
  150. expect(customer_available_group_count).to eq(2)
  151. end
  152. end
  153. end
  154. end
  155. context 'when ticket create' do
  156. before do
  157. visit '#customer_ticket_new'
  158. end
  159. context 'when there are no customer groups', authenticated_as: :authenticate do
  160. def authenticate
  161. agent_groups
  162. Setting.set('customer_ticket_create_group_ids', [])
  163. customer
  164. end
  165. it 'can create tickets in all groups' do
  166. expect(customer_available_group_count).to eq(5)
  167. end
  168. end
  169. context 'when there are customer groups', authenticated_as: :authenticate do
  170. def authenticate
  171. agent_groups
  172. Setting.set('customer_ticket_create_group_ids', [Group.first.id])
  173. customer
  174. end
  175. it 'can create tickets in configured groups' do
  176. expect(customer_available_group_count).to eq(1)
  177. end
  178. end
  179. end
  180. end
  181. describe 'when agent', authenticated_as: :agent do
  182. before do
  183. visit "#ticket/zoom/#{ticket.id}"
  184. end
  185. it 'can access customer email' do
  186. expect(customer_email).not_to be_nil
  187. end
  188. it 'can access customer note' do
  189. expect(customer_note).not_to be_nil
  190. end
  191. it 'can access owner details' do
  192. expect(owner_details).not_to be_empty
  193. end
  194. it 'can access owner firstname' do
  195. expect(owner_firstname).not_to be_nil
  196. end
  197. it 'can access owner owner accounts' do
  198. expect(owner_accounts).not_to be_nil
  199. end
  200. end
  201. describe 'when admin', authenticated_as: :admin do
  202. before do
  203. visit "#ticket/zoom/#{ticket.id}"
  204. end
  205. it 'can access customer email' do
  206. expect(customer_email).not_to be_nil
  207. end
  208. it 'can access customer note' do
  209. expect(customer_note).not_to be_nil
  210. end
  211. it 'can access owner details' do
  212. expect(owner_details).not_to be_empty
  213. end
  214. it 'can access owner firstname' do
  215. expect(owner_firstname).not_to be_nil
  216. end
  217. it 'can access owner owner accounts' do
  218. expect(owner_accounts).not_to be_nil
  219. end
  220. end
  221. end
  222. end