ministryofjustice/prison-visits

View on GitHub
smoke_test/mail_box.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'mail'
require 'net/imap'

module SmokeTest
  module MailBox
    module_function

    def find_email(unique_address, subject)
      client = Net::IMAP.new(SMOKE_TEST_EMAIL_HOST, port: 993, ssl: true)
      client.login imap_username, SMOKE_TEST_EMAIL_PASSWORD
      client.examine 'INBOX'
      mail_id_list = client.search(['TO', unique_address, 'SUBJECT', subject])

      return if mail_id_list.empty? # empty lists appear to break imap->fetch

      client.fetch(mail_id_list, 'RFC822').map(&method(:parse_email)).first
    ensure
      client.logout
      client.disconnect
    end

    def parse_email(msg)
      Mail.read_from_string(msg.attr['RFC822'])
    end

    def imap_username
      "#{SMOKE_TEST_EMAIL_LOCAL_PART}@#{SMOKE_TEST_EMAIL_DOMAIN}"
    end

    private_class_method :parse_email, :imap_username
  end
end