aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-11-25 14:30:05 -0500
committerGeorge Claghorn <george@basecamp.com>2018-11-25 15:36:08 -0500
commit148110e70c0a408ea418a8e36a6a99305fdd9c99 (patch)
treee8e1d865885370e4e5771a21be7156abca53023d /test
parent2e4df7cea354339cbae20252ae14106a0cce12b5 (diff)
downloadrails-148110e70c0a408ea418a8e36a6a99305fdd9c99.tar.gz
rails-148110e70c0a408ea418a8e36a6a99305fdd9c99.tar.bz2
rails-148110e70c0a408ea418a8e36a6a99305fdd9c99.zip
Extract ActionMailbox::PostfixRelayer
Diffstat (limited to 'test')
-rw-r--r--test/test_helper.rb1
-rw-r--r--test/unit/postfix_relayer_test.rb80
2 files changed, 81 insertions, 0 deletions
diff --git a/test/test_helper.rb b/test/test_helper.rb
index b4459f3feb..31fc59bba2 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -6,6 +6,7 @@ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/mi
require "rails/test_help"
require "byebug"
+require "webmock/minitest"
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
diff --git a/test/unit/postfix_relayer_test.rb b/test/unit/postfix_relayer_test.rb
new file mode 100644
index 0000000000..9f5b78e216
--- /dev/null
+++ b/test/unit/postfix_relayer_test.rb
@@ -0,0 +1,80 @@
+require_relative '../test_helper'
+
+require 'action_mailbox/postfix_relayer'
+
+module ActionMailbox
+ class PostfixRelayerTest < ActiveSupport::TestCase
+ URL = "https://example.com/rails/action_mailbox/postfix/inbound_emails"
+ INGRESS_PASSWORD = "secret"
+
+ setup do
+ @relayer = ActionMailbox::PostfixRelayer.new(url: URL, password: INGRESS_PASSWORD)
+ end
+
+ test "successfully relaying an email" do
+ stub_request(:post, URL).to_return status: 204
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "2.0.0 Successfully relayed message to Postfix ingress", result.output
+ assert result.success?
+ assert_not result.failure?
+
+ assert_requested :post, URL, body: file_fixture("welcome.eml").read,
+ basic_auth: [ "actionmailbox", INGRESS_PASSWORD ], headers: { "Content-Type" => "message/rfc822", "User-Agent" => "Postfix" }
+ end
+
+ test "unsuccessfully relaying with invalid credentials" do
+ stub_request(:post, URL).to_return status: 401
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.7.0 Invalid credentials for Postfix ingress", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+
+ test "unsuccessfully relaying due to an unspecified server error" do
+ stub_request(:post, URL).to_return status: 500
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.0.0 HTTP 500", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+
+ test "unsuccessfully relaying due to a gateway timeout" do
+ stub_request(:post, URL).to_return status: 504
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.0.0 HTTP 504", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+
+ test "unsuccessfully relaying due to ECONNRESET" do
+ stub_request(:post, URL).to_raise Errno::ECONNRESET.new
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.4.2 Network error relaying to Postfix ingress: Connection reset by peer", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+
+ test "unsuccessfully relaying due to connection failure" do
+ stub_request(:post, URL).to_raise SocketError.new("Failed to open TCP connection to example.com:443")
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.4.2 Network error relaying to Postfix ingress: Failed to open TCP connection to example.com:443", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+
+ test "unsuccessfully relaying due to an unhandled exception" do
+ stub_request(:post, URL).to_raise StandardError.new("Something went wrong")
+
+ result = @relayer.relay(file_fixture("welcome.eml").read)
+ assert_equal "4.0.0 Error relaying to Postfix ingress: Something went wrong", result.output
+ assert_not result.success?
+ assert result.failure?
+ end
+ end
+end