postmaster_filter_spec.rb 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe PostmasterFilter, type: :model do
  4. describe '#create' do
  5. let(:filter) do
  6. {
  7. name: 'RSpec: PostmasterFilter#create',
  8. match: matcher,
  9. perform: {
  10. 'X-Zammad-Ticket-priority' => {
  11. value: '3 high',
  12. },
  13. },
  14. channel: 'email',
  15. active: true,
  16. created_by_id: 1,
  17. updated_by_id: 1,
  18. }
  19. end
  20. shared_examples 'raises error' do |params|
  21. let(:matcher) { params[:matcher] }
  22. it 'raises error' do
  23. expect { described_class.create!(filter) }.to raise_error(Exceptions::UnprocessableEntity)
  24. end
  25. end
  26. shared_examples 'ok' do |params|
  27. let(:matcher) { params[:matcher] }
  28. it 'ok' do
  29. expect(described_class.create!(filter)).to be_an(described_class)
  30. end
  31. end
  32. describe 'validates filter before saving' do
  33. context 'when valid match' do
  34. %w[nobody@example.com *].each do |value|
  35. describe "value: #{value}" do
  36. include_examples('ok', matcher: {
  37. from: {
  38. operator: 'contains',
  39. value: value,
  40. }
  41. })
  42. end
  43. end
  44. end
  45. context 'when empty match' do
  46. include_examples('raises error', matcher: {})
  47. end
  48. context 'when incomplete match' do
  49. include_examples('raises error', matcher: {
  50. from: {
  51. operator: 'contains',
  52. value: '',
  53. }
  54. })
  55. end
  56. context 'when invalid match regex' do
  57. %w[[] ?? *].each do |regex|
  58. describe regex do
  59. include_examples('raises error', matcher: {
  60. from: {
  61. operator: 'matches regex',
  62. value: regex,
  63. },
  64. })
  65. end
  66. end
  67. end
  68. end
  69. end
  70. end