assets_test.rb 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class AssetsTest < ActiveSupport::TestCase
  4. test 'user' do
  5. roles = Role.where(name: %w(Agent Admin))
  6. groups = Group.all
  7. org1 = Organization.create_or_update(
  8. name: 'some user org',
  9. updated_by_id: 1,
  10. created_by_id: 1,
  11. )
  12. user1 = User.create_or_update(
  13. login: 'assets1@example.org',
  14. firstname: 'assets1',
  15. lastname: 'assets1',
  16. email: 'assets1@example.org',
  17. password: 'some_pass',
  18. active: true,
  19. updated_by_id: 1,
  20. created_by_id: 1,
  21. organization_id: org1.id,
  22. roles: roles,
  23. groups: groups,
  24. )
  25. user2 = User.create_or_update(
  26. login: 'assets2@example.org',
  27. firstname: 'assets2',
  28. lastname: 'assets2',
  29. email: 'assets2@example.org',
  30. password: 'some_pass',
  31. active: true,
  32. updated_by_id: 1,
  33. created_by_id: 1,
  34. roles: roles,
  35. groups: groups,
  36. )
  37. user3 = User.create_or_update(
  38. login: 'assets3@example.org',
  39. firstname: 'assets3',
  40. lastname: 'assets3',
  41. email: 'assets3@example.org',
  42. password: 'some_pass',
  43. active: true,
  44. updated_by_id: user1.id,
  45. created_by_id: user2.id,
  46. roles: roles,
  47. groups: groups,
  48. )
  49. user3 = User.find(user3.id)
  50. assets = user3.assets({})
  51. org1 = Organization.find(org1.id)
  52. attributes = org1.attributes_with_association_ids
  53. attributes.delete('user_ids')
  54. assert( diff(attributes, assets[:Organization][org1.id]), 'check assets')
  55. user1 = User.find(user1.id)
  56. attributes = user1.attributes_with_association_ids
  57. attributes['accounts'] = {}
  58. attributes['password'] = ''
  59. attributes.delete('token_ids')
  60. attributes.delete('authorization_ids')
  61. assert( diff(attributes, assets[:User][user1.id]), 'check assets' )
  62. user2 = User.find(user2.id)
  63. attributes = user2.attributes_with_association_ids
  64. attributes['accounts'] = {}
  65. attributes['password'] = ''
  66. attributes.delete('token_ids')
  67. attributes.delete('authorization_ids')
  68. assert( diff(attributes, assets[:User][user2.id]), 'check assets' )
  69. user3 = User.find(user3.id)
  70. attributes = user3.attributes_with_association_ids
  71. attributes['accounts'] = {}
  72. attributes['password'] = ''
  73. attributes.delete('token_ids')
  74. attributes.delete('authorization_ids')
  75. assert( diff(attributes, assets[:User][user3.id]), 'check assets' )
  76. # touch org, check if user1 has changed
  77. travel 2.seconds
  78. org2 = Organization.find(org1.id)
  79. org2.note = "some note...#{rand(9_999_999_999_999)}"
  80. org2.save
  81. attributes = org2.attributes_with_association_ids
  82. attributes.delete('user_ids')
  83. assert( !diff(attributes, assets[:Organization][org2.id]), 'check assets' )
  84. user1_new = User.find(user1.id)
  85. attributes = user1_new.attributes_with_association_ids
  86. attributes['accounts'] = {}
  87. attributes['password'] = ''
  88. attributes.delete('token_ids')
  89. attributes.delete('authorization_ids')
  90. assert( !diff(attributes, assets[:User][user1_new.id]), 'check assets' )
  91. # check new assets lookup
  92. assets = user3.assets({})
  93. attributes = org2.attributes_with_association_ids
  94. attributes.delete('user_ids')
  95. assert( diff(attributes, assets[:Organization][org1.id]), 'check assets')
  96. user1 = User.find(user1.id)
  97. attributes = user1.attributes_with_association_ids
  98. attributes['accounts'] = {}
  99. attributes['password'] = ''
  100. attributes.delete('token_ids')
  101. attributes.delete('authorization_ids')
  102. assert( diff(attributes, assets[:User][user1.id]), 'check assets' )
  103. user2 = User.find(user2.id)
  104. attributes = user2.attributes_with_association_ids
  105. attributes['accounts'] = {}
  106. attributes['password'] = ''
  107. attributes.delete('token_ids')
  108. attributes.delete('authorization_ids')
  109. assert( diff(attributes, assets[:User][user2.id]), 'check assets' )
  110. user3 = User.find(user3.id)
  111. attributes = user3.attributes_with_association_ids
  112. attributes['accounts'] = {}
  113. attributes['password'] = ''
  114. attributes.delete('token_ids')
  115. attributes.delete('authorization_ids')
  116. assert( diff(attributes, assets[:User][user3.id]), 'check assets' )
  117. travel_back
  118. user1.destroy
  119. user2.destroy
  120. user3.destroy
  121. org1.destroy
  122. org2.destroy
  123. end
  124. test 'organization' do
  125. roles = Role.where( name: %w(Agent Admin) )
  126. admin1 = User.create_or_update(
  127. login: 'admin1@example.org',
  128. firstname: 'admin1',
  129. lastname: 'admin1',
  130. email: 'admin1@example.org',
  131. password: 'some_pass',
  132. active: true,
  133. updated_by_id: 1,
  134. created_by_id: 1,
  135. roles: roles,
  136. )
  137. roles = Role.where( name: %w(Customer) )
  138. org = Organization.create_or_update(
  139. name: 'some customer org',
  140. updated_by_id: admin1.id,
  141. created_by_id: 1,
  142. )
  143. user1 = User.create_or_update(
  144. login: 'assets1@example.org',
  145. firstname: 'assets1',
  146. lastname: 'assets1',
  147. email: 'assets1@example.org',
  148. password: 'some_pass',
  149. active: true,
  150. updated_by_id: 1,
  151. created_by_id: 1,
  152. organization_id: org.id,
  153. roles: roles,
  154. )
  155. user2 = User.create_or_update(
  156. login: 'assets2@example.org',
  157. firstname: 'assets2',
  158. lastname: 'assets2',
  159. email: 'assets2@example.org',
  160. password: 'some_pass',
  161. active: true,
  162. updated_by_id: 1,
  163. created_by_id: 1,
  164. organization_id: org.id,
  165. roles: roles,
  166. )
  167. user3 = User.create_or_update(
  168. login: 'assets3@example.org',
  169. firstname: 'assets3',
  170. lastname: 'assets3',
  171. email: 'assets3@example.org',
  172. password: 'some_pass',
  173. active: true,
  174. updated_by_id: user1.id,
  175. created_by_id: user2.id,
  176. roles: roles,
  177. )
  178. org = Organization.find(org.id)
  179. assets = org.assets({})
  180. attributes = org.attributes_with_association_ids
  181. attributes.delete('user_ids')
  182. assert( diff(attributes, assets[:Organization][org.id]), 'check assets' )
  183. admin1 = User.find(admin1.id)
  184. attributes = admin1.attributes_with_association_ids
  185. attributes['accounts'] = {}
  186. attributes['password'] = ''
  187. attributes.delete('token_ids')
  188. attributes.delete('authorization_ids')
  189. assert( diff(attributes, assets[:User][admin1.id]), 'check assets' )
  190. user1 = User.find(user1.id)
  191. attributes = user1.attributes_with_association_ids
  192. attributes['accounts'] = {}
  193. attributes['password'] = ''
  194. attributes.delete('token_ids')
  195. attributes.delete('authorization_ids')
  196. assert( diff(attributes, assets[:User][user1.id]), 'check assets' )
  197. user2 = User.find(user2.id)
  198. attributes = user2.attributes_with_association_ids
  199. attributes['accounts'] = {}
  200. attributes['password'] = ''
  201. attributes.delete('token_ids')
  202. attributes.delete('authorization_ids')
  203. assert( diff(attributes, assets[:User][user2.id]), 'check assets' )
  204. user3 = User.find(user3.id)
  205. attributes = user3.attributes_with_association_ids
  206. attributes['accounts'] = {}
  207. attributes['password'] = ''
  208. attributes.delete('token_ids')
  209. attributes.delete('authorization_ids')
  210. assert_nil( assets[:User][user3.id], 'check assets' )
  211. # touch user 2, check if org has changed
  212. travel 2.seconds
  213. user_new_2 = User.find(user2.id)
  214. user_new_2.lastname = 'assets2'
  215. user_new_2.save
  216. org_new = Organization.find(org.id)
  217. attributes = org_new.attributes_with_association_ids
  218. attributes.delete('user_ids')
  219. assert( !diff(attributes, assets[:Organization][org_new.id]), 'check assets' )
  220. attributes = user_new_2.attributes_with_association_ids
  221. attributes['accounts'] = {}
  222. attributes['password'] = ''
  223. attributes.delete('token_ids')
  224. attributes.delete('authorization_ids')
  225. assert( diff(attributes, assets[:User][user_new_2.id]), 'check assets' )
  226. # check new assets lookup
  227. assets = org_new.assets({})
  228. attributes = org_new.attributes_with_association_ids
  229. attributes.delete('user_ids')
  230. assert( diff(attributes, assets[:Organization][org_new.id]), 'check assets' )
  231. attributes = user_new_2.attributes_with_association_ids
  232. attributes['accounts'] = {}
  233. attributes['password'] = ''
  234. attributes.delete('token_ids')
  235. attributes.delete('authorization_ids')
  236. assert( diff(attributes, assets[:User][user_new_2.id]), 'check assets' )
  237. travel_back
  238. user1.destroy
  239. user2.destroy
  240. user3.destroy
  241. org.destroy
  242. org_new.destroy
  243. end
  244. def diff(o1, o2)
  245. return true if o1 == o2
  246. %w(updated_at created_at).each { |item|
  247. if o1[item]
  248. o1[item] = o1[item].to_s
  249. end
  250. if o2[item]
  251. o2[item] = o2[item].to_s
  252. end
  253. }
  254. return true if (o1.to_a - o2.to_a).empty?
  255. #puts "ERROR: difference \n1: #{o1.inspect}\n2: #{o2.inspect}\ndiff: #{(o1.to_a - o2.to_a).inspect}"
  256. false
  257. end
  258. test 'overview' do
  259. UserInfo.current_user_id = 1
  260. roles = Role.where(name: %w(Customer))
  261. user1 = User.create_or_update(
  262. login: 'assets_overview1@example.org',
  263. firstname: 'assets_overview1',
  264. lastname: 'assets_overview1',
  265. email: 'assets_overview1@example.org',
  266. password: 'some_pass',
  267. active: true,
  268. roles: roles,
  269. )
  270. user2 = User.create_or_update(
  271. login: 'assets_overview2@example.org',
  272. firstname: 'assets_overview2',
  273. lastname: 'assets_overview2',
  274. email: 'assets_overview2@example.org',
  275. password: 'some_pass',
  276. active: true,
  277. roles: roles,
  278. )
  279. user3 = User.create_or_update(
  280. login: 'assets_overview3@example.org',
  281. firstname: 'assets_overview3',
  282. lastname: 'assets_overview3',
  283. email: 'assets_overview3@example.org',
  284. password: 'some_pass',
  285. active: true,
  286. roles: roles,
  287. )
  288. user4 = User.create_or_update(
  289. login: 'assets_overview4@example.org',
  290. firstname: 'assets_overview4',
  291. lastname: 'assets_overview4',
  292. email: 'assets_overview4@example.org',
  293. password: 'some_pass',
  294. active: true,
  295. roles: roles,
  296. )
  297. user5 = User.create_or_update(
  298. login: 'assets_overview5@example.org',
  299. firstname: 'assets_overview5',
  300. lastname: 'assets_overview5',
  301. email: 'assets_overview5@example.org',
  302. password: 'some_pass',
  303. active: true,
  304. roles: roles,
  305. )
  306. ticket_state1 = Ticket::State.find_by(name: 'new')
  307. ticket_state2 = Ticket::State.find_by(name: 'open')
  308. overview_role = Role.find_by(name: 'Agent')
  309. overview = Overview.create_or_update(
  310. name: 'my asset test',
  311. link: 'my_asset_test',
  312. prio: 1000,
  313. role_id: overview_role.id,
  314. user_ids: [ user4.id, user5.id ],
  315. condition: {
  316. 'ticket.state_id' => {
  317. operator: 'is',
  318. value: [ ticket_state1.id, ticket_state2.id ],
  319. },
  320. 'ticket.owner_id' => {
  321. operator: 'is',
  322. pre_condition: 'specific',
  323. value: user1.id,
  324. value_completion: 'John Smith <john.smith@example.com>'
  325. },
  326. },
  327. order: {
  328. by: 'created_at',
  329. direction: 'ASC',
  330. },
  331. view: {
  332. d: %w(title customer group created_at),
  333. s: %w(title customer group created_at),
  334. m: %w(number title customer group created_at),
  335. view_mode_default: 's',
  336. },
  337. )
  338. assets = overview.assets({})
  339. assert(assets[:User][user1.id], 'check assets')
  340. assert_not(assets[:User][user2.id], 'check assets')
  341. assert_not(assets[:User][user3.id], 'check assets')
  342. assert(assets[:User][user4.id], 'check assets')
  343. assert(assets[:User][user5.id], 'check assets')
  344. assert(assets[:TicketState][ticket_state1.id], 'check assets')
  345. assert(assets[:TicketState][ticket_state2.id], 'check assets')
  346. overview = Overview.create_or_update(
  347. name: 'my asset test',
  348. link: 'my_asset_test',
  349. prio: 1000,
  350. role_id: overview_role.id,
  351. user_ids: [ user4.id ],
  352. condition: {
  353. 'ticket.state_id' => {
  354. operator: 'is',
  355. value: ticket_state1.id,
  356. },
  357. 'ticket.owner_id' => {
  358. operator: 'is',
  359. pre_condition: 'specific',
  360. value: [user1.id, user2.id],
  361. },
  362. },
  363. order: {
  364. by: 'created_at',
  365. direction: 'ASC',
  366. },
  367. view: {
  368. d: %w(title customer group created_at),
  369. s: %w(title customer group created_at),
  370. m: %w(number title customer group created_at),
  371. view_mode_default: 's',
  372. },
  373. )
  374. assets = overview.assets({})
  375. assert(assets[:User][user1.id], 'check assets')
  376. assert(assets[:User][user2.id], 'check assets')
  377. assert_not(assets[:User][user3.id], 'check assets')
  378. assert(assets[:User][user4.id], 'check assets')
  379. assert_not(assets[:User][user5.id], 'check assets')
  380. assert(assets[:TicketState][ticket_state1.id], 'check assets')
  381. assert_not(assets[:TicketState][ticket_state2.id], 'check assets')
  382. end
  383. test 'sla' do
  384. UserInfo.current_user_id = 1
  385. roles = Role.where(name: %w(Customer))
  386. user1 = User.create_or_update(
  387. login: 'assets_sla1@example.org',
  388. firstname: 'assets_sla1',
  389. lastname: 'assets_sla1',
  390. email: 'assets_sla1@example.org',
  391. password: 'some_pass',
  392. active: true,
  393. roles: roles,
  394. )
  395. user2 = User.create_or_update(
  396. login: 'assets_sla2@example.org',
  397. firstname: 'assets_sla2',
  398. lastname: 'assets_sla2',
  399. email: 'assets_sla2@example.org',
  400. password: 'some_pass',
  401. active: true,
  402. roles: roles,
  403. )
  404. calendar1 = Calendar.first
  405. ticket_state1 = Ticket::State.find_by(name: 'new')
  406. ticket_state2 = Ticket::State.find_by(name: 'open')
  407. sla = Sla.create_or_update(
  408. name: 'my asset test',
  409. calendar_id: calendar1.id,
  410. condition: {
  411. 'ticket.state_id' => {
  412. operator: 'is',
  413. value: [ ticket_state1.id, ticket_state2.id ],
  414. },
  415. 'ticket.owner_id' => {
  416. operator: 'is',
  417. pre_condition: 'specific',
  418. value: user1.id,
  419. value_completion: 'John Smith <john.smith@example.com>'
  420. },
  421. },
  422. )
  423. assets = sla.assets({})
  424. assert(assets[:User][user1.id], 'check assets')
  425. assert_not(assets[:User][user2.id], 'check assets')
  426. assert(assets[:TicketState][ticket_state1.id], 'check assets')
  427. assert(assets[:TicketState][ticket_state2.id], 'check assets')
  428. assert(assets[:Calendar][calendar1.id], 'check assets')
  429. end
  430. test 'job' do
  431. UserInfo.current_user_id = 1
  432. roles = Role.where(name: %w(Customer))
  433. user1 = User.create_or_update(
  434. login: 'assets_job1@example.org',
  435. firstname: 'assets_job1',
  436. lastname: 'assets_job1',
  437. email: 'assets_job1@example.org',
  438. password: 'some_pass',
  439. active: true,
  440. roles: roles,
  441. )
  442. user2 = User.create_or_update(
  443. login: 'assets_job2@example.org',
  444. firstname: 'assets_job2',
  445. lastname: 'assets_job2',
  446. email: 'assets_job2@example.org',
  447. password: 'some_pass',
  448. active: true,
  449. roles: roles,
  450. )
  451. user3 = User.create_or_update(
  452. login: 'assets_job3@example.org',
  453. firstname: 'assets_job3',
  454. lastname: 'assets_job3',
  455. email: 'assets_job3@example.org',
  456. password: 'some_pass',
  457. active: true,
  458. roles: roles,
  459. )
  460. ticket_state1 = Ticket::State.find_by(name: 'new')
  461. ticket_state2 = Ticket::State.find_by(name: 'open')
  462. ticket_priority2 = Ticket::Priority.find_by(name: '2 normal')
  463. job = Job.create_or_update(
  464. name: 'my job',
  465. timeplan: {
  466. mon: true,
  467. },
  468. condition: {
  469. 'ticket.state_id' => {
  470. operator: 'is',
  471. value: [ ticket_state1.id, ticket_state2.id ],
  472. },
  473. 'ticket.owner_id' => {
  474. operator: 'is',
  475. pre_condition: 'specific',
  476. value: user1.id,
  477. value_completion: 'John Smith <john.smith@example.com>'
  478. },
  479. },
  480. perform: {
  481. 'ticket.priority_id' => {
  482. value: ticket_priority2.id,
  483. },
  484. 'ticket.owner_id' => {
  485. pre_condition: 'specific',
  486. value: user2.id,
  487. value_completion: 'metest123@znuny.com <metest123@znuny.com>'
  488. },
  489. },
  490. disable_notification: true,
  491. )
  492. assets = job.assets({})
  493. assert(assets[:User][user1.id], 'check assets')
  494. assert(assets[:User][user2.id], 'check assets')
  495. assert_not(assets[:User][user3.id], 'check assets')
  496. assert(assets[:TicketState][ticket_state1.id], 'check assets')
  497. assert(assets[:TicketState][ticket_state2.id], 'check assets')
  498. assert(assets[:TicketPriority][ticket_priority2.id], 'check assets')
  499. end
  500. end