Refactoring: Migrate email_regex_test to RSpec
This commit is contained in:
parent
365e8db792
commit
909f4b7eaf
2 changed files with 122 additions and 116 deletions
122
spec/models/channel/filter/match/email_regex_spec.rb
Normal file
122
spec/models/channel/filter/match/email_regex_spec.rb
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Channel::Filter::Match::EmailRegex do
|
||||||
|
describe '.match' do
|
||||||
|
subject(:match) { Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: check_mode) }
|
||||||
|
let(:from) { 'foobar@foo.bar' }
|
||||||
|
|
||||||
|
context 'in normal (error-suppressing) mode (default)' do
|
||||||
|
let(:check_mode) { false }
|
||||||
|
|
||||||
|
context 'with exact match' do
|
||||||
|
let(:sender) { 'foobar@foo.bar' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with wildcard *' do
|
||||||
|
let(:sender) { '*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with empty string' do
|
||||||
|
let(:sender) { '' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with `regex` operator' do
|
||||||
|
context 'and matching regex' do
|
||||||
|
let(:sender) { 'regex:foobar@.*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and non-matching regex' do
|
||||||
|
let(:sender) { 'regex:nagios@.*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(false) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (misused ? repeat operator)' do
|
||||||
|
let(:sender) { 'regex:??' }
|
||||||
|
|
||||||
|
it { is_expected.to be(false) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (misused ? repeat operator)' do
|
||||||
|
let(:sender) { 'regex:*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(false) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (empty char class)' do
|
||||||
|
let(:sender) { 'regex:[]' }
|
||||||
|
|
||||||
|
it { is_expected.to be(false) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'in check (error-raising) mode' do
|
||||||
|
let(:check_mode) { true }
|
||||||
|
|
||||||
|
context 'with exact match' do
|
||||||
|
let(:sender) { 'foobar@foo.bar' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with wildcard *' do
|
||||||
|
let(:sender) { '*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with empty string' do
|
||||||
|
let(:sender) { '' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with `regex` operator' do
|
||||||
|
context 'and matching regex' do
|
||||||
|
let(:sender) { 'regex:foobar@.*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and non-matching regex' do
|
||||||
|
let(:sender) { 'regex:nagios@.*' }
|
||||||
|
|
||||||
|
it { is_expected.to be(false) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (misused ? repeat operator)' do
|
||||||
|
let(:sender) { 'regex:??' }
|
||||||
|
|
||||||
|
it { expect { subject }.to raise_error(<<~ERR.chomp) }
|
||||||
|
Can't use regex '??' on 'foobar@foo.bar': target of repeat operator is not specified: /??/i
|
||||||
|
ERR
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (misused ? repeat operator)' do
|
||||||
|
let(:sender) { 'regex:*' }
|
||||||
|
|
||||||
|
it { expect { subject }.to raise_error(<<~ERR.chomp) }
|
||||||
|
Can't use regex '*' on 'foobar@foo.bar': target of repeat operator is not specified: /*/i
|
||||||
|
ERR
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and invalid regex (empty char class)' do
|
||||||
|
let(:sender) { 'regex:[]' }
|
||||||
|
|
||||||
|
it { expect { subject }.to raise_error(<<~ERR.chomp) }
|
||||||
|
Can't use regex '[]' on 'foobar@foo.bar': empty char-class: /[]/i
|
||||||
|
ERR
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,116 +0,0 @@
|
||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class EmailRegexTest < ActiveSupport::TestCase
|
|
||||||
|
|
||||||
test 'should be able to detect valid/invalid the regex filter' do
|
|
||||||
# check with exact email, check_mode = true
|
|
||||||
sender = 'foobar@foo.bar'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check with exact email
|
|
||||||
sender = 'foobar@foo.bar'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check with regex: filter check_mode = true
|
|
||||||
sender = 'regex:foobar@.*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check with regex: filter
|
|
||||||
sender = 'regex:foobar@.*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check regex with regex: filter
|
|
||||||
sender = 'regex:??'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check regex with raise error (check_mode = true)
|
|
||||||
assert_raises("Can't use regex '??' on 'foobar@foo.bar'") do
|
|
||||||
sender = 'regex:??'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
end
|
|
||||||
|
|
||||||
sender = 'regex:[]'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check regex with raise error, (check_mode = true)
|
|
||||||
assert_raises("Can't use regex '[]' on 'foobar@foo.bar'") do
|
|
||||||
sender = 'regex:[]'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
end
|
|
||||||
|
|
||||||
# check regex with empty field
|
|
||||||
sender = '{}'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check regex with empty field and raise error (check_mode = true)
|
|
||||||
sender = '{}'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check regex with empty field
|
|
||||||
sender = ''
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check regex with empty field
|
|
||||||
sender = ''
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check regex with regex: wildcard
|
|
||||||
sender = 'regex:*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check regex with regex: wildcard and raise error (check_mode = true)
|
|
||||||
assert_raises("Can't use regex '*' on 'foobar@foo.bar'") do
|
|
||||||
sender = 'regex:*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
end
|
|
||||||
|
|
||||||
# check email with wildcard
|
|
||||||
sender = '*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check email with wildcard (check_mode = true)
|
|
||||||
sender = '*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(true, regex)
|
|
||||||
|
|
||||||
# check email with a different sender
|
|
||||||
sender = 'regex:nagios@.*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: false)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
|
|
||||||
# check email with a different sender with checkmode = true
|
|
||||||
sender = 'regex:nagios@.*'
|
|
||||||
from = 'foobar@foo.bar'
|
|
||||||
regex = Channel::Filter::Match::EmailRegex.match(value: from, match_rule: sender, check_mode: true)
|
|
||||||
assert_equal(false, regex)
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue