assets_test.rb 16 KB

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