test_helper_test.rb 6.5 KB
Newer Older
1 2
# frozen_string_literal: true

3 4
require "abstract_unit"
require "active_support/testing/stream"
5 6 7

class TestHelperMailer < ActionMailer::Base
  def test
8
    @world = "Earth"
9 10 11
    mail body: render(inline: "Hello, <%= @world %>"),
      to: "test@example.com",
      from: "tester@example.com"
12
  end
13 14 15 16 17 18 19 20 21 22 23 24

  def test_args(recipient, name)
    mail body: render(inline: "Hello, #{name}"),
      to: recipient,
      from: "tester@example.com"
  end

  def test_parameter_args
    mail body: render(inline: "All is #{params[:all]}"),
      to: "test@example.com",
      from: "tester@example.com"
  end
25 26
end

27
class TestHelperMailerTest < ActionMailer::TestCase
A
Aditya Kapoor 已提交
28 29
  include ActiveSupport::Testing::Stream

30
  def test_setup_sets_right_action_mailer_options
31
    assert_equal :test, ActionMailer::Base.delivery_method
32 33 34 35 36
    assert ActionMailer::Base.perform_deliveries
    assert_equal [], ActionMailer::Base.deliveries
  end

  def test_setup_creates_the_expected_mailer
37
    assert_kind_of Mail::Message, @expected
38 39
    assert_equal "1.0", @expected.mime_version
    assert_equal "text/plain", @expected.mime_type
40 41 42 43 44 45 46
  end

  def test_mailer_class_is_correctly_inferred
    assert_equal TestHelperMailer, self.class.mailer_class
  end

  def test_determine_default_mailer_raises_correct_error
47
    assert_raise(ActionMailer::NonInferrableMailerError) do
48 49
      self.class.determine_default_mailer("NotAMailerTest")
    end
50
  end
51

52
  def test_charset_is_utf_8
53
    assert_equal "UTF-8", charset
54 55
  end

56
  def test_encode
57
    assert_equal "=?UTF-8?Q?This_is_=E3=81=82_string?=", encode("This is あ string")
58 59 60
  end

  def test_read_fixture
61
    assert_equal ["Welcome!"], read_fixture("welcome")
62 63
  end

64 65 66
  def test_assert_emails
    assert_nothing_raised do
      assert_emails 1 do
67
        TestHelperMailer.test.deliver_now
68 69 70
      end
    end
  end
71

72 73 74
  def test_repeated_assert_emails_calls
    assert_nothing_raised do
      assert_emails 1 do
75
        TestHelperMailer.test.deliver_now
76 77
      end
    end
78

79 80
    assert_nothing_raised do
      assert_emails 2 do
81 82
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
83 84 85
      end
    end
  end
86

87 88
  def test_assert_emails_with_no_block
    assert_nothing_raised do
89
      TestHelperMailer.test.deliver_now
90 91
      assert_emails 1
    end
92

93
    assert_nothing_raised do
94 95
      TestHelperMailer.test.deliver_now
      TestHelperMailer.test.deliver_now
96 97 98
      assert_emails 3
    end
  end
99

100 101 102
  def test_assert_no_emails
    assert_nothing_raised do
      assert_no_emails do
103
        TestHelperMailer.test
104 105 106
      end
    end
  end
107

108
  def test_assert_emails_too_few_sent
109
    error = assert_raise ActiveSupport::TestCase::Assertion do
110
      assert_emails 2 do
111
        TestHelperMailer.test.deliver_now
112 113
      end
    end
114

115
    assert_match(/2 .* but 1/, error.message)
116
  end
117

118
  def test_assert_emails_too_many_sent
119
    error = assert_raise ActiveSupport::TestCase::Assertion do
120
      assert_emails 1 do
121 122
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
123 124
      end
    end
125

126
    assert_match(/1 .* but 2/, error.message)
127
  end
128

129 130 131 132 133 134 135 136 137 138 139
  def test_assert_emails_message
    TestHelperMailer.test.deliver_now
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_emails 2 do
        TestHelperMailer.test.deliver_now
      end
    end
    assert_match "Expected: 2", error.message
    assert_match "Actual: 1", error.message
  end

140
  def test_assert_no_emails_failure
141
    error = assert_raise ActiveSupport::TestCase::Assertion do
142
      assert_no_emails do
143
        TestHelperMailer.test.deliver_now
144 145
      end
    end
146

147
    assert_match(/0 .* but 1/, error.message)
148
  end
149 150 151 152

  def test_assert_enqueued_emails
    assert_nothing_raised do
      assert_enqueued_emails 1 do
A
Aditya Kapoor 已提交
153 154 155
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
156 157 158 159
      end
    end
  end

160 161 162 163 164 165 166 167 168 169
  def test_assert_enqueued_parameterized_emails
    assert_nothing_raised do
      assert_enqueued_emails 1 do
        silence_stream($stdout) do
          TestHelperMailer.with(a: 1).test.deliver_later
        end
      end
    end
  end

170 171 172
  def test_assert_enqueued_emails_too_few_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_enqueued_emails 2 do
A
Aditya Kapoor 已提交
173 174 175
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
176 177 178 179 180 181 182 183 184
      end
    end

    assert_match(/2 .* but 1/, error.message)
  end

  def test_assert_enqueued_emails_too_many_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_enqueued_emails 1 do
A
Aditya Kapoor 已提交
185 186 187 188
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
          TestHelperMailer.test.deliver_later
        end
189 190 191 192 193 194 195 196 197 198 199 200 201 202
      end
    end

    assert_match(/1 .* but 2/, error.message)
  end

  def test_assert_no_enqueued_emails
    assert_nothing_raised do
      assert_no_enqueued_emails do
        TestHelperMailer.test.deliver_now
      end
    end
  end

203 204 205 206 207 208 209 210
  def test_assert_no_enqueued_parameterized_emails
    assert_nothing_raised do
      assert_no_enqueued_emails do
        TestHelperMailer.with(a: 1).test.deliver_now
      end
    end
  end

211 212 213
  def test_assert_no_enqueued_emails_failure
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_no_enqueued_emails do
A
Aditya Kapoor 已提交
214 215 216
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
217 218 219 220 221
      end
    end

    assert_match(/0 .* but 1/, error.message)
  end
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251

  def test_assert_enqueued_email_with
    assert_nothing_raised do
      assert_enqueued_email_with TestHelperMailer, :test do
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
      end
    end
  end

  def test_assert_enqueued_email_with_args
    assert_nothing_raised do
      assert_enqueued_email_with TestHelperMailer, :test_args, args: ["some_email", "some_name"] do
        silence_stream($stdout) do
          TestHelperMailer.test_args("some_email", "some_name").deliver_later
        end
      end
    end
  end

  def test_assert_enqueued_email_with_parameterized_args
    assert_nothing_raised do
      assert_enqueued_email_with TestHelperMailer, :test_parameter_args, args: { all: "good" } do
        silence_stream($stdout) do
          TestHelperMailer.with(all: "good").test_parameter_args.deliver_later
        end
      end
    end
  end
252
end
253 254 255 256 257 258 259 260

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

261
  def test_setup_shouldnt_conflict_with_mailer_setup
262
    assert_kind_of Mail::Message, @expected
263
    assert_equal "a value", @test_var
264 265
  end
end