require 'test_helper' class RulesEvaluatorTest < ActiveSupport::TestCase test "mark cron from subject" do email = email_from_eml_with_rules("cron_subject.eml") assert_predicate email, :cron? end test "mark cron from headers" do email = email_from_eml_with_rules("cron_headers.eml") assert_predicate email, :cron? end test "mark not cron" do email = email_from_eml_with_rules("cron_not.eml") assert_not_predicate email, :cron? end test "single ticket" do email = email_from_eml_with_rules("tickets_single.eml") expected = ["49123"] actual = email.tickets assert_equal expected, actual end test "multiple tickets" do email = email_from_eml_with_rules("tickets_multiple.eml") expected = ["49123", "12345"] actual = email.tickets assert_equal expected, actual end test "single client" do email = email_from_eml_with_rules("clients_single.eml") expected = ["quux"] actual = email.clients assert_equal expected, actual end test "multiple clients" do email = email_from_eml_with_rules("clients_multiple.eml") expected = ["quux", "foobar"] actual = email.clients assert_equal expected, actual end test "invalid subject type" do rules_evaluator = RulesEvaluator.new email = Email.new exception = assert_raise ArgumentError do rules_evaluator.evaluate(email, rule_sets(:invalid_subject)) end assert_match(/^Unrecognized subject type/, exception.message) end test "invalid condition type" do rules_evaluator = RulesEvaluator.new email = Email.new exception = assert_raise ArgumentError do rules_evaluator.evaluate(email, rule_sets(:invalid_condition_type)) end assert_match(/^Unrecognized condition type/, exception.message) end test "invalid operator" do rules_evaluator = RulesEvaluator.new email = Email.new exception = assert_raise ArgumentError do rules_evaluator.evaluate(email, rule_sets(:invalid_operator)) end assert_match(/^Unrecognized operator/, exception.message) end end