summaryrefslogtreecommitdiff
path: root/spec/initializers/mail_starttls_patch_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/initializers/mail_starttls_patch_spec.rb')
-rw-r--r--spec/initializers/mail_starttls_patch_spec.rb86
1 files changed, 86 insertions, 0 deletions
diff --git a/spec/initializers/mail_starttls_patch_spec.rb b/spec/initializers/mail_starttls_patch_spec.rb
new file mode 100644
index 00000000000..126ffb98f0e
--- /dev/null
+++ b/spec/initializers/mail_starttls_patch_spec.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+# rubocop:disable RSpec/VariableDefinition, RSpec/VariableName
+
+require 'spec_helper'
+require 'mail'
+require_relative '../../config/initializers/mail_starttls_patch'
+
+RSpec.describe 'Mail STARTTLS patch', feature_category: :integrations do
+ using RSpec::Parameterized::TableSyntax
+
+ let(:message) do
+ Mail.new do
+ from 'sender@example.com'
+ to 'receiver@example.com'
+ subject 'test mesage'
+ end
+ end
+
+ # Taken from https://github.com/mikel/mail/pull/1536#issue-1490438378
+ where(:ssl, :tls, :enable_starttls, :enable_starttls_auto, :smtp_tls, :smtp_starttls_mode) do
+ true | nil | nil | nil | true | false
+ nil | false | nil | nil | false | :auto
+ nil | false | nil | true | false | :auto
+ false | false | true | false | false | :always
+ false | nil | false | false | false | false
+ false | false | false | nil | false | false
+ false | nil | :always | nil | false | :always
+ false | nil | :auto | nil | false | :auto
+ end
+
+ with_them do
+ let(:values) do
+ {
+ ssl: ssl,
+ tls: tls,
+ enable_starttls: enable_starttls,
+ enable_starttls_auto: enable_starttls_auto
+ }
+ end
+
+ let(:mail) { Mail::SMTP.new(values) }
+ let(:smtp) { double }
+
+ it 'sets TLS and STARTTLS settings properly' do
+ expect(smtp).to receive(:open_timeout=)
+ expect(smtp).to receive(:read_timeout=)
+ expect(smtp).to receive(:start)
+
+ if smtp_tls
+ expect(smtp).to receive(:enable_tls)
+ expect(smtp).to receive(:disable_starttls)
+ else
+ expect(smtp).to receive(:disable_tls)
+
+ case smtp_starttls_mode
+ when :always
+ expect(smtp).to receive(:enable_starttls)
+ when :auto
+ expect(smtp).to receive(:enable_starttls_auto)
+ when false
+ expect(smtp).to receive(:disable_starttls)
+ end
+ end
+
+ allow(Net::SMTP).to receive(:new).and_return(smtp)
+ mail.deliver!(message)
+ end
+ end
+
+ context 'when enable_starttls and tls are enabled' do
+ let(:values) do
+ {
+ tls: true,
+ enable_starttls: true
+ }
+ end
+
+ let(:mail) { Mail::SMTP.new(values) }
+
+ it 'raises an argument exception' do
+ expect { mail.deliver!(message) }.to raise_error(ArgumentError)
+ end
+ end
+end
+# rubocop:enable RSpec/VariableDefinition, RSpec/VariableName