class Mail::Matchers::HasSentEmailMatcher
def description
def description result = "send a matching email" result end
def dump_deliveries
def dump_deliveries "(actual deliveries: " + Mail::TestMailer.deliveries.inspect + ")" end
def explain_expectations
def explain_expectations result = '' result += "from #{@sender} " if instance_variable_defined?('@sender') result += "to #{@recipients.inspect} " if instance_variable_defined?('@recipients') result += "with subject \"#{@subject}\" " if instance_variable_defined?('@subject') result += "with subject matching \"#{@subject_matcher}\" " if instance_variable_defined?('@subject_matcher') result += "with body \"#{@body}\" " if instance_variable_defined?('@body') result += "with body matching \"#{@body_matcher}\" " if instance_variable_defined?('@body_matcher') result end
def failure_message
def failure_message result = "Expected email to be sent " result += explain_expectations result += dump_deliveries result end
def filter_matched_deliveries(deliveries)
def filter_matched_deliveries(deliveries) candidate_deliveries = deliveries %w(sender recipients subject subject_matcher body body_matcher).each do |modifier_name| next unless instance_variable_defined?("@#{modifier_name}") candidate_deliveries = candidate_deliveries.select{|matching_delivery| self.send("matches_on_#{modifier_name}?", matching_delivery)} end candidate_deliveries end
def from(sender)
def from(sender) @sender = sender self end
def initialize(_context)
def initialize(_context) end
def matches?(subject)
def matches?(subject) matching_deliveries = filter_matched_deliveries(Mail::TestMailer.deliveries) !(matching_deliveries.empty?) end
def matches_on_body?(delivery)
def matches_on_body?(delivery) delivery.body == @body end
def matches_on_body_matcher?(delivery)
def matches_on_body_matcher?(delivery) @body_matcher.match delivery.body.raw_source end
def matches_on_recipients?(delivery)
def matches_on_recipients?(delivery) @recipients.all? {|recipient| delivery.to.include?(recipient) } end
def matches_on_sender?(delivery)
def matches_on_sender?(delivery) delivery.from.include?(@sender) end
def matches_on_subject?(delivery)
def matches_on_subject?(delivery) delivery.subject == @subject end
def matches_on_subject_matcher?(delivery)
def matches_on_subject_matcher?(delivery) @subject_matcher.match delivery.subject end
def matching_body(body_matcher)
def matching_body(body_matcher) @body_matcher = body_matcher self end
def matching_subject(subject_matcher)
def matching_subject(subject_matcher) @subject_matcher = subject_matcher self end
def negative_failure_message
def negative_failure_message result = "Expected no email to be sent " result += explain_expectations result += dump_deliveries result end
def to(recipient_or_list)
def to(recipient_or_list) @recipients ||= [] if recipient_or_list.kind_of?(Array) @recipients += recipient_or_list else @recipients << recipient_or_list end self end
def with_body(body)
def with_body(body) @body = body self end
def with_subject(subject)
def with_subject(subject) @subject = subject self end