user_test.rb 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067
  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: 'a6f7f7f9dac25b2c023d403ef998801c',
  171. image_md5: 'a6f7f7f9dac25b2c023d403ef998801c',
  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: '8765a1ac93f54405d8dfdd856c48c31f',
  190. image_md5: '8765a1ac93f54405d8dfdd856c48c31f',
  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: 'a6f7f7f9dac25b2c023d403ef998801c',
  201. image_md5: 'a6f7f7f9dac25b2c023d403ef998801c',
  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. end