macro_spec.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. require 'models/concerns/has_collection_update_examples'
  4. require 'models/concerns/has_xss_sanitized_note_examples'
  5. require 'models/application_model/has_cache_examples'
  6. require 'models/concerns/has_optional_groups_examples'
  7. RSpec.describe Macro, type: :model do
  8. it_behaves_like 'HasCollectionUpdate', collection_factory: :macro
  9. it_behaves_like 'HasXssSanitizedNote', model_factory: :macro
  10. it_behaves_like 'HasOptionalGroups', model_factory: :macro
  11. describe 'validation' do
  12. it 'uses Validations::VerifyPerformRulesValidator' do
  13. expect(described_class).to have_validator(Validations::VerifyPerformRulesValidator).on(:perform)
  14. end
  15. end
  16. describe 'Instance methods:' do
  17. describe '#applicable_on?' do
  18. let(:ticket) { create(:ticket) }
  19. let(:ticket_a) { create(:ticket, group: group_a) }
  20. let(:ticket_b) { create(:ticket, group: group_b) }
  21. let(:ticket_c) { create(:ticket, group: group_c) }
  22. let(:group_a) { create(:group) }
  23. let(:group_b) { create(:group) }
  24. let(:group_c) { create(:group) }
  25. context 'when macro has no groups' do
  26. subject(:macro) { create(:macro, groups: []) }
  27. it 'return true for a single group' do
  28. expect(macro).to be_applicable_on(ticket)
  29. end
  30. it 'return true for multiple tickets' do
  31. expect(macro).to be_applicable_on([ticket, ticket_a, ticket_b])
  32. end
  33. end
  34. context 'when macro has a single group' do
  35. subject(:macro) { create(:macro, groups: [group_a]) }
  36. it 'returns true if macro group matches ticket' do
  37. expect(macro).to be_applicable_on(ticket_a)
  38. end
  39. it 'returns false if macro group does not match ticket' do
  40. expect(macro).not_to be_applicable_on(ticket_b)
  41. end
  42. it 'returns false if macro group match a ticket and not the other' do
  43. expect(macro).not_to be_applicable_on([ticket_a, ticket_b])
  44. end
  45. end
  46. context 'when macro has multiple groups' do
  47. subject(:macro) { create(:macro, groups: [group_a, group_c]) }
  48. it 'returns true if macro groups include ticket group' do
  49. expect(macro).to be_applicable_on(ticket_a)
  50. end
  51. it 'returns false if macro groups do not include ticket group' do
  52. expect(macro).not_to be_applicable_on(ticket_b)
  53. end
  54. it 'returns true if macro groups match tickets groups' do
  55. expect(macro).to be_applicable_on([ticket_a, ticket_c])
  56. end
  57. it 'returns false if macro groups does not match one of tickets group' do
  58. expect(macro).not_to be_applicable_on([ticket_a, ticket_b])
  59. end
  60. end
  61. end
  62. describe '#performable_on?' do
  63. let(:ticket) { create(:ticket) }
  64. let(:ticket_a) { create(:ticket, group: group_a) }
  65. let(:ticket_b) { create(:ticket, group: group_b) }
  66. let(:ticket_c) { create(:ticket, group: group_c) }
  67. let(:group_a) { create(:group) }
  68. let(:group_b) { create(:group) }
  69. let(:group_c) { create(:group) }
  70. context 'when macro has no groups' do
  71. subject(:macro) { create(:macro, groups: []) }
  72. it 'return true for a single group' do
  73. expect(macro).to be_performable_on(ticket, activator_type: nil)
  74. end
  75. context 'when macro is not active' do
  76. before { macro.update! active: false }
  77. it 'returns false if macro group does not match ticket' do
  78. expect(macro).not_to be_performable_on(ticket_b, activator_type: nil)
  79. end
  80. end
  81. end
  82. context 'when macro has a single group' do
  83. subject(:macro) { create(:macro, groups: [group_a]) }
  84. it 'returns true if macro group matches ticket' do
  85. expect(macro).to be_performable_on(ticket_a, activator_type: nil)
  86. end
  87. it 'returns false if macro group does not match ticket' do
  88. expect(macro).not_to be_performable_on(ticket_b, activator_type: nil)
  89. end
  90. end
  91. end
  92. end
  93. end