search_controller_test.rb 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. require 'test_helper'
  2. class SearchControllerTest < ActionDispatch::IntegrationTest
  3. include SearchindexHelper
  4. setup do
  5. # set current user
  6. UserInfo.current_user_id = 1
  7. # set accept header
  8. @headers = { 'ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json' }
  9. # create agent
  10. roles = Role.where(name: %w[Admin Agent])
  11. groups = Group.all
  12. @admin = User.create!(
  13. login: 'search-admin',
  14. firstname: 'Search',
  15. lastname: 'Admin',
  16. email: 'search-admin@example.com',
  17. password: 'adminpw',
  18. active: true,
  19. roles: roles,
  20. groups: groups,
  21. )
  22. # create agent
  23. roles = Role.where(name: 'Agent')
  24. @agent = User.create!(
  25. login: 'search-agent@example.com',
  26. firstname: 'Search 1234',
  27. lastname: 'Agent',
  28. email: 'search-agent@example.com',
  29. password: 'agentpw',
  30. active: true,
  31. roles: roles,
  32. groups: groups,
  33. )
  34. # create customer without org
  35. roles = Role.where(name: 'Customer')
  36. @customer_without_org = User.create!(
  37. login: 'search-customer1@example.com',
  38. firstname: 'Search',
  39. lastname: 'Customer1',
  40. email: 'search-customer1@example.com',
  41. password: 'customer1pw',
  42. active: true,
  43. roles: roles,
  44. )
  45. # create orgs
  46. @organization = Organization.create!(
  47. name: 'Rest Org',
  48. )
  49. @organization2 = Organization.create!(
  50. name: 'Rest Org #2',
  51. )
  52. @organization3 = Organization.create!(
  53. name: 'Rest Org #3',
  54. )
  55. # create customer with org
  56. @customer_with_org2 = User.create!(
  57. login: 'search-customer2@example.com',
  58. firstname: 'Search',
  59. lastname: 'Customer2',
  60. email: 'search-customer2@example.com',
  61. password: 'customer2pw',
  62. active: true,
  63. roles: roles,
  64. organization_id: @organization.id,
  65. )
  66. @customer_with_org3 = User.create!(
  67. login: 'search-customer3@example.com',
  68. firstname: 'Search',
  69. lastname: 'Customer3',
  70. email: 'search-customer3@example.com',
  71. password: 'customer3pw',
  72. active: true,
  73. roles: roles,
  74. organization_id: @organization.id,
  75. )
  76. @ticket1 = Ticket.create!(
  77. title: 'test 1234-1',
  78. group: Group.lookup(name: 'Users'),
  79. customer_id: @customer_without_org.id,
  80. state: Ticket::State.lookup(name: 'new'),
  81. priority: Ticket::Priority.lookup(name: '2 normal'),
  82. )
  83. @article1 = Ticket::Article.create!(
  84. ticket_id: @ticket1.id,
  85. from: 'some_sender1@example.com',
  86. to: 'some_recipient1@example.com',
  87. subject: 'some subject1',
  88. message_id: 'some@id',
  89. body: 'some message1',
  90. internal: false,
  91. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  92. type: Ticket::Article::Type.where(name: 'email').first,
  93. )
  94. travel 1.second
  95. @ticket2 = Ticket.create!(
  96. title: 'test 1234-2',
  97. group: Group.lookup(name: 'Users'),
  98. customer_id: @customer_with_org2.id,
  99. state: Ticket::State.lookup(name: 'new'),
  100. priority: Ticket::Priority.lookup(name: '2 normal'),
  101. )
  102. @article2 = Ticket::Article.create!(
  103. ticket_id: @ticket2.id,
  104. from: 'some_sender2@example.com',
  105. to: 'some_recipient2@example.com',
  106. subject: 'some subject2',
  107. message_id: 'some@id',
  108. body: 'some message2',
  109. internal: false,
  110. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  111. type: Ticket::Article::Type.where(name: 'email').first,
  112. )
  113. travel 1.second
  114. @ticket3 = Ticket.create!(
  115. title: 'test 1234-2',
  116. group: Group.lookup(name: 'Users'),
  117. customer_id: @customer_with_org3.id,
  118. state: Ticket::State.lookup(name: 'new'),
  119. priority: Ticket::Priority.lookup(name: '2 normal'),
  120. )
  121. @article3 = Ticket::Article.create!(
  122. ticket_id: @ticket3.id,
  123. from: 'some_sender3@example.com',
  124. to: 'some_recipient3@example.com',
  125. subject: 'some subject3',
  126. message_id: 'some@id',
  127. body: 'some message3',
  128. internal: false,
  129. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  130. type: Ticket::Article::Type.where(name: 'email').first,
  131. )
  132. configure_elasticsearch do
  133. travel 1.minute
  134. rebuild_searchindex
  135. # execute background jobs
  136. Scheduler.worker(true)
  137. sleep 6
  138. end
  139. end
  140. test 'settings index with nobody' do
  141. params = {
  142. query: 'test 1234',
  143. limit: 2,
  144. }
  145. post '/api/v1/search/ticket', params: params.to_json, headers: @headers
  146. assert_response(401)
  147. result = JSON.parse(@response.body)
  148. assert_equal(Hash, result.class)
  149. assert_not(result.blank?)
  150. assert_equal('authentication failed', result['error'])
  151. post '/api/v1/search/user', params: params.to_json, headers: @headers
  152. assert_response(401)
  153. result = JSON.parse(@response.body)
  154. assert_equal(Hash, result.class)
  155. assert_not(result.blank?)
  156. assert_equal('authentication failed', result['error'])
  157. post '/api/v1/search', params: params.to_json, headers: @headers
  158. assert_response(401)
  159. result = JSON.parse(@response.body)
  160. assert_equal(Hash, result.class)
  161. assert_not(result.blank?)
  162. assert_equal('authentication failed', result['error'])
  163. end
  164. test 'settings index with admin' do
  165. credentials = ActionController::HttpAuthentication::Basic.encode_credentials('search-admin@example.com', 'adminpw')
  166. params = {
  167. query: '1234*',
  168. limit: 1,
  169. }
  170. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  171. assert_response(200)
  172. result = JSON.parse(@response.body)
  173. assert_equal(Hash, result.class)
  174. assert(result)
  175. assert_equal('Ticket', result['result'][0]['type'])
  176. assert_equal(@ticket3.id, result['result'][0]['id'])
  177. assert_equal('User', result['result'][1]['type'])
  178. assert_equal(@agent.id, result['result'][1]['id'])
  179. assert_not(result['result'][2])
  180. params = {
  181. query: '1234*',
  182. limit: 10,
  183. }
  184. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  185. assert_response(200)
  186. result = JSON.parse(@response.body)
  187. assert_equal(Hash, result.class)
  188. assert(result)
  189. assert_equal('Ticket', result['result'][0]['type'])
  190. assert_equal(@ticket3.id, result['result'][0]['id'])
  191. assert_equal('Ticket', result['result'][1]['type'])
  192. assert_equal(@ticket2.id, result['result'][1]['id'])
  193. assert_equal('Ticket', result['result'][2]['type'])
  194. assert_equal(@ticket1.id, result['result'][2]['id'])
  195. assert_equal('User', result['result'][3]['type'])
  196. assert_equal(@agent.id, result['result'][3]['id'])
  197. assert_not(result['result'][4])
  198. params = {
  199. query: '1234*',
  200. limit: 10,
  201. }
  202. post '/api/v1/search/ticket', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  203. assert_response(200)
  204. result = JSON.parse(@response.body)
  205. assert_equal(Hash, result.class)
  206. assert(result)
  207. assert_equal('Ticket', result['result'][0]['type'])
  208. assert_equal(@ticket3.id, result['result'][0]['id'])
  209. assert_equal('Ticket', result['result'][1]['type'])
  210. assert_equal(@ticket2.id, result['result'][1]['id'])
  211. assert_equal('Ticket', result['result'][2]['type'])
  212. assert_equal(@ticket1.id, result['result'][2]['id'])
  213. assert_not(result['result'][3])
  214. params = {
  215. query: '1234*',
  216. limit: 10,
  217. }
  218. post '/api/v1/search/user', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  219. assert_response(200)
  220. result = JSON.parse(@response.body)
  221. assert_equal(Hash, result.class)
  222. assert_equal('User', result['result'][0]['type'])
  223. assert_equal(@agent.id, result['result'][0]['id'])
  224. assert_not(result['result'][1])
  225. end
  226. test 'settings index with agent' do
  227. credentials = ActionController::HttpAuthentication::Basic.encode_credentials('search-agent@example.com', 'agentpw')
  228. params = {
  229. query: '1234*',
  230. limit: 1,
  231. }
  232. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  233. assert_response(200)
  234. result = JSON.parse(@response.body)
  235. assert_equal(Hash, result.class)
  236. assert(result)
  237. assert_equal('Ticket', result['result'][0]['type'])
  238. assert_equal(@ticket3.id, result['result'][0]['id'])
  239. assert_equal('User', result['result'][1]['type'])
  240. assert_equal(@agent.id, result['result'][1]['id'])
  241. assert_not(result['result'][2])
  242. params = {
  243. query: '1234*',
  244. limit: 10,
  245. }
  246. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  247. assert_response(200)
  248. result = JSON.parse(@response.body)
  249. assert_equal(Hash, result.class)
  250. assert(result)
  251. assert_equal('Ticket', result['result'][0]['type'])
  252. assert_equal(@ticket3.id, result['result'][0]['id'])
  253. assert_equal('Ticket', result['result'][1]['type'])
  254. assert_equal(@ticket2.id, result['result'][1]['id'])
  255. assert_equal('Ticket', result['result'][2]['type'])
  256. assert_equal(@ticket1.id, result['result'][2]['id'])
  257. assert_equal('User', result['result'][3]['type'])
  258. assert_equal(@agent.id, result['result'][3]['id'])
  259. assert_not(result['result'][4])
  260. params = {
  261. query: '1234*',
  262. limit: 10,
  263. }
  264. post '/api/v1/search/ticket', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  265. assert_response(200)
  266. result = JSON.parse(@response.body)
  267. assert_equal(Hash, result.class)
  268. assert(result)
  269. assert_equal('Ticket', result['result'][0]['type'])
  270. assert_equal(@ticket3.id, result['result'][0]['id'])
  271. assert_equal('Ticket', result['result'][1]['type'])
  272. assert_equal(@ticket2.id, result['result'][1]['id'])
  273. assert_equal('Ticket', result['result'][2]['type'])
  274. assert_equal(@ticket1.id, result['result'][2]['id'])
  275. assert_not(result['result'][3])
  276. params = {
  277. query: '1234*',
  278. limit: 10,
  279. }
  280. post '/api/v1/search/user', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  281. assert_response(200)
  282. result = JSON.parse(@response.body)
  283. assert_equal(Hash, result.class)
  284. assert_equal('User', result['result'][0]['type'])
  285. assert_equal(@agent.id, result['result'][0]['id'])
  286. assert_not(result['result'][1])
  287. end
  288. test 'settings index with customer 1' do
  289. credentials = ActionController::HttpAuthentication::Basic.encode_credentials('search-customer1@example.com', 'customer1pw')
  290. params = {
  291. query: '1234*',
  292. limit: 10,
  293. }
  294. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  295. assert_response(200)
  296. result = JSON.parse(@response.body)
  297. assert_equal(Hash, result.class)
  298. assert(result)
  299. assert_equal('Ticket', result['result'][0]['type'])
  300. assert_equal(@ticket1.id, result['result'][0]['id'])
  301. assert_not(result['result'][1])
  302. params = {
  303. query: '1234*',
  304. limit: 10,
  305. }
  306. post '/api/v1/search/ticket', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  307. assert_response(200)
  308. result = JSON.parse(@response.body)
  309. assert_equal(Hash, result.class)
  310. assert(result)
  311. assert_equal('Ticket', result['result'][0]['type'])
  312. assert_equal(@ticket1.id, result['result'][0]['id'])
  313. assert_not(result['result'][1])
  314. params = {
  315. query: '1234*',
  316. limit: 10,
  317. }
  318. post '/api/v1/search/user', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  319. assert_response(200)
  320. result = JSON.parse(@response.body)
  321. assert_equal(Hash, result.class)
  322. assert_not(result['result'][0])
  323. end
  324. test 'settings index with customer 2' do
  325. credentials = ActionController::HttpAuthentication::Basic.encode_credentials('search-customer2@example.com', 'customer2pw')
  326. params = {
  327. query: '1234*',
  328. limit: 10,
  329. }
  330. post '/api/v1/search', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  331. assert_response(200)
  332. result = JSON.parse(@response.body)
  333. assert_equal(Hash, result.class)
  334. assert(result)
  335. assert_equal('Ticket', result['result'][0]['type'])
  336. assert_equal(@ticket3.id, result['result'][0]['id'])
  337. assert_equal('Ticket', result['result'][1]['type'])
  338. assert_equal(@ticket2.id, result['result'][1]['id'])
  339. assert_not(result['result'][2])
  340. params = {
  341. query: '1234*',
  342. limit: 10,
  343. }
  344. post '/api/v1/search/ticket', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  345. assert_response(200)
  346. result = JSON.parse(@response.body)
  347. assert_equal(Hash, result.class)
  348. assert(result)
  349. assert_equal('Ticket', result['result'][0]['type'])
  350. assert_equal(@ticket3.id, result['result'][0]['id'])
  351. assert_equal('Ticket', result['result'][1]['type'])
  352. assert_equal(@ticket2.id, result['result'][1]['id'])
  353. assert_not(result['result'][2])
  354. params = {
  355. query: '1234*',
  356. limit: 10,
  357. }
  358. post '/api/v1/search/user', params: params.to_json, headers: @headers.merge('Authorization' => credentials)
  359. assert_response(200)
  360. result = JSON.parse(@response.body)
  361. assert_equal(Hash, result.class)
  362. assert_not(result['result'][0])
  363. end
  364. end