user_test.rb 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class UserTest < ActiveSupport::TestCase
  4. test 'user' do
  5. tests = [
  6. {
  7. name: '#1 - simple create',
  8. create: {
  9. firstname: 'Firstname',
  10. lastname: 'Lastname',
  11. email: 'some@example.com',
  12. login: 'some@example.com',
  13. updated_by_id: 1,
  14. created_by_id: 1,
  15. },
  16. create_verify: {
  17. firstname: 'Firstname',
  18. lastname: 'Lastname',
  19. image: nil,
  20. fullname: 'Firstname Lastname',
  21. email: 'some@example.com',
  22. login: 'some@example.com',
  23. },
  24. },
  25. {
  26. name: '#2 - simple create - no lastname',
  27. create: {
  28. firstname: 'Firstname Lastname',
  29. lastname: '',
  30. email: 'some@example.com',
  31. login: 'some@example.com',
  32. updated_by_id: 1,
  33. created_by_id: 1,
  34. },
  35. create_verify: {
  36. firstname: 'Firstname',
  37. lastname: 'Lastname',
  38. image: nil,
  39. email: 'some@example.com',
  40. login: 'some@example.com',
  41. },
  42. },
  43. {
  44. name: '#3 - simple create - no firstname',
  45. create: {
  46. firstname: '',
  47. lastname: 'Firstname Lastname',
  48. email: 'some@example.com',
  49. login: 'some@example.com',
  50. updated_by_id: 1,
  51. created_by_id: 1,
  52. },
  53. create_verify: {
  54. firstname: 'Firstname',
  55. lastname: 'Lastname',
  56. image: nil,
  57. email: 'some@example.com',
  58. login: 'some@example.com',
  59. },
  60. },
  61. {
  62. name: '#4 - simple create - nil as lastname',
  63. create: {
  64. firstname: 'Firstname Lastname',
  65. lastname: '',
  66. email: 'some@example.com',
  67. login: 'some@example.com',
  68. updated_by_id: 1,
  69. created_by_id: 1,
  70. },
  71. create_verify: {
  72. firstname: 'Firstname',
  73. lastname: 'Lastname',
  74. image: nil,
  75. email: 'some@example.com',
  76. login: 'some@example.com',
  77. },
  78. },
  79. {
  80. name: '#5 - simple create - no lastname, firstname with ","',
  81. create: {
  82. firstname: 'Lastname, Firstname',
  83. lastname: '',
  84. email: 'some@example.com',
  85. login: 'some@example.com',
  86. updated_by_id: 1,
  87. created_by_id: 1,
  88. },
  89. create_verify: {
  90. firstname: 'Firstname',
  91. lastname: 'Lastname',
  92. email: 'some@example.com',
  93. login: 'some@example.com',
  94. },
  95. },
  96. {
  97. name: '#6 - simple create - no lastname/firstname',
  98. create: {
  99. firstname: '',
  100. lastname: '',
  101. email: 'firstname.lastname@example.com',
  102. login: 'login-1',
  103. updated_by_id: 1,
  104. created_by_id: 1,
  105. },
  106. create_verify: {
  107. firstname: 'Firstname',
  108. lastname: 'Lastname',
  109. fullname: 'Firstname Lastname',
  110. email: 'firstname.lastname@example.com',
  111. login: 'login-1',
  112. },
  113. },
  114. {
  115. name: '#7 - simple create - no lastname/firstnam',
  116. create: {
  117. firstname: '',
  118. lastname: '',
  119. email: 'FIRSTNAME.lastname@example.com',
  120. login: 'login-2',
  121. updated_by_id: 1,
  122. created_by_id: 1,
  123. },
  124. create_verify: {
  125. firstname: 'Firstname',
  126. lastname: 'Lastname',
  127. email: 'firstname.lastname@example.com',
  128. login: 'login-2',
  129. },
  130. },
  131. {
  132. name: '#8 - simple create - nill as fristname and lastname',
  133. create: {
  134. firstname: '',
  135. lastname: '',
  136. email: 'FIRSTNAME.lastname@example.com',
  137. login: 'login-3',
  138. updated_by_id: 1,
  139. created_by_id: 1,
  140. },
  141. create_verify: {
  142. firstname: 'Firstname',
  143. lastname: 'Lastname',
  144. email: 'firstname.lastname@example.com',
  145. login: 'login-3',
  146. },
  147. },
  148. {
  149. name: '#9 - update with avatar check',
  150. create: {
  151. firstname: 'Bob',
  152. lastname: 'Smith',
  153. email: 'bob.smith@example.com',
  154. login: 'login-4',
  155. updated_by_id: 1,
  156. created_by_id: 1,
  157. },
  158. create_verify: {
  159. firstname: 'Bob',
  160. lastname: 'Smith',
  161. image: nil,
  162. email: 'bob.smith@example.com',
  163. login: 'login-4',
  164. },
  165. update: {
  166. email: 'unit-test1@znuny.com',
  167. },
  168. update_verify: {
  169. firstname: 'Bob',
  170. lastname: 'Smith',
  171. image: 'a6f7f7f9dac25b2c023d403ef998801c',
  172. image_md5: 'a6f7f7f9dac25b2c023d403ef998801c',
  173. email: 'unit-test1@znuny.com',
  174. login: 'login-4',
  175. }
  176. },
  177. {
  178. name: '#10 - update create with avatar check',
  179. create: {
  180. firstname: 'Bob',
  181. lastname: 'Smith',
  182. email: 'unit-test2@znuny.com',
  183. login: 'login-5',
  184. updated_by_id: 1,
  185. created_by_id: 1,
  186. },
  187. create_verify: {
  188. firstname: 'Bob',
  189. lastname: 'Smith',
  190. image: '8765a1ac93f54405d8dfdd856c48c31f',
  191. image_md5: '8765a1ac93f54405d8dfdd856c48c31f',
  192. email: 'unit-test2@znuny.com',
  193. login: 'login-5',
  194. },
  195. update: {
  196. email: 'unit-test1@znuny.com',
  197. },
  198. update_verify: {
  199. firstname: 'Bob',
  200. lastname: 'Smith',
  201. image: 'a6f7f7f9dac25b2c023d403ef998801c',
  202. image_md5: 'a6f7f7f9dac25b2c023d403ef998801c',
  203. email: 'unit-test1@znuny.com',
  204. login: 'login-5',
  205. }
  206. },
  207. {
  208. name: '#11 - update create with login/email check',
  209. create: {
  210. firstname: '',
  211. lastname: '',
  212. email: 'caoyaoewfzfw@21222cn.com',
  213. updated_by_id: 1,
  214. created_by_id: 1,
  215. },
  216. create_verify: {
  217. firstname: '',
  218. lastname: '',
  219. fullname: 'caoyaoewfzfw@21222cn.com',
  220. email: 'caoyaoewfzfw@21222cn.com',
  221. login: 'caoyaoewfzfw@21222cn.com',
  222. },
  223. update: {
  224. email: 'caoyaoewfzfw@212224cn.com',
  225. },
  226. update_verify: {
  227. firstname: '',
  228. lastname: '',
  229. email: 'caoyaoewfzfw@212224cn.com',
  230. fullname: 'caoyaoewfzfw@212224cn.com',
  231. login: 'caoyaoewfzfw@212224cn.com',
  232. }
  233. },
  234. {
  235. name: '#12 - update create with login/email check',
  236. create: {
  237. firstname: 'Firstname',
  238. lastname: 'Lastname',
  239. email: 'some_tEst11@example.com',
  240. updated_by_id: 1,
  241. created_by_id: 1,
  242. },
  243. create_verify: {
  244. firstname: 'Firstname',
  245. lastname: 'Lastname',
  246. fullname: 'Firstname Lastname',
  247. email: 'some_test11@example.com',
  248. },
  249. update: {
  250. email: 'some_Test11-1@example.com',
  251. },
  252. update_verify: {
  253. firstname: 'Firstname',
  254. lastname: 'Lastname',
  255. email: 'some_test11-1@example.com',
  256. fullname: 'Firstname Lastname',
  257. login: 'some_test11-1@example.com',
  258. }
  259. },
  260. ]
  261. tests.each do |test|
  262. # check if user exists
  263. user = User.find_by(login: test[:create][:login])
  264. if user
  265. user.destroy!
  266. end
  267. user = User.create!(test[:create])
  268. test[:create_verify].each do |key, value|
  269. next if key == :image_md5
  270. if user.respond_to?(key)
  271. result = user.send(key)
  272. if value.nil?
  273. assert_nil(result, "create check #{key} in (#{test[:name]})")
  274. else
  275. assert_equal(result, value, "create check #{key} in (#{test[:name]})")
  276. end
  277. else
  278. assert_equal(user[key], value, "create check #{key} in (#{test[:name]})")
  279. end
  280. end
  281. if test[:create_verify][:image_md5]
  282. file = Avatar.get_by_hash(user.image)
  283. file_md5 = Digest::MD5.hexdigest(file.content)
  284. assert_equal(file_md5, test[:create_verify][:image_md5], "create avatar md5 check in (#{test[:name]})")
  285. end
  286. if test[:update]
  287. user.update!(test[:update])
  288. test[:update_verify].each do |key, value|
  289. next if key == :image_md5
  290. if user.respond_to?(key)
  291. assert_equal(user.send(key), value, "update check #{key} in (#{test[:name]})")
  292. else
  293. assert_equal(user[key], value, "update check #{key} in (#{test[:name]})")
  294. end
  295. end
  296. if test[:update_verify][:image_md5]
  297. file = Avatar.get_by_hash(user.image)
  298. file_md5 = Digest::MD5.hexdigest(file.content)
  299. assert_equal(file_md5, test[:update_verify][:image_md5], "update avatar md5 check in (#{test[:name]})")
  300. end
  301. end
  302. user.destroy!
  303. end
  304. end
  305. test 'strange spaces' do
  306. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  307. email = "customer_email#{name}@example.com"
  308. customer = User.create!(
  309. firstname: 'Role',
  310. lastname: "Customer#{name}",
  311. email: " #{email} ",
  312. password: 'customerpw',
  313. active: true,
  314. roles: Role.where(name: %w(Customer)),
  315. updated_by_id: 1,
  316. created_by_id: 1,
  317. )
  318. assert(customer)
  319. assert_equal(email, customer.email)
  320. customer.destroy!
  321. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  322. email = "customer_email#{name}@example.com"
  323. customer = User.create!(
  324. firstname: "\u{00a0}\u{00a0}Role",
  325. lastname: "Customer#{name} \u{00a0}",
  326. email: "\u{00a0}#{email}\u{00a0}",
  327. password: 'customerpw',
  328. active: true,
  329. roles: Role.where(name: %w(Customer)),
  330. updated_by_id: 1,
  331. created_by_id: 1,
  332. )
  333. assert(customer)
  334. assert_equal('Role', customer.firstname)
  335. assert_equal("Customer#{name}", customer.lastname)
  336. assert_equal(email, customer.email)
  337. customer.destroy!
  338. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  339. email = "customer_email#{name}@example.com"
  340. customer = User.create!(
  341. firstname: "\u{200B}\u{200B}Role",
  342. lastname: "Customer#{name} \u{200B}",
  343. email: "\u{200B}#{email}\u{200B}",
  344. password: 'customerpw',
  345. active: true,
  346. roles: Role.where(name: %w(Customer)),
  347. updated_by_id: 1,
  348. created_by_id: 1,
  349. )
  350. assert(customer)
  351. assert_equal('Role', customer.firstname)
  352. assert_equal("Customer#{name}", customer.lastname)
  353. assert_equal(email, customer.email)
  354. customer.destroy!
  355. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  356. email = "customer_email#{name}@example.com"
  357. customer = User.create!(
  358. firstname: "\u{200B}\u{200B}Role\u{00a0}",
  359. lastname: "\u{00a0}\u{00a0}Customer#{name} \u{200B}",
  360. email: "\u{200B}#{email}\u{200B}",
  361. password: 'customerpw',
  362. active: true,
  363. roles: Role.where(name: %w(Customer)),
  364. updated_by_id: 1,
  365. created_by_id: 1,
  366. )
  367. assert(customer)
  368. assert_equal('Role', customer.firstname)
  369. assert_equal("Customer#{name}", customer.lastname)
  370. assert_equal(email, customer.email)
  371. customer.destroy!
  372. name = "#{Time.zone.now.to_i}-#{rand(999_999_999_999)}"
  373. email = "customer_email#{name}@example.com"
  374. customer = User.create!(
  375. firstname: "\u{200a}\u{200b}\u{202F}\u{205F}Role\u{2007}\u{2008}",
  376. lastname: "\u{00a0}\u{00a0}Customer#{name}\u{3000}\u{FEFF}\u{2000}",
  377. email: "\u{200B}#{email}\u{200B}\u{2007}\u{2008}",
  378. password: 'customerpw',
  379. active: true,
  380. roles: Role.where(name: %w(Customer)),
  381. updated_by_id: 1,
  382. created_by_id: 1,
  383. )
  384. assert(customer)
  385. assert_equal('Role', customer.firstname)
  386. assert_equal("Customer#{name}", customer.lastname)
  387. assert_equal(email, customer.email)
  388. customer.destroy!
  389. end
  390. test 'without email - but login eq email' do
  391. name = rand(999_999_999)
  392. login = "admin-role_without_email#{name}@example.com"
  393. email = "admin-role_without_email#{name}@example.com"
  394. admin = User.create_or_update(
  395. login: login,
  396. firstname: 'Role',
  397. lastname: "Admin#{name}",
  398. #email: "",
  399. password: 'adminpw',
  400. active: true,
  401. roles: Role.where(name: %w(Admin Agent)),
  402. updated_by_id: 1,
  403. created_by_id: 1,
  404. )
  405. assert(admin.id)
  406. assert_equal(admin.login, login)
  407. assert_equal(admin.email, '')
  408. admin.email = email
  409. admin.save!
  410. assert_equal(admin.login, login)
  411. assert_equal(admin.email, email)
  412. admin.email = ''
  413. admin.save!
  414. assert(admin.id)
  415. assert(admin.login)
  416. assert_not_equal(admin.login, login)
  417. assert_equal(admin.email, '')
  418. admin.destroy!
  419. end
  420. test 'without email - but login ne email' do
  421. name = rand(999_999_999)
  422. login = "admin-role_without_email#{name}"
  423. email = "admin-role_without_email#{name}@example.com"
  424. admin = User.create_or_update(
  425. login: login,
  426. firstname: 'Role',
  427. lastname: "Admin#{name}",
  428. #email: "",
  429. password: 'adminpw',
  430. active: true,
  431. roles: Role.where(name: %w(Admin Agent)),
  432. updated_by_id: 1,
  433. created_by_id: 1,
  434. )
  435. assert(admin.id)
  436. assert_equal(admin.login, login)
  437. assert_equal(admin.email, '')
  438. admin.email = email
  439. admin.save!
  440. assert_equal(admin.login, login)
  441. assert_equal(admin.email, email)
  442. admin.email = ''
  443. admin.save!
  444. assert(admin.id)
  445. assert_equal(admin.login, login)
  446. assert_equal(admin.email, '')
  447. admin.destroy!
  448. end
  449. test 'uniq email' do
  450. name = rand(999_999_999)
  451. email1 = "admin1-role_without_email#{name}@example.com"
  452. admin1 = User.create!(
  453. login: email1,
  454. firstname: 'Role',
  455. lastname: "Admin1#{name}",
  456. email: email1,
  457. password: 'adminpw',
  458. active: true,
  459. roles: Role.where(name: %w(Admin Agent)),
  460. updated_by_id: 1,
  461. created_by_id: 1,
  462. )
  463. assert(admin1.id)
  464. assert_equal(admin1.email, email1)
  465. assert_raises(Exceptions::UnprocessableEntity) do
  466. User.create!(
  467. login: "#{email1}-1",
  468. firstname: 'Role',
  469. lastname: "Admin1#{name}",
  470. email: email1,
  471. password: 'adminpw',
  472. active: true,
  473. roles: Role.where(name: %w(Admin Agent)),
  474. updated_by_id: 1,
  475. created_by_id: 1,
  476. )
  477. end
  478. email2 = "admin2-role_without_email#{name}@example.com"
  479. admin2 = User.create!(
  480. firstname: 'Role',
  481. lastname: "Admin2#{name}",
  482. email: email2,
  483. password: 'adminpw',
  484. active: true,
  485. roles: Role.where(name: %w(Admin Agent)),
  486. updated_by_id: 1,
  487. created_by_id: 1,
  488. )
  489. assert_raises(Exceptions::UnprocessableEntity) do
  490. admin2.email = email1
  491. admin2.save!
  492. end
  493. admin1.email = admin1.email
  494. admin1.save!
  495. admin2.destroy!
  496. admin1.destroy!
  497. end
  498. test 'uniq email - multiple use' do
  499. Setting.set('user_email_multiple_use', true)
  500. name = rand(999_999_999)
  501. email1 = "admin1-role_without_email#{name}@example.com"
  502. admin1 = User.create!(
  503. login: email1,
  504. firstname: 'Role',
  505. lastname: "Admin1#{name}",
  506. email: email1,
  507. password: 'adminpw',
  508. active: true,
  509. roles: Role.where(name: %w(Admin Agent)),
  510. updated_by_id: 1,
  511. created_by_id: 1,
  512. )
  513. assert(admin1.id)
  514. assert_equal(admin1.email, email1)
  515. admin2 = User.create!(
  516. login: "#{email1}-1",
  517. firstname: 'Role',
  518. lastname: "Admin1#{name}",
  519. email: email1,
  520. password: 'adminpw',
  521. active: true,
  522. roles: Role.where(name: %w(Admin Agent)),
  523. updated_by_id: 1,
  524. created_by_id: 1,
  525. )
  526. assert_equal(admin2.email, email1)
  527. admin2.destroy!
  528. admin1.destroy!
  529. Setting.set('user_email_multiple_use', false)
  530. end
  531. test 'ensure roles' do
  532. name = rand(999_999_999)
  533. admin = User.create_or_update(
  534. login: "admin-role#{name}@example.com",
  535. firstname: 'Role',
  536. lastname: "Admin#{name}",
  537. email: "admin-role#{name}@example.com",
  538. password: 'adminpw',
  539. active: true,
  540. roles: Role.where(name: %w(Admin Agent)),
  541. updated_by_id: 1,
  542. created_by_id: 1,
  543. )
  544. customer1 = User.create_or_update(
  545. login: "user-ensure-role1-#{name}@example.com",
  546. firstname: 'Role',
  547. lastname: "Customer#{name}",
  548. email: "user-ensure-role1-#{name}@example.com",
  549. password: 'customerpw',
  550. active: true,
  551. updated_by_id: 1,
  552. created_by_id: 1,
  553. )
  554. assert_equal(customer1.role_ids.sort, Role.signup_role_ids)
  555. roles = Role.where(name: 'Agent')
  556. customer1.roles = roles
  557. customer1.save!
  558. assert_equal(customer1.role_ids.count, 1)
  559. assert_equal(customer1.role_ids.first, roles.first.id)
  560. assert_equal(customer1.roles.first.id, roles.first.id)
  561. customer1.roles = []
  562. customer1.save!
  563. assert_equal(customer1.role_ids.sort, Role.signup_role_ids)
  564. customer1.destroy!
  565. customer2 = User.create_or_update(
  566. login: "user-ensure-role2-#{name}@example.com",
  567. firstname: 'Role',
  568. lastname: "Customer#{name}",
  569. email: "user-ensure-role2-#{name}@example.com",
  570. password: 'customerpw',
  571. roles: roles,
  572. active: true,
  573. updated_by_id: 1,
  574. created_by_id: 1,
  575. )
  576. assert_equal(customer2.role_ids.count, 1)
  577. assert_equal(customer2.role_ids.first, roles.first.id)
  578. assert_equal(customer2.roles.first.id, roles.first.id)
  579. roles = Role.where(name: 'Admin')
  580. customer2.role_ids = [roles.first.id]
  581. customer2.save!
  582. assert_equal(customer2.role_ids.count, 1)
  583. assert_equal(customer2.role_ids.first, roles.first.id)
  584. assert_equal(customer2.roles.first.id, roles.first.id)
  585. customer2.roles = []
  586. customer2.save!
  587. assert_equal(customer2.role_ids.sort, Role.signup_role_ids)
  588. customer2.destroy!
  589. customer3 = User.create_or_update(
  590. login: "user-ensure-role2-#{name}@example.com",
  591. firstname: 'Role',
  592. lastname: "Customer#{name}",
  593. email: "user-ensure-role2-#{name}@example.com",
  594. password: 'customerpw',
  595. roles: roles,
  596. active: true,
  597. updated_by_id: 1,
  598. created_by_id: 1,
  599. )
  600. assert_raises(RuntimeError) do
  601. customer3.roles = Role.where(name: %w(Customer Admin))
  602. end
  603. assert_raises(RuntimeError) do
  604. customer3.roles = Role.where(name: %w(Customer Agent))
  605. end
  606. customer3.roles = Role.where(name: %w(Admin Agent))
  607. customer3.roles.each do |role|
  608. assert_not_equal(role.name, 'Customer')
  609. end
  610. customer3.roles = Role.where(name: 'Admin')
  611. customer3.roles.each do |role|
  612. assert_not_equal(role.name, 'Customer')
  613. end
  614. customer3.roles = Role.where(name: 'Agent')
  615. customer3.roles.each do |role|
  616. assert_not_equal(role.name, 'Customer')
  617. end
  618. customer3.destroy!
  619. admin.destroy!
  620. end
  621. test 'user default preferences' do
  622. name = rand(999_999_999)
  623. groups = Group.where(name: 'Users')
  624. roles = Role.where(name: 'Agent')
  625. agent1 = User.create_or_update(
  626. login: "agent-default-preferences#{name}@example.com",
  627. firstname: 'Preferences',
  628. lastname: "Agent#{name}",
  629. email: "agent-default-preferences#{name}@example.com",
  630. password: 'agentpw',
  631. active: true,
  632. roles: roles,
  633. groups: groups,
  634. preferences: {
  635. locale: 'de-de',
  636. },
  637. updated_by_id: 1,
  638. created_by_id: 1,
  639. )
  640. agent1 = User.find(agent1.id)
  641. assert(agent1.preferences)
  642. assert(agent1.preferences['locale'])
  643. assert_equal(agent1.preferences['locale'], 'de-de')
  644. assert(agent1.preferences['notification_config'])
  645. assert(agent1.preferences['notification_config']['matrix'])
  646. assert(agent1.preferences['notification_config']['matrix']['create'])
  647. assert(agent1.preferences['notification_config']['matrix']['update'])
  648. roles = Role.where(name: 'Customer')
  649. customer1 = User.create_or_update(
  650. login: "customer-default-preferences#{name}@example.com",
  651. firstname: 'Preferences',
  652. lastname: "Customer#{name}",
  653. email: "customer-default-preferences#{name}@example.com",
  654. password: 'customerpw',
  655. active: true,
  656. roles: roles,
  657. preferences: {
  658. locale: 'de-de',
  659. },
  660. updated_by_id: 1,
  661. created_by_id: 1,
  662. )
  663. customer1 = User.find(customer1.id)
  664. assert(customer1.preferences)
  665. assert(customer1.preferences['locale'])
  666. assert_equal(customer1.preferences['locale'], 'de-de')
  667. assert_not(customer1.preferences['notification_config'])
  668. customer1 = User.find(customer1.id)
  669. customer1.roles = Role.where(name: 'Agent')
  670. customer1 = User.find(customer1.id)
  671. assert(customer1.preferences)
  672. assert(customer1.preferences['locale'])
  673. assert_equal(customer1.preferences['locale'], 'de-de')
  674. assert(customer1.preferences['notification_config'])
  675. assert(customer1.preferences['notification_config']['matrix']['create'])
  676. assert(customer1.preferences['notification_config']['matrix']['update'])
  677. end
  678. test 'permission' do
  679. test_role_1 = Role.create_or_update(
  680. name: 'Test1',
  681. note: 'To configure your system.',
  682. preferences: {
  683. not: ['Test3'],
  684. },
  685. updated_by_id: 1,
  686. created_by_id: 1
  687. )
  688. test_role_2 = Role.create_or_update(
  689. name: 'Test2',
  690. note: 'To work on Tickets.',
  691. preferences: {
  692. not: ['Test3'],
  693. },
  694. updated_by_id: 1,
  695. created_by_id: 1
  696. )
  697. test_role_3 = Role.create_or_update(
  698. name: 'Test3',
  699. note: 'People who create Tickets ask for help.',
  700. preferences: {
  701. not: %w(Test1 Test2),
  702. },
  703. updated_by_id: 1,
  704. created_by_id: 1
  705. )
  706. test_role_4 = Role.create_or_update(
  707. name: 'Test4',
  708. note: 'Access the report area.',
  709. preferences: {},
  710. created_by_id: 1,
  711. updated_by_id: 1,
  712. )
  713. name = rand(999_999_999)
  714. assert_raises(RuntimeError) do
  715. User.create_or_update(
  716. login: "customer-role#{name}@example.com",
  717. firstname: 'Role',
  718. lastname: "Customer#{name}",
  719. email: "customer-role#{name}@example.com",
  720. password: 'customerpw',
  721. active: true,
  722. roles: [test_role_1, test_role_3],
  723. updated_by_id: 1,
  724. created_by_id: 1,
  725. )
  726. end
  727. assert_raises(RuntimeError) do
  728. User.create_or_update(
  729. login: "customer-role#{name}@example.com",
  730. firstname: 'Role',
  731. lastname: "Customer#{name}",
  732. email: "customer-role#{name}@example.com",
  733. password: 'customerpw',
  734. active: true,
  735. roles: [test_role_2, test_role_3],
  736. updated_by_id: 1,
  737. created_by_id: 1,
  738. )
  739. end
  740. user1 = User.create_or_update(
  741. login: "customer-role#{name}@example.com",
  742. firstname: 'Role',
  743. lastname: "Customer#{name}",
  744. email: "customer-role#{name}@example.com",
  745. password: 'customerpw',
  746. active: true,
  747. roles: [test_role_1, test_role_2],
  748. updated_by_id: 1,
  749. created_by_id: 1,
  750. )
  751. assert(user1.role_ids.include?(test_role_1.id))
  752. assert(user1.role_ids.include?(test_role_2.id))
  753. assert_not(user1.role_ids.include?(test_role_3.id))
  754. assert_not(user1.role_ids.include?(test_role_4.id))
  755. user1 = User.create_or_update(
  756. login: "customer-role#{name}@example.com",
  757. firstname: 'Role',
  758. lastname: "Customer#{name}",
  759. email: "customer-role#{name}@example.com",
  760. password: 'customerpw',
  761. active: true,
  762. roles: [test_role_1, test_role_4],
  763. updated_by_id: 1,
  764. created_by_id: 1,
  765. )
  766. assert(user1.role_ids.include?(test_role_1.id))
  767. assert_not(user1.role_ids.include?(test_role_2.id))
  768. assert_not(user1.role_ids.include?(test_role_3.id))
  769. assert(user1.role_ids.include?(test_role_4.id))
  770. assert_raises(RuntimeError) do
  771. User.create_or_update(
  772. login: "customer-role#{name}@example.com",
  773. firstname: 'Role',
  774. lastname: "Customer#{name}",
  775. email: "customer-role#{name}@example.com",
  776. password: 'customerpw',
  777. active: true,
  778. roles: [test_role_1, test_role_3],
  779. updated_by_id: 1,
  780. created_by_id: 1,
  781. )
  782. end
  783. assert_raises(RuntimeError) do
  784. User.create_or_update(
  785. login: "customer-role#{name}@example.com",
  786. firstname: 'Role',
  787. lastname: "Customer#{name}",
  788. email: "customer-role#{name}@example.com",
  789. password: 'customerpw',
  790. active: true,
  791. roles: [test_role_2, test_role_3],
  792. updated_by_id: 1,
  793. created_by_id: 1,
  794. )
  795. end
  796. assert(user1.role_ids.include?(test_role_1.id))
  797. assert_not(user1.role_ids.include?(test_role_2.id))
  798. assert_not(user1.role_ids.include?(test_role_3.id))
  799. assert(user1.role_ids.include?(test_role_4.id))
  800. end
  801. test 'permission default' do
  802. name = rand(999_999_999)
  803. admin_count = User.with_permissions('admin').count
  804. admin = User.create_or_update(
  805. login: "admin-role#{name}@example.com",
  806. firstname: 'Role',
  807. lastname: "Admin#{name}",
  808. email: "admin-role#{name}@example.com",
  809. password: 'adminpw',
  810. active: true,
  811. roles: Role.where(name: %w(Admin Agent)),
  812. updated_by_id: 1,
  813. created_by_id: 1,
  814. )
  815. agent_count = User.with_permissions('ticket.agent').count
  816. agent = User.create_or_update(
  817. login: "agent-role#{name}@example.com",
  818. firstname: 'Role',
  819. lastname: "Agent#{name}",
  820. email: "agent-role#{name}@example.com",
  821. password: 'agentpw',
  822. active: true,
  823. roles: Role.where(name: 'Agent'),
  824. updated_by_id: 1,
  825. created_by_id: 1,
  826. )
  827. customer_count = User.with_permissions('ticket.customer').count
  828. customer = User.create_or_update(
  829. login: "customer-role#{name}@example.com",
  830. firstname: 'Role',
  831. lastname: "Customer#{name}",
  832. email: "customer-role#{name}@example.com",
  833. password: 'customerpw',
  834. active: true,
  835. roles: Role.where(name: 'Customer'),
  836. updated_by_id: 1,
  837. created_by_id: 1,
  838. )
  839. users = User.with_permissions('not_existing')
  840. assert(users.empty?)
  841. users = User.with_permissions('admin')
  842. assert_equal(admin_count + 1, users.count)
  843. assert_equal(admin.login, users.last.login)
  844. users = User.with_permissions('admin.session')
  845. assert_equal(admin_count + 1, users.count)
  846. assert_equal(admin.login, users.last.login)
  847. users = User.with_permissions(['admin.session', 'not_existing'])
  848. assert_equal(admin_count + 1, users.count)
  849. assert_equal(admin.login, users.last.login)
  850. users = User.with_permissions('ticket.agent')
  851. assert_equal(agent_count + 1, users.count)
  852. assert_equal(agent.login, users.last.login)
  853. users = User.with_permissions(['ticket.agent', 'not_existing'])
  854. assert_equal(agent_count + 1, users.count)
  855. assert_equal(agent.login, users.last.login)
  856. users = User.with_permissions('ticket.customer')
  857. assert_equal(customer_count + 1, users.count)
  858. assert_equal(customer.login, users.last.login)
  859. users = User.with_permissions(['ticket.customer', 'not_existing'])
  860. assert_equal(customer_count + 1, users.count)
  861. assert_equal(customer.login, users.last.login)
  862. end
  863. test 'min admin permission check' do
  864. # delete inital admin
  865. User.find_by(login: 'admin@example.com').destroy
  866. # store current admin count
  867. admin_count_inital = User.with_permissions('admin').count
  868. assert_equal(0, admin_count_inital)
  869. # create two admin users
  870. random = rand(999_999_999)
  871. admin1 = User.create_or_update(
  872. login: "1admin-role#{random}@example.com",
  873. firstname: 'Role',
  874. lastname: "Admin#{random}",
  875. email: "admin-role#{random}@example.com",
  876. password: 'adminpw',
  877. active: true,
  878. roles: Role.where(name: %w(Admin Agent)),
  879. updated_by_id: 1,
  880. created_by_id: 1,
  881. )
  882. random = rand(999_999_999)
  883. admin2 = User.create_or_update(
  884. login: "2admin-role#{random}@example.com",
  885. firstname: 'Role',
  886. lastname: "Admin#{random}",
  887. email: "admin-role#{random}@example.com",
  888. password: 'adminpw',
  889. active: true,
  890. roles: Role.where(name: %w(Admin Agent)),
  891. updated_by_id: 1,
  892. created_by_id: 1,
  893. )
  894. random = rand(999_999_999)
  895. admin3 = User.create_or_update(
  896. login: "2admin-role#{random}@example.com",
  897. firstname: 'Role',
  898. lastname: "Admin#{random}",
  899. email: "admin-role#{random}@example.com",
  900. password: 'adminpw',
  901. active: true,
  902. roles: Role.where(name: %w(Admin Agent)),
  903. updated_by_id: 1,
  904. created_by_id: 1,
  905. )
  906. admin_count_inital = User.with_permissions('admin').count
  907. assert_equal(3, admin_count_inital)
  908. admin1.update!(roles: Role.where(name: %w(Agent)))
  909. admin_count_inital = User.with_permissions('admin').count
  910. assert_equal(2, admin_count_inital)
  911. admin2.update!(roles: Role.where(name: %w(Agent)))
  912. admin_count_inital = User.with_permissions('admin').count
  913. assert_equal(1, admin_count_inital)
  914. assert_raises(Exceptions::UnprocessableEntity) do
  915. admin3.update!(roles: Role.where(name: %w(Agent)))
  916. end
  917. admin_count_inital = User.with_permissions('admin').count
  918. assert_equal(1, admin_count_inital)
  919. assert_raises(Exceptions::UnprocessableEntity) do
  920. admin3.active = false
  921. admin3.save!
  922. end
  923. assert_equal(1, User.with_permissions('admin').count)
  924. admin_role = Role.find_by(name: 'Admin')
  925. assert_raises(Exceptions::UnprocessableEntity) do
  926. admin_role.active = false
  927. admin_role.save!
  928. end
  929. assert_raises(Exceptions::UnprocessableEntity) do
  930. admin_role.permission_revoke('admin')
  931. end
  932. assert_equal(1, User.with_permissions('admin').count)
  933. end
  934. test 'only valid agent in group permission check' do
  935. name = rand(999_999_999)
  936. group = Group.create!(
  937. name: "ValidAgentGroupPermission-#{name}",
  938. active: true,
  939. updated_by_id: 1,
  940. created_by_id: 1,
  941. )
  942. roles = Role.where(name: 'Agent')
  943. agent1 = User.create_or_update(
  944. login: "agent-default-vaild_agent_group_permission-1#{name}@example.com",
  945. firstname: 'vaild_agent_group_permission-1',
  946. lastname: "Agent#{name}",
  947. email: "agent-default-vaild_agent_group_permission-1#{name}@example.com",
  948. password: 'agentpw',
  949. active: true,
  950. roles: roles,
  951. groups: [group],
  952. updated_by_id: 1,
  953. created_by_id: 1,
  954. )
  955. agent2 = User.create_or_update(
  956. login: "agent-default-vaild_agent_group_permission-2#{name}@example.com",
  957. firstname: 'vaild_agent_group_permission-2',
  958. lastname: "Agent#{name}",
  959. email: "agent-default-vaild_agent_group_permission-2#{name}@example.com",
  960. password: 'agentpw',
  961. active: true,
  962. roles: roles,
  963. groups: [group],
  964. updated_by_id: 1,
  965. created_by_id: 1,
  966. )
  967. assert_equal(2, User.group_access(group.id, 'full').count)
  968. agent2.active = false
  969. agent2.save!
  970. assert_equal(1, User.group_access(group.id, 'full').count)
  971. agent2.active = true
  972. agent2.save!
  973. assert_equal(2, User.group_access(group.id, 'full').count)
  974. roles = Role.where(name: 'Customer')
  975. agent2.roles = roles
  976. agent2.save!
  977. assert_equal(1, User.group_access(group.id, 'full').count)
  978. end
  979. end