overview_spec.rb 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe Overview, type: :model do
  4. it_behaves_like 'ApplicationModel', can_assets: { associations: :users, selectors: :condition }
  5. context 'link generation' do
  6. it 'generates from name' do
  7. overview = create(:overview, name: 'Not Shown Admin 2')
  8. expect(overview.link).to eq('not_shown_admin_2')
  9. end
  10. it 'ensures uniquenes' do
  11. overview1, overview2, overview3 = create_list(:overview, 3, name: 'Übersicht')
  12. expect(overview1.link).not_to eq(overview2.link)
  13. expect(overview1.link).not_to eq(overview3.link)
  14. expect(overview2.link).not_to eq(overview3.link)
  15. end
  16. context 'given link' do
  17. it 'keeps on create' do
  18. overview = create(:overview, name: 'Übersicht', link: 'my_overview')
  19. expect(overview.link).to eq('my_overview')
  20. end
  21. it 'keeps on update' do
  22. overview = create(:overview, name: 'Übersicht')
  23. overview.update!(link: 'my_overview_2')
  24. expect(overview.link).to eq('my_overview_2')
  25. end
  26. end
  27. context 'URL save' do
  28. it 'handles umlauts' do
  29. overview = create(:overview, name: 'Übersicht')
  30. expect(overview.link).to eq('ubersicht')
  31. end
  32. it 'handles spaces' do
  33. overview = create(:overview, name: " Meine Übersicht \n")
  34. expect(overview.link).to eq('meine_ubersicht')
  35. end
  36. it 'handles special chars' do
  37. overview = create(:overview, name: 'Д дФ ф')
  38. expect(overview.link).to match(%r{^\d{1,3}$})
  39. end
  40. it 'removes special char fallback if possible' do
  41. overview = create(:overview, name: ' Д дФ ф abc ')
  42. expect(overview.link).to eq('abc')
  43. end
  44. end
  45. end
  46. describe '#rearrangement' do
  47. it 'rearranges prio of other overviews on prio change' do
  48. overview1 = create(:overview, prio: 1)
  49. overview2 = create(:overview, prio: 2)
  50. overview3 = create(:overview, prio: 3)
  51. overview2.update!(prio: 3)
  52. overviews = described_class.all.order(prio: :asc).pluck(:id)
  53. expect(overviews.first).to eq(overview1.id)
  54. expect(overviews.second).to eq(overview3.id)
  55. expect(overviews.third).to eq(overview2.id)
  56. end
  57. end
  58. describe '#fill_prio' do
  59. before do
  60. described_class.destroy_all
  61. end
  62. it 'fill an empty prio with the maximum prio plus one' do
  63. overview1 = create(:overview, prio: 1)
  64. overview2 = create(:overview, prio: 200)
  65. overview3 = create(:overview, prio: nil)
  66. overviews = described_class.all.order(prio: :asc).pluck(:id)
  67. expect(overviews).to eq [overview1.id, overview2.id, overview3.id]
  68. end
  69. it 'sets first Overview priority as 0' do
  70. overview = create :overview, prio: nil
  71. expect(overview.prio).to be 0
  72. end
  73. it 'sets new Overview priority as +1' do
  74. create :overview, prio: 123
  75. overview_next = create :overview, prio: nil
  76. expect(overview_next.prio).to be 124
  77. end
  78. end
  79. end