scope_spec.rb 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe TextModulePolicy::Scope do
  4. subject(:scope) { described_class.new(user, original_collection) }
  5. let(:original_collection) { TextModule }
  6. let(:group_a) { create(:group) }
  7. let(:text_module_a) { create(:text_module, groups: [group_a]) }
  8. let(:group_b) { create(:group) }
  9. let(:text_module_b) { create(:text_module, groups: [group_b]) }
  10. let(:text_module_c) { create(:text_module, groups: []) }
  11. before do
  12. TextModule.destroy_all
  13. text_module_a && text_module_b && text_module_c
  14. end
  15. describe '#resolve' do
  16. context 'without user' do
  17. let(:user) { nil }
  18. it 'throws exception' do
  19. expect { scope.resolve }.to raise_error %r{Authentication required}
  20. end
  21. end
  22. context 'with customer' do
  23. let(:user) { create(:customer) }
  24. it 'returns empty' do
  25. expect(scope.resolve).to be_empty
  26. end
  27. end
  28. context 'with agent' do
  29. let(:user) { create(:agent) }
  30. before { user.groups << group_a }
  31. it 'returns global and group text_module' do
  32. expect(scope.resolve).to contain_exactly(text_module_a, text_module_c)
  33. end
  34. context 'when using default context' do
  35. it 'calls available_in_groups with change and create' do
  36. allow(user).to receive(:group_ids_access).and_call_original
  37. scope.resolve
  38. expect(user).to have_received(:group_ids_access).with(%i[change create])
  39. end
  40. end
  41. context 'when using custom context' do
  42. it 'forwards custom context to available_in_groups' do
  43. allow(user).to receive(:group_ids_access).and_call_original
  44. scope.resolve(context: :custom)
  45. expect(user).to have_received(:group_ids_access).with(:custom)
  46. end
  47. end
  48. end
  49. context 'with admin' do
  50. let(:user) { create(:admin) }
  51. before { user.groups << group_b }
  52. it 'returns all text_modules' do
  53. expect(scope.resolve).to contain_exactly(text_module_a, text_module_b, text_module_c)
  54. end
  55. end
  56. end
  57. end