user_test.rb 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303
  1. require 'test_helper'
  2. class UserTest < ActiveSupport::TestCase
  3. test 'user' do
  4. tests = [
  5. {
  6. name: '#1 - simple create',
  7. create: {
  8. firstname: 'Firstname',
  9. lastname: 'Lastname',
  10. email: 'some@example.com',
  11. login: 'some@example.com',
  12. updated_by_id: 1,
  13. created_by_id: 1,
  14. },
  15. create_verify: {
  16. firstname: 'Firstname',
  17. lastname: 'Lastname',
  18. image: nil,
  19. fullname: 'Firstname Lastname',
  20. email: 'some@example.com',
  21. login: 'some@example.com',
  22. },
  23. },
  24. {
  25. name: '#2 - simple create - no lastname',
  26. create: {
  27. firstname: 'Firstname Lastname',
  28. lastname: '',
  29. email: 'some@example.com',
  30. login: 'some@example.com',
  31. updated_by_id: 1,
  32. created_by_id: 1,
  33. },
  34. create_verify: {
  35. firstname: 'Firstname',
  36. lastname: 'Lastname',
  37. image: nil,
  38. email: 'some@example.com',
  39. login: 'some@example.com',
  40. },
  41. },
  42. {
  43. name: '#3 - simple create - no firstname',
  44. create: {
  45. firstname: '',
  46. lastname: 'Firstname Lastname',
  47. email: 'some@example.com',
  48. login: 'some@example.com',
  49. updated_by_id: 1,
  50. created_by_id: 1,
  51. },
  52. create_verify: {
  53. firstname: 'Firstname',
  54. lastname: 'Lastname',
  55. image: nil,
  56. email: 'some@example.com',
  57. login: 'some@example.com',
  58. },
  59. },
  60. {
  61. name: '#4 - simple create - nil as lastname',
  62. create: {
  63. firstname: 'Firstname Lastname',
  64. lastname: '',
  65. email: 'some@example.com',
  66. login: 'some@example.com',
  67. updated_by_id: 1,
  68. created_by_id: 1,
  69. },
  70. create_verify: {
  71. firstname: 'Firstname',
  72. lastname: 'Lastname',
  73. image: nil,
  74. email: 'some@example.com',
  75. login: 'some@example.com',
  76. },
  77. },
  78. {
  79. name: '#5 - simple create - no lastname, firstname with ","',
  80. create: {
  81. firstname: 'Lastname, Firstname',
  82. lastname: '',
  83. email: 'some@example.com',
  84. login: 'some@example.com',
  85. updated_by_id: 1,
  86. created_by_id: 1,
  87. },
  88. create_verify: {
  89. firstname: 'Firstname',
  90. lastname: 'Lastname',
  91. email: 'some@example.com',
  92. login: 'some@example.com',
  93. },
  94. },
  95. {
  96. name: '#6 - simple create - no lastname/firstname',
  97. create: {
  98. firstname: '',
  99. lastname: '',
  100. email: 'firstname.lastname@example.com',
  101. login: 'login-1',
  102. updated_by_id: 1,
  103. created_by_id: 1,
  104. },
  105. create_verify: {
  106. firstname: 'Firstname',
  107. lastname: 'Lastname',
  108. fullname: 'Firstname Lastname',
  109. email: 'firstname.lastname@example.com',
  110. login: 'login-1',
  111. },
  112. },
  113. {
  114. name: '#7 - simple create - no lastname/firstnam',
  115. create: {
  116. firstname: '',
  117. lastname: '',
  118. email: 'FIRSTNAME.lastname@example.com',
  119. login: 'login-2',
  120. updated_by_id: 1,
  121. created_by_id: 1,
  122. },
  123. create_verify: {
  124. firstname: 'Firstname',
  125. lastname: 'Lastname',
  126. email: 'firstname.lastname@example.com',
  127. login: 'login-2',
  128. },
  129. },
  130. {
  131. name: '#8 - simple create - nill as fristname and lastname',
  132. create: {
  133. firstname: '',
  134. lastname: '',
  135. email: 'FIRSTNAME.lastname@example.com',
  136. login: 'login-3',
  137. updated_by_id: 1,
  138. created_by_id: 1,
  139. },
  140. create_verify: {
  141. firstname: 'Firstname',
  142. lastname: 'Lastname',
  143. email: 'firstname.lastname@example.com',
  144. login: 'login-3',
  145. },
  146. },
  147. {
  148. name: '#9 - update with avatar check',
  149. create: {
  150. firstname: 'Bob',
  151. lastname: 'Smith',
  152. email: 'bob.smith@example.com',
  153. login: 'login-4',
  154. updated_by_id: 1,
  155. created_by_id: 1,
  156. },
  157. create_verify: {
  158. firstname: 'Bob',
  159. lastname: 'Smith',
  160. image: nil,
  161. email: 'bob.smith@example.com',
  162. login: 'login-4',
  163. },
  164. update: {
  165. email: 'unit-test1@znuny.com',
  166. },
  167. update_verify: {
  168. firstname: 'Bob',
  169. lastname: 'Smith',
  170. image: 'a11ed3970e6d3a680527d6f3f075ff89',
  171. image_md5: 'a11ed3970e6d3a680527d6f3f075ff89',
  172. email: 'unit-test1@znuny.com',
  173. login: 'login-4',
  174. }
  175. },
  176. {
  177. name: '#10 - update create with avatar check',
  178. create: {
  179. firstname: 'Bob',
  180. lastname: 'Smith',
  181. email: 'unit-test2@znuny.com',
  182. login: 'login-5',
  183. updated_by_id: 1,
  184. created_by_id: 1,
  185. },
  186. create_verify: {
  187. firstname: 'Bob',
  188. lastname: 'Smith',
  189. image: 'd76099edb79f39624b35187873184e3c',
  190. image_md5: 'd76099edb79f39624b35187873184e3c',
  191. email: 'unit-test2@znuny.com',
  192. login: 'login-5',
  193. },
  194. update: {
  195. email: 'unit-test1@znuny.com',
  196. },
  197. update_verify: {
  198. firstname: 'Bob',
  199. lastname: 'Smith',
  200. image: 'a11ed3970e6d3a680527d6f3f075ff89',
  201. image_md5: 'a11ed3970e6d3a680527d6f3f075ff89',
  202. email: 'unit-test1@znuny.com',
  203. login: 'login-5',
  204. }
  205. },
  206. {
  207. name: '#11 - update create with login/email check',
  208. create: {
  209. firstname: '',
  210. lastname: '',
  211. email: 'caoyaoewfzfw@21222cn.com',
  212. updated_by_id: 1,
  213. created_by_id: 1,
  214. },
  215. create_verify: {
  216. firstname: '',
  217. lastname: '',
  218. fullname: 'caoyaoewfzfw@21222cn.com',
  219. email: 'caoyaoewfzfw@21222cn.com',
  220. login: 'caoyaoewfzfw@21222cn.com',
  221. },
  222. update: {
  223. email: 'caoyaoewfzfw@212224cn.com',
  224. },
  225. update_verify: {
  226. firstname: '',
  227. lastname: '',
  228. email: 'caoyaoewfzfw@212224cn.com',
  229. fullname: 'caoyaoewfzfw@212224cn.com',
  230. login: 'caoyaoewfzfw@212224cn.com',
  231. }
  232. },
  233. {
  234. name: '#12 - update create with login/email check',
  235. create: {
  236. firstname: 'Firstname',
  237. lastname: 'Lastname',
  238. email: 'some_tEst11@example.com',
  239. updated_by_id: 1,
  240. created_by_id: 1,
  241. },
  242. create_verify: {
  243. firstname: 'Firstname',
  244. lastname: 'Lastname',
  245. fullname: 'Firstname Lastname',
  246. email: 'some_test11@example.com',
  247. },
  248. update: {
  249. email: 'some_Test11-1@example.com',
  250. },
  251. update_verify: {
  252. firstname: 'Firstname',
  253. lastname: 'Lastname',
  254. email: 'some_test11-1@example.com',
  255. fullname: 'Firstname Lastname',
  256. login: 'some_test11-1@example.com',
  257. }
  258. },
  259. ]
  260. tests.each do |test|
  261. # check if user exists
  262. user = User.find_by(login: test[:create][:login])
  263. user&.destroy!
  264. user = User.create!(test[:create])
  265. test[:create_verify].each do |key, value|
  266. next if key == :image_md5
  267. if user.respond_to?(key)
  268. result = user.send(key)
  269. if value.nil?
  270. assert_nil(result, "create check #{key} in (#{test[:name]})")
  271. else
  272. assert_equal(result, value, "create check #{key} in (#{test[:name]})")
  273. end
  274. else
  275. assert_equal(user[key], value, "create check #{key} in (#{test[:name]})")
  276. end
  277. end
  278. if test[:create_verify][:image_md5]
  279. file = Avatar.get_by_hash(user.image)
  280. file_md5 = Digest::MD5.hexdigest(file.content)
  281. assert_equal(file_md5, test[:create_verify][:image_md5], "create avatar md5 check in (#{test[:name]})")
  282. end
  283. if test[:update]
  284. user.update!(test[:update])
  285. test[:update_verify].each do |key, value|
  286. next if key == :image_md5
  287. if user.respond_to?(key)
  288. assert_equal(user.send(key), value, "update check #{key} in (#{test[:name]})")
  289. else
  290. assert_equal(user[key], value, "update check #{key} in (#{test[:name]})")
  291. end
  292. end
  293. if test[:update_verify][:image_md5]
  294. file = Avatar.get_by_hash(user.image)
  295. file_md5 = Digest::MD5.hexdigest(file.content)
  296. assert_equal(file_md5, test[:update_verify][:image_md5], "update avatar md5 check in (#{test[:name]})")
  297. end
  298. end
  299. user.destroy!
  300. end
  301. end
  302. test 'strange spaces' do
  303. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  304. email = "customer_email#{name}@example.com"
  305. customer = User.create!(
  306. firstname: 'Role',
  307. lastname: "Customer#{name}",
  308. email: " #{email} ",
  309. password: 'customerpw',
  310. active: true,
  311. roles: Role.where(name: %w[Customer]),
  312. updated_by_id: 1,
  313. created_by_id: 1,
  314. )
  315. assert(customer)
  316. assert_equal(email, customer.email)
  317. customer.destroy!
  318. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  319. email = "customer_email#{name}@example.com"
  320. customer = User.create!(
  321. firstname: "\u{00a0}\u{00a0}Role",
  322. lastname: "Customer#{name} \u{00a0}",
  323. email: "\u{00a0}#{email}\u{00a0}",
  324. password: 'customerpw',
  325. active: true,
  326. roles: Role.where(name: %w[Customer]),
  327. updated_by_id: 1,
  328. created_by_id: 1,
  329. )
  330. assert(customer)
  331. assert_equal('Role', customer.firstname)
  332. assert_equal("Customer#{name}", customer.lastname)
  333. assert_equal(email, customer.email)
  334. customer.destroy!
  335. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  336. email = "customer_email#{name}@example.com"
  337. customer = User.create!(
  338. firstname: "\u{200B}\u{200B}Role",
  339. lastname: "Customer#{name} \u{200B}",
  340. email: "\u{200B}#{email}\u{200B}",
  341. password: 'customerpw',
  342. active: true,
  343. roles: Role.where(name: %w[Customer]),
  344. updated_by_id: 1,
  345. created_by_id: 1,
  346. )
  347. assert(customer)
  348. assert_equal('Role', customer.firstname)
  349. assert_equal("Customer#{name}", customer.lastname)
  350. assert_equal(email, customer.email)
  351. customer.destroy!
  352. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  353. email = "customer_email#{name}@example.com"
  354. customer = User.create!(
  355. firstname: "\u{200B}\u{200B}Role\u{00a0}",
  356. lastname: "\u{00a0}\u{00a0}Customer#{name} \u{200B}",
  357. email: "\u{200B}#{email}\u{200B}",
  358. password: 'customerpw',
  359. active: true,
  360. roles: Role.where(name: %w[Customer]),
  361. updated_by_id: 1,
  362. created_by_id: 1,
  363. )
  364. assert(customer)
  365. assert_equal('Role', customer.firstname)
  366. assert_equal("Customer#{name}", customer.lastname)
  367. assert_equal(email, customer.email)
  368. customer.destroy!
  369. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  370. email = "customer_email#{name}@example.com"
  371. customer = User.create!(
  372. firstname: "\u{200a}\u{200b}\u{202F}\u{205F}Role\u{2007}\u{2008}",
  373. lastname: "\u{00a0}\u{00a0}Customer#{name}\u{3000}\u{FEFF}\u{2000}",
  374. email: "\u{200B}#{email}\u{200B}\u{2007}\u{2008}",
  375. password: 'customerpw',
  376. active: true,
  377. roles: Role.where(name: %w[Customer]),
  378. updated_by_id: 1,
  379. created_by_id: 1,
  380. )
  381. assert(customer)
  382. assert_equal('Role', customer.firstname)
  383. assert_equal("Customer#{name}", customer.lastname)
  384. assert_equal(email, customer.email)
  385. customer.destroy!
  386. end
  387. test 'without email - but login eq email' do
  388. name = rand(999_999_999)
  389. login = "admin-role_without_email#{name}@example.com"
  390. email = "admin-role_without_email#{name}@example.com"
  391. admin = User.create_or_update(
  392. login: login,
  393. firstname: 'Role',
  394. lastname: "Admin#{name}",
  395. #email: "",
  396. password: 'adminpw',
  397. active: true,
  398. roles: Role.where(name: %w[Admin Agent]),
  399. updated_by_id: 1,
  400. created_by_id: 1,
  401. )
  402. assert(admin.id)
  403. assert_equal(admin.login, login)
  404. assert_equal(admin.email, '')
  405. admin.email = email
  406. admin.save!
  407. assert_equal(admin.login, login)
  408. assert_equal(admin.email, email)
  409. admin.email = ''
  410. admin.save!
  411. assert(admin.id)
  412. assert(admin.login)
  413. assert_not_equal(admin.login, login)
  414. assert_equal(admin.email, '')
  415. admin.destroy!
  416. end
  417. test 'without email - but login ne email' do
  418. name = rand(999_999_999)
  419. login = "admin-role_without_email#{name}"
  420. email = "admin-role_without_email#{name}@example.com"
  421. admin = User.create_or_update(
  422. login: login,
  423. firstname: 'Role',
  424. lastname: "Admin#{name}",
  425. #email: "",
  426. password: 'adminpw',
  427. active: true,
  428. roles: Role.where(name: %w[Admin Agent]),
  429. updated_by_id: 1,
  430. created_by_id: 1,
  431. )
  432. assert(admin.id)
  433. assert_equal(admin.login, login)
  434. assert_equal(admin.email, '')
  435. admin.email = email
  436. admin.save!
  437. assert_equal(admin.login, login)
  438. assert_equal(admin.email, email)
  439. admin.email = ''
  440. admin.save!
  441. assert(admin.id)
  442. assert_equal(admin.login, login)
  443. assert_equal(admin.email, '')
  444. admin.destroy!
  445. end
  446. test 'uniq email' do
  447. name = rand(999_999_999)
  448. email1 = "admin1-role_without_email#{name}@example.com"
  449. admin1 = User.create!(
  450. login: email1,
  451. firstname: 'Role',
  452. lastname: "Admin1#{name}",
  453. email: email1,
  454. password: 'adminpw',
  455. active: true,
  456. roles: Role.where(name: %w[Admin Agent]),
  457. updated_by_id: 1,
  458. created_by_id: 1,
  459. )
  460. assert(admin1.id)
  461. assert_equal(admin1.email, email1)
  462. assert_raises(Exceptions::UnprocessableEntity) do
  463. User.create!(
  464. login: "#{email1}-1",
  465. firstname: 'Role',
  466. lastname: "Admin1#{name}",
  467. email: email1,
  468. password: 'adminpw',
  469. active: true,
  470. roles: Role.where(name: %w[Admin Agent]),
  471. updated_by_id: 1,
  472. created_by_id: 1,
  473. )
  474. end
  475. email2 = "admin2-role_without_email#{name}@example.com"
  476. admin2 = User.create!(
  477. firstname: 'Role',
  478. lastname: "Admin2#{name}",
  479. email: email2,
  480. password: 'adminpw',
  481. active: true,
  482. roles: Role.where(name: %w[Admin Agent]),
  483. updated_by_id: 1,
  484. created_by_id: 1,
  485. )
  486. assert_raises(Exceptions::UnprocessableEntity) do
  487. admin2.email = email1
  488. admin2.save!
  489. end
  490. admin1.email = admin1.email
  491. admin1.save!
  492. admin2.destroy!
  493. admin1.destroy!
  494. end
  495. test 'uniq email - multiple use' do
  496. Setting.set('user_email_multiple_use', true)
  497. name = rand(999_999_999)
  498. email1 = "admin1-role_without_email#{name}@example.com"
  499. admin1 = User.create!(
  500. login: email1,
  501. firstname: 'Role',
  502. lastname: "Admin1#{name}",
  503. email: email1,
  504. password: 'adminpw',
  505. active: true,
  506. roles: Role.where(name: %w[Admin Agent]),
  507. updated_by_id: 1,
  508. created_by_id: 1,
  509. )
  510. assert(admin1.id)
  511. assert_equal(admin1.email, email1)
  512. admin2 = User.create!(
  513. login: "#{email1}-1",
  514. firstname: 'Role',
  515. lastname: "Admin1#{name}",
  516. email: email1,
  517. password: 'adminpw',
  518. active: true,
  519. roles: Role.where(name: %w[Admin Agent]),
  520. updated_by_id: 1,
  521. created_by_id: 1,
  522. )
  523. assert_equal(admin2.email, email1)
  524. admin2.destroy!
  525. admin1.destroy!
  526. Setting.set('user_email_multiple_use', false)
  527. end
  528. test 'ensure roles' do
  529. name = rand(999_999_999)
  530. admin = User.create_or_update(
  531. login: "admin-role#{name}@example.com",
  532. firstname: 'Role',
  533. lastname: "Admin#{name}",
  534. email: "admin-role#{name}@example.com",
  535. password: 'adminpw',
  536. active: true,
  537. roles: Role.where(name: %w[Admin Agent]),
  538. updated_by_id: 1,
  539. created_by_id: 1,
  540. )
  541. customer1 = User.create_or_update(
  542. login: "user-ensure-role1-#{name}@example.com",
  543. firstname: 'Role',
  544. lastname: "Customer#{name}",
  545. email: "user-ensure-role1-#{name}@example.com",
  546. password: 'customerpw',
  547. active: true,
  548. updated_by_id: 1,
  549. created_by_id: 1,
  550. )
  551. assert_equal(customer1.role_ids.sort, Role.signup_role_ids)
  552. roles = Role.where(name: 'Agent')
  553. customer1.roles = roles
  554. customer1.save!
  555. assert_equal(customer1.role_ids.count, 1)
  556. assert_equal(customer1.role_ids.first, roles.first.id)
  557. assert_equal(customer1.roles.first.id, roles.first.id)
  558. customer1.roles = []
  559. customer1.save!
  560. assert_equal(customer1.role_ids.sort, Role.signup_role_ids)
  561. customer1.destroy!
  562. customer2 = User.create_or_update(
  563. login: "user-ensure-role2-#{name}@example.com",
  564. firstname: 'Role',
  565. lastname: "Customer#{name}",
  566. email: "user-ensure-role2-#{name}@example.com",
  567. password: 'customerpw',
  568. roles: roles,
  569. active: true,
  570. updated_by_id: 1,
  571. created_by_id: 1,
  572. )
  573. assert_equal(customer2.role_ids.count, 1)
  574. assert_equal(customer2.role_ids.first, roles.first.id)
  575. assert_equal(customer2.roles.first.id, roles.first.id)
  576. roles = Role.where(name: 'Admin')
  577. customer2.role_ids = [roles.first.id]
  578. customer2.save!
  579. assert_equal(customer2.role_ids.count, 1)
  580. assert_equal(customer2.role_ids.first, roles.first.id)
  581. assert_equal(customer2.roles.first.id, roles.first.id)
  582. customer2.roles = []
  583. customer2.save!
  584. assert_equal(customer2.role_ids.sort, Role.signup_role_ids)
  585. customer2.destroy!
  586. customer3 = User.create_or_update(
  587. login: "user-ensure-role2-#{name}@example.com",
  588. firstname: 'Role',
  589. lastname: "Customer#{name}",
  590. email: "user-ensure-role2-#{name}@example.com",
  591. password: 'customerpw',
  592. roles: roles,
  593. active: true,
  594. updated_by_id: 1,
  595. created_by_id: 1,
  596. )
  597. assert_raises(RuntimeError) do
  598. customer3.roles = Role.where(name: %w[Customer Admin])
  599. end
  600. assert_raises(RuntimeError) do
  601. customer3.roles = Role.where(name: %w[Customer Agent])
  602. end
  603. customer3.roles = Role.where(name: %w[Admin Agent])
  604. customer3.roles.each do |role|
  605. assert_not_equal(role.name, 'Customer')
  606. end
  607. customer3.roles = Role.where(name: 'Admin')
  608. customer3.roles.each do |role|
  609. assert_not_equal(role.name, 'Customer')
  610. end
  611. customer3.roles = Role.where(name: 'Agent')
  612. customer3.roles.each do |role|
  613. assert_not_equal(role.name, 'Customer')
  614. end
  615. customer3.destroy!
  616. admin.destroy!
  617. end
  618. test 'user default preferences' do
  619. name = rand(999_999_999)
  620. groups = Group.where(name: 'Users')
  621. roles = Role.where(name: 'Agent')
  622. agent1 = User.create_or_update(
  623. login: "agent-default-preferences#{name}@example.com",
  624. firstname: 'Preferences',
  625. lastname: "Agent#{name}",
  626. email: "agent-default-preferences#{name}@example.com",
  627. password: 'agentpw',
  628. active: true,
  629. roles: roles,
  630. groups: groups,
  631. preferences: {
  632. locale: 'de-de',
  633. },
  634. updated_by_id: 1,
  635. created_by_id: 1,
  636. )
  637. agent1 = User.find(agent1.id)
  638. assert(agent1.preferences)
  639. assert(agent1.preferences['locale'])
  640. assert_equal(agent1.preferences['locale'], 'de-de')
  641. assert(agent1.preferences['notification_config'])
  642. assert(agent1.preferences['notification_config']['matrix'])
  643. assert(agent1.preferences['notification_config']['matrix']['create'])
  644. assert(agent1.preferences['notification_config']['matrix']['update'])
  645. roles = Role.where(name: 'Customer')
  646. customer1 = User.create_or_update(
  647. login: "customer-default-preferences#{name}@example.com",
  648. firstname: 'Preferences',
  649. lastname: "Customer#{name}",
  650. email: "customer-default-preferences#{name}@example.com",
  651. password: 'customerpw',
  652. active: true,
  653. roles: roles,
  654. preferences: {
  655. locale: 'de-de',
  656. },
  657. updated_by_id: 1,
  658. created_by_id: 1,
  659. )
  660. customer1 = User.find(customer1.id)
  661. assert(customer1.preferences)
  662. assert(customer1.preferences['locale'])
  663. assert_equal(customer1.preferences['locale'], 'de-de')
  664. assert_not(customer1.preferences['notification_config'])
  665. customer1 = User.find(customer1.id)
  666. customer1.roles = Role.where(name: 'Agent')
  667. customer1 = User.find(customer1.id)
  668. assert(customer1.preferences)
  669. assert(customer1.preferences['locale'])
  670. assert_equal(customer1.preferences['locale'], 'de-de')
  671. assert(customer1.preferences['notification_config'])
  672. assert(customer1.preferences['notification_config']['matrix']['create'])
  673. assert(customer1.preferences['notification_config']['matrix']['update'])
  674. end
  675. test 'permission' do
  676. test_role_1 = Role.create_or_update(
  677. name: 'Test1',
  678. note: 'To configure your system.',
  679. preferences: {
  680. not: ['Test3'],
  681. },
  682. updated_by_id: 1,
  683. created_by_id: 1
  684. )
  685. test_role_2 = Role.create_or_update(
  686. name: 'Test2',
  687. note: 'To work on Tickets.',
  688. preferences: {
  689. not: ['Test3'],
  690. },
  691. updated_by_id: 1,
  692. created_by_id: 1
  693. )
  694. test_role_3 = Role.create_or_update(
  695. name: 'Test3',
  696. note: 'People who create Tickets ask for help.',
  697. preferences: {
  698. not: %w[Test1 Test2],
  699. },
  700. updated_by_id: 1,
  701. created_by_id: 1
  702. )
  703. test_role_4 = Role.create_or_update(
  704. name: 'Test4',
  705. note: 'Access the report area.',
  706. preferences: {},
  707. created_by_id: 1,
  708. updated_by_id: 1,
  709. )
  710. name = rand(999_999_999)
  711. assert_raises(RuntimeError) do
  712. User.create_or_update(
  713. login: "customer-role#{name}@example.com",
  714. firstname: 'Role',
  715. lastname: "Customer#{name}",
  716. email: "customer-role#{name}@example.com",
  717. password: 'customerpw',
  718. active: true,
  719. roles: [test_role_1, test_role_3],
  720. updated_by_id: 1,
  721. created_by_id: 1,
  722. )
  723. end
  724. assert_raises(RuntimeError) do
  725. User.create_or_update(
  726. login: "customer-role#{name}@example.com",
  727. firstname: 'Role',
  728. lastname: "Customer#{name}",
  729. email: "customer-role#{name}@example.com",
  730. password: 'customerpw',
  731. active: true,
  732. roles: [test_role_2, test_role_3],
  733. updated_by_id: 1,
  734. created_by_id: 1,
  735. )
  736. end
  737. user1 = User.create_or_update(
  738. login: "customer-role#{name}@example.com",
  739. firstname: 'Role',
  740. lastname: "Customer#{name}",
  741. email: "customer-role#{name}@example.com",
  742. password: 'customerpw',
  743. active: true,
  744. roles: [test_role_1, test_role_2],
  745. updated_by_id: 1,
  746. created_by_id: 1,
  747. )
  748. assert(user1.role_ids.include?(test_role_1.id))
  749. assert(user1.role_ids.include?(test_role_2.id))
  750. assert_not(user1.role_ids.include?(test_role_3.id))
  751. assert_not(user1.role_ids.include?(test_role_4.id))
  752. user1 = User.create_or_update(
  753. login: "customer-role#{name}@example.com",
  754. firstname: 'Role',
  755. lastname: "Customer#{name}",
  756. email: "customer-role#{name}@example.com",
  757. password: 'customerpw',
  758. active: true,
  759. roles: [test_role_1, test_role_4],
  760. updated_by_id: 1,
  761. created_by_id: 1,
  762. )
  763. assert(user1.role_ids.include?(test_role_1.id))
  764. assert_not(user1.role_ids.include?(test_role_2.id))
  765. assert_not(user1.role_ids.include?(test_role_3.id))
  766. assert(user1.role_ids.include?(test_role_4.id))
  767. assert_raises(RuntimeError) do
  768. User.create_or_update(
  769. login: "customer-role#{name}@example.com",
  770. firstname: 'Role',
  771. lastname: "Customer#{name}",
  772. email: "customer-role#{name}@example.com",
  773. password: 'customerpw',
  774. active: true,
  775. roles: [test_role_1, test_role_3],
  776. updated_by_id: 1,
  777. created_by_id: 1,
  778. )
  779. end
  780. assert_raises(RuntimeError) do
  781. User.create_or_update(
  782. login: "customer-role#{name}@example.com",
  783. firstname: 'Role',
  784. lastname: "Customer#{name}",
  785. email: "customer-role#{name}@example.com",
  786. password: 'customerpw',
  787. active: true,
  788. roles: [test_role_2, test_role_3],
  789. updated_by_id: 1,
  790. created_by_id: 1,
  791. )
  792. end
  793. assert(user1.role_ids.include?(test_role_1.id))
  794. assert_not(user1.role_ids.include?(test_role_2.id))
  795. assert_not(user1.role_ids.include?(test_role_3.id))
  796. assert(user1.role_ids.include?(test_role_4.id))
  797. end
  798. test 'permission default' do
  799. name = rand(999_999_999)
  800. admin_count = User.with_permissions('admin').count
  801. admin = User.create_or_update(
  802. login: "admin-role#{name}@example.com",
  803. firstname: 'Role',
  804. lastname: "Admin#{name}",
  805. email: "admin-role#{name}@example.com",
  806. password: 'adminpw',
  807. active: true,
  808. roles: Role.where(name: %w[Admin Agent]),
  809. updated_by_id: 1,
  810. created_by_id: 1,
  811. )
  812. agent_count = User.with_permissions('ticket.agent').count
  813. agent = User.create_or_update(
  814. login: "agent-role#{name}@example.com",
  815. firstname: 'Role',
  816. lastname: "Agent#{name}",
  817. email: "agent-role#{name}@example.com",
  818. password: 'agentpw',
  819. active: true,
  820. roles: Role.where(name: 'Agent'),
  821. updated_by_id: 1,
  822. created_by_id: 1,
  823. )
  824. customer_count = User.with_permissions('ticket.customer').count
  825. customer = User.create_or_update(
  826. login: "customer-role#{name}@example.com",
  827. firstname: 'Role',
  828. lastname: "Customer#{name}",
  829. email: "customer-role#{name}@example.com",
  830. password: 'customerpw',
  831. active: true,
  832. roles: Role.where(name: 'Customer'),
  833. updated_by_id: 1,
  834. created_by_id: 1,
  835. )
  836. users = User.with_permissions('not_existing')
  837. assert(users.blank?)
  838. users = User.with_permissions('admin')
  839. assert_equal(admin_count + 1, users.count)
  840. assert_equal(admin.login, users.last.login)
  841. users = User.with_permissions('admin.session')
  842. assert_equal(admin_count + 1, users.count)
  843. assert_equal(admin.login, users.last.login)
  844. users = User.with_permissions(['admin.session', 'not_existing'])
  845. assert_equal(admin_count + 1, users.count)
  846. assert_equal(admin.login, users.last.login)
  847. users = User.with_permissions('ticket.agent')
  848. assert_equal(agent_count + 1, users.count)
  849. assert_equal(agent.login, users.last.login)
  850. users = User.with_permissions(['ticket.agent', 'not_existing'])
  851. assert_equal(agent_count + 1, users.count)
  852. assert_equal(agent.login, users.last.login)
  853. users = User.with_permissions('ticket.customer')
  854. assert_equal(customer_count + 1, users.count)
  855. assert_equal(customer.login, users.last.login)
  856. users = User.with_permissions(['ticket.customer', 'not_existing'])
  857. assert_equal(customer_count + 1, users.count)
  858. assert_equal(customer.login, users.last.login)
  859. end
  860. test 'min admin permission check' do
  861. # delete inital admin
  862. User.find_by(login: 'admin@example.com').destroy
  863. # store current admin count
  864. admin_count_inital = User.with_permissions('admin').count
  865. assert_equal(0, admin_count_inital)
  866. # create two admin users
  867. random = rand(999_999_999)
  868. admin1 = User.create_or_update(
  869. login: "1admin-role#{random}@example.com",
  870. firstname: 'Role',
  871. lastname: "Admin#{random}",
  872. email: "admin-role#{random}@example.com",
  873. password: 'adminpw',
  874. active: true,
  875. roles: Role.where(name: %w[Admin Agent]),
  876. updated_by_id: 1,
  877. created_by_id: 1,
  878. )
  879. random = rand(999_999_999)
  880. admin2 = User.create_or_update(
  881. login: "2admin-role#{random}@example.com",
  882. firstname: 'Role',
  883. lastname: "Admin#{random}",
  884. email: "admin-role#{random}@example.com",
  885. password: 'adminpw',
  886. active: true,
  887. roles: Role.where(name: %w[Admin Agent]),
  888. updated_by_id: 1,
  889. created_by_id: 1,
  890. )
  891. random = rand(999_999_999)
  892. admin3 = User.create_or_update(
  893. login: "2admin-role#{random}@example.com",
  894. firstname: 'Role',
  895. lastname: "Admin#{random}",
  896. email: "admin-role#{random}@example.com",
  897. password: 'adminpw',
  898. active: true,
  899. roles: Role.where(name: %w[Admin Agent]),
  900. updated_by_id: 1,
  901. created_by_id: 1,
  902. )
  903. admin_count_inital = User.with_permissions('admin').count
  904. assert_equal(3, admin_count_inital)
  905. admin1.update!(roles: Role.where(name: %w[Agent]))
  906. admin_count_inital = User.with_permissions('admin').count
  907. assert_equal(2, admin_count_inital)
  908. admin2.update!(roles: Role.where(name: %w[Agent]))
  909. admin_count_inital = User.with_permissions('admin').count
  910. assert_equal(1, admin_count_inital)
  911. assert_raises(Exceptions::UnprocessableEntity) do
  912. admin3.update!(roles: Role.where(name: %w[Agent]))
  913. end
  914. admin_count_inital = User.with_permissions('admin').count
  915. assert_equal(1, admin_count_inital)
  916. assert_raises(Exceptions::UnprocessableEntity) do
  917. admin3.active = false
  918. admin3.save!
  919. end
  920. assert_equal(1, User.with_permissions('admin').count)
  921. admin_role = Role.find_by(name: 'Admin')
  922. assert_raises(Exceptions::UnprocessableEntity) do
  923. admin_role.active = false
  924. admin_role.save!
  925. end
  926. assert_raises(Exceptions::UnprocessableEntity) do
  927. admin_role.permission_revoke('admin')
  928. end
  929. assert_equal(1, User.with_permissions('admin').count)
  930. end
  931. test 'only valid agent in group permission check' do
  932. name = rand(999_999_999)
  933. group = Group.create!(
  934. name: "ValidAgentGroupPermission-#{name}",
  935. active: true,
  936. updated_by_id: 1,
  937. created_by_id: 1,
  938. )
  939. roles = Role.where(name: 'Agent')
  940. agent1 = User.create_or_update(
  941. login: "agent-default-vaild_agent_group_permission-1#{name}@example.com",
  942. firstname: 'vaild_agent_group_permission-1',
  943. lastname: "Agent#{name}",
  944. email: "agent-default-vaild_agent_group_permission-1#{name}@example.com",
  945. password: 'agentpw',
  946. active: true,
  947. roles: roles,
  948. groups: [group],
  949. updated_by_id: 1,
  950. created_by_id: 1,
  951. )
  952. agent2 = User.create_or_update(
  953. login: "agent-default-vaild_agent_group_permission-2#{name}@example.com",
  954. firstname: 'vaild_agent_group_permission-2',
  955. lastname: "Agent#{name}",
  956. email: "agent-default-vaild_agent_group_permission-2#{name}@example.com",
  957. password: 'agentpw',
  958. active: true,
  959. roles: roles,
  960. groups: [group],
  961. updated_by_id: 1,
  962. created_by_id: 1,
  963. )
  964. assert_equal(2, User.group_access(group.id, 'full').count)
  965. agent2.active = false
  966. agent2.save!
  967. assert_equal(1, User.group_access(group.id, 'full').count)
  968. agent2.active = true
  969. agent2.save!
  970. assert_equal(2, User.group_access(group.id, 'full').count)
  971. roles = Role.where(name: 'Customer')
  972. agent2.roles = roles
  973. agent2.save!
  974. assert_equal(1, User.group_access(group.id, 'full').count)
  975. end
  976. test 'preferences[:notification_sound][:enabled] value check' do
  977. roles = Role.where(name: 'Agent')
  978. agent1 = User.create!(
  979. login: "agent-default-preferences-1#{name}@example.com",
  980. firstname: 'vaild_agent_group_permission-1',
  981. lastname: "Agent#{name}",
  982. email: "agent-default-preferences-1#{name}@example.com",
  983. password: 'agentpw',
  984. active: true,
  985. roles: roles,
  986. preferences: {
  987. notification_sound: {
  988. enabled: true,
  989. }
  990. },
  991. updated_by_id: 1,
  992. created_by_id: 1,
  993. )
  994. assert_equal(true, agent1.preferences[:notification_sound][:enabled])
  995. agent2 = User.create!(
  996. login: "agent-default-preferences-2#{name}@example.com",
  997. firstname: 'vaild_agent_group_permission-2',
  998. lastname: "Agent#{name}",
  999. email: "agent-default-preferences-2#{name}@example.com",
  1000. password: 'agentpw',
  1001. active: true,
  1002. roles: roles,
  1003. preferences: {
  1004. notification_sound: {
  1005. enabled: false,
  1006. }
  1007. },
  1008. updated_by_id: 1,
  1009. created_by_id: 1,
  1010. )
  1011. assert_equal(false, agent2.preferences[:notification_sound][:enabled])
  1012. agent3 = User.create!(
  1013. login: "agent-default-preferences-3#{name}@example.com",
  1014. firstname: 'vaild_agent_group_permission-3',
  1015. lastname: "Agent#{name}",
  1016. email: "agent-default-preferences-3#{name}@example.com",
  1017. password: 'agentpw',
  1018. active: true,
  1019. roles: roles,
  1020. preferences: {
  1021. notification_sound: {
  1022. enabled: true,
  1023. }
  1024. },
  1025. updated_by_id: 1,
  1026. created_by_id: 1,
  1027. )
  1028. assert_equal(true, agent3.preferences[:notification_sound][:enabled])
  1029. agent3.preferences[:notification_sound][:enabled] = 'false'
  1030. agent3.save!
  1031. agent3.reload
  1032. assert_equal(false, agent3.preferences[:notification_sound][:enabled])
  1033. agent4 = User.create!(
  1034. login: "agent-default-preferences-4#{name}@example.com",
  1035. firstname: 'vaild_agent_group_permission-4',
  1036. lastname: "Agent#{name}",
  1037. email: "agent-default-preferences-4#{name}@example.com",
  1038. password: 'agentpw',
  1039. active: true,
  1040. roles: roles,
  1041. preferences: {
  1042. notification_sound: {
  1043. enabled: false,
  1044. }
  1045. },
  1046. updated_by_id: 1,
  1047. created_by_id: 1,
  1048. )
  1049. assert_equal(false, agent4.preferences[:notification_sound][:enabled])
  1050. agent4.preferences[:notification_sound][:enabled] = 'true'
  1051. agent4.save!
  1052. agent4.reload
  1053. assert_equal(true, agent4.preferences[:notification_sound][:enabled])
  1054. agent4.preferences[:notification_sound][:enabled] = 'invalid'
  1055. assert_raises(Exceptions::UnprocessableEntity) do
  1056. agent4.save!
  1057. end
  1058. assert_raises(Exceptions::UnprocessableEntity) do
  1059. User.create!(
  1060. login: "agent-default-preferences-5#{name}@example.com",
  1061. firstname: 'vaild_agent_group_permission-5',
  1062. lastname: "Agent#{name}",
  1063. email: "agent-default-preferences-5#{name}@example.com",
  1064. password: 'agentpw',
  1065. active: true,
  1066. roles: roles,
  1067. preferences: {
  1068. notification_sound: {
  1069. enabled: 'invalid string',
  1070. }
  1071. },
  1072. updated_by_id: 1,
  1073. created_by_id: 1,
  1074. )
  1075. end
  1076. end
  1077. test 'cleanup references on destroy' do
  1078. agent1 = User.create!(
  1079. login: "agent-cleanup_check-1#{name}@example.com",
  1080. firstname: 'vaild_agent_group_permission-1',
  1081. lastname: "Agent#{name}",
  1082. email: "agent-cleanup_check-1#{name}@example.com",
  1083. password: 'agentpw',
  1084. active: true,
  1085. roles: Role.where(name: 'Agent'),
  1086. groups: Group.all,
  1087. updated_by_id: 1,
  1088. created_by_id: 1,
  1089. )
  1090. agent1_id = agent1.id
  1091. assert_equal(1, Avatar.list('User', agent1_id).count)
  1092. UserDevice.add(
  1093. 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
  1094. '91.115.248.231',
  1095. agent1_id,
  1096. 'fingerprint1234',
  1097. 'session',
  1098. )
  1099. assert_equal(1, UserDevice.where(user_id: agent1_id).count)
  1100. Karma::User.sync(agent1)
  1101. assert_equal(1, Karma::User.where(user_id: agent1_id).count)
  1102. OnlineNotification.add(
  1103. type: 'Assigned to you',
  1104. object: 'Ticket',
  1105. o_id: 1,
  1106. seen: false,
  1107. user_id: agent1_id,
  1108. created_by_id: 1,
  1109. updated_by_id: 1,
  1110. created_at: Time.zone.now,
  1111. updated_at: Time.zone.now,
  1112. )
  1113. assert_equal(1, OnlineNotification.where(user_id: agent1_id).count)
  1114. Authorization.create!(
  1115. user: agent1,
  1116. uid: '123',
  1117. username: '123',
  1118. provider: 'some',
  1119. token: 'token',
  1120. secret: 'secret',
  1121. )
  1122. assert_equal(1, Authorization.where(user_id: agent1_id).count)
  1123. Cti::CallerId.maybe_add(
  1124. caller_id: '49123456789',
  1125. comment: 'Hairdresser Bob Smith, San Francisco', #optional
  1126. level: 'maybe', # known|maybe
  1127. user_id: agent1_id, # optional
  1128. object: 'Ticket',
  1129. o_id: 1,
  1130. )
  1131. assert_equal(1, Cti::CallerId.where(user_id: agent1_id).count)
  1132. Taskbar.create!(
  1133. client_id: 123,
  1134. key: 'Ticket-1',
  1135. callback: 'TicketZoom',
  1136. params: {
  1137. id: 1,
  1138. },
  1139. state: {},
  1140. user_id: agent1_id,
  1141. prio: 1,
  1142. notify: false,
  1143. )
  1144. assert_equal(1, Taskbar.where(user_id: agent1_id).count)
  1145. ticket1 = Ticket.create!(
  1146. title: 'test 1234-1',
  1147. group: Group.lookup(name: 'Users'),
  1148. customer_id: 2,
  1149. owner_id: 2,
  1150. updated_by_id: 1,
  1151. created_by_id: 1,
  1152. )
  1153. RecentView.log(ticket1.class.to_s, ticket1.id, agent1)
  1154. assert_equal(1, RecentView.where(created_by_id: agent1_id).count)
  1155. agent1.destroy!
  1156. assert_equal(0, UserDevice.where(user_id: agent1_id).count)
  1157. assert_equal(0, Avatar.list('User', agent1_id, false).count)
  1158. assert_equal(0, Karma::User.where(user_id: agent1_id).count)
  1159. assert_equal(0, OnlineNotification.where(user_id: agent1_id).count)
  1160. assert_equal(0, Authorization.where(user_id: agent1_id).count)
  1161. assert_equal(0, Cti::CallerId.where(user_id: agent1_id).count)
  1162. assert_equal(0, Taskbar.where(user_id: agent1_id).count)
  1163. assert_equal(0, RecentView.where(created_by_id: agent1_id).count)
  1164. end
  1165. test 'adding group drops cache' do
  1166. agent1 = User.create!(
  1167. login: "agent-cleanup_check-1#{name}@example.com",
  1168. firstname: 'vaild_agent_group_permission-1',
  1169. lastname: "Agent#{name}",
  1170. email: "agent-cleanup_check-1#{name}@example.com",
  1171. password: 'agentpw',
  1172. active: true,
  1173. roles: Role.where(name: 'Agent'),
  1174. groups: Group.all,
  1175. updated_by_id: 1,
  1176. created_by_id: 1,
  1177. )
  1178. group1 = Group.create_or_update(
  1179. name: "GroupWithoutPermission-#{rand(9_999_999_999)}",
  1180. active: true,
  1181. updated_by_id: 1,
  1182. created_by_id: 1,
  1183. )
  1184. differences = %w[
  1185. group1.attributes_with_association_ids['user_ids'].count
  1186. agent1.attributes_with_association_ids['group_ids'].keys.count
  1187. ]
  1188. assert_difference differences, 1 do
  1189. agent1.groups << group1
  1190. end
  1191. end
  1192. end