scope_spec.rb 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe ActivityStreamPolicy::Scope do
  4. subject(:scope) { described_class.new(user, ActivityStream) }
  5. describe '#resolve' do
  6. let!(:activity_streams) do
  7. {
  8. permissionless: {
  9. grouped: create(:activity_stream, permission_id: nil, group_id: Group.first.id),
  10. groupless: create(:activity_stream, permission_id: nil, group_id: nil),
  11. },
  12. admin: {
  13. grouped: create(:activity_stream, permission_id: admin_permission.id, group_id: Group.first.id),
  14. groupless: create(:activity_stream, permission_id: admin_permission.id, group_id: nil),
  15. },
  16. agent: {
  17. grouped: create(:activity_stream, permission_id: agent_permission.id, group_id: Group.first.id),
  18. groupless: create(:activity_stream, permission_id: agent_permission.id, group_id: nil),
  19. }
  20. }
  21. end
  22. let(:admin_permission) { Permission.find_by(name: 'admin') }
  23. let(:agent_permission) { Permission.find_by(name: 'ticket.agent') }
  24. context 'with customer' do
  25. let(:user) { create(:customer) }
  26. it 'returns an empty ActiveRecord::Relation (no arrays--must be chainable!)' do
  27. expect(scope.resolve)
  28. .to be_empty
  29. .and be_an(ActiveRecord::Relation)
  30. end
  31. end
  32. context 'with groupless agent' do
  33. let(:user) { create(:agent, groups: []) }
  34. it 'returns agent ActivityStreams (w/o permission: nil)' do
  35. expect(scope.resolve)
  36. .to match_array([activity_streams[:agent][:groupless]])
  37. end
  38. it 'does not include groups’ agent ActivityStreams' do
  39. expect(scope.resolve)
  40. .not_to include([activity_streams[:agent][:grouped]])
  41. end
  42. end
  43. context 'with grouped agent' do
  44. let(:user) { create(:agent, groups: [Group.first]) }
  45. it 'returns same ActivityStreams as groupless agent, plus groups’ (WITH permission: nil)' do
  46. expect(scope.resolve)
  47. .to match_array([activity_streams[:permissionless][:grouped],
  48. *activity_streams[:agent].values])
  49. end
  50. end
  51. context 'with groupless admin' do
  52. # Why do we need Import Mode?
  53. # Without it, create(:admin) generates yet another ActivityStream
  54. let(:user) do
  55. Setting.set('import_mode', true)
  56. .then { create(:admin, groups: []) }
  57. .tap { Setting.set('import_mode', false) }
  58. end
  59. it 'returns agent/admin ActivityStreams (w/o permission: nil)' do
  60. expect(scope.resolve)
  61. .to match_array([activity_streams[:admin][:groupless],
  62. activity_streams[:agent][:groupless]])
  63. end
  64. it 'does not include groups’ agent ActivityStreams' do
  65. expect(scope.resolve)
  66. .not_to include([activity_streams[:admin][:grouped]])
  67. end
  68. end
  69. context 'with grouped admin' do
  70. # Why do we need Import Mode?
  71. # Without it, create(:admin) generates yet another ActivityStream
  72. let(:user) do
  73. Setting.set('import_mode', true)
  74. .then { create(:admin, groups: [Group.first]) }
  75. .tap { Setting.set('import_mode', false) }
  76. end
  77. it 'returns same ActivityStreams as groupless admin, plus groups’ (WITH permission: nil)' do
  78. expect(scope.resolve)
  79. .to match_array([activity_streams[:permissionless][:grouped],
  80. *activity_streams[:admin].values,
  81. *activity_streams[:agent].values])
  82. end
  83. end
  84. end
  85. end