spec/spec_helper.rb in sanitize_email-1.0.0.alpha2 vs spec/spec_helper.rb in sanitize_email-1.0.0.rc1
- old
+ new
@@ -9,32 +9,63 @@
config.treat_symbols_as_metadata_keys_with_true_values = true
config.run_all_when_everything_filtered = true
#config.filter_run :focus
end
+module EmailMatcherHelpers
+ class UnexpectedMailType < StandardError; end
+
+ # Sweet, nourishing recursion
+ def email_matching(matcher, part, mail_or_part)
+ if mail_or_part.respond_to?(part)
+ email_matching(matcher, part, mail_or_part.send(part))
+ elsif mail_or_part.respond_to?(:join)
+ email_matching(matcher, part, mail_or_part.join(', '))
+ elsif mail_or_part.respond_to?(:=~) # Can we match a regex against it?
+ mail_or_part =~ Regexp.new(Regexp.escape(matcher))
+ else
+ raise UnexpectedMailType, "Cannot match #{matcher} for #{part}"
+ end
+ end
+
+end
+
RSpec::Matchers.define :have_from do |from|
+ include EmailMatcherHelpers
match do |container|
- container =~ Regexp.new(Regexp.escape(from))
+ email_matching(from, :from, container)
end
end
RSpec::Matchers.define :have_to do |to|
+ include EmailMatcherHelpers
match do |container|
- container =~ Regexp.new(Regexp.escape(to))
+ email_matching(to, :to, container)
end
end
RSpec::Matchers.define :have_cc do |cc|
+ include EmailMatcherHelpers
match do |container|
- container =~ Regexp.new(Regexp.escape(cc))
+ email_matching(cc, :cc, container)
end
end
# The ActionMailer :file delivery method never prints bcc recipients...
-# so not testable as such, but with letter_opener we can work magic
+# Neither does LetterOpener :(
+# But the mail object itself can be tested!
RSpec::Matchers.define :have_bcc do |bcc|
+ include EmailMatcherHelpers
match do |container|
- container =~ Regexp.new(Regexp.escape(bcc))
+ email_matching(bcc, :bcc, container)
end
end
RSpec::Matchers.define :have_subject do |subject|
+ include EmailMatcherHelpers
match do |container|
- container =~ Regexp.new(Regexp.escape(subject))
+ email_matching(subject, :subject, container)
end
end
+
+#RSpec::Matchers.define :have_to_username do |to|
+# include EmailMatcherHelpers
+# match do |container|
+# email_matching(to, :, container)
+# end
+#end