test_helper_test.rb 5.3 KB
Newer Older
1 2
require "abstract_unit"
require "active_support/testing/stream"
3 4 5

class TestHelperMailer < ActionMailer::Base
  def test
6
    @world = "Earth"
7 8 9
    mail body: render(inline: "Hello, <%= @world %>"),
      to: "test@example.com",
      from: "tester@example.com"
10 11 12
  end
end

13
class TestHelperMailerTest < ActionMailer::TestCase
A
Aditya Kapoor 已提交
14 15
  include ActiveSupport::Testing::Stream

16
  def test_setup_sets_right_action_mailer_options
17
    assert_equal :test, ActionMailer::Base.delivery_method
18 19 20 21 22
    assert ActionMailer::Base.perform_deliveries
    assert_equal [], ActionMailer::Base.deliveries
  end

  def test_setup_creates_the_expected_mailer
23
    assert_kind_of Mail::Message, @expected
24 25
    assert_equal "1.0", @expected.mime_version
    assert_equal "text/plain", @expected.mime_type
26 27 28 29 30 31 32
  end

  def test_mailer_class_is_correctly_inferred
    assert_equal TestHelperMailer, self.class.mailer_class
  end

  def test_determine_default_mailer_raises_correct_error
33
    assert_raise(ActionMailer::NonInferrableMailerError) do
34 35
      self.class.determine_default_mailer("NotAMailerTest")
    end
36
  end
37

38
  def test_charset_is_utf_8
39
    assert_equal "UTF-8", charset
40 41
  end

42
  def test_encode
43
    assert_equal "=?UTF-8?Q?This_is_=E3=81=82_string?=", encode("This is あ string")
44 45 46
  end

  def test_read_fixture
47
    assert_equal ["Welcome!"], read_fixture("welcome")
48 49
  end

50 51 52
  def test_assert_emails
    assert_nothing_raised do
      assert_emails 1 do
53
        TestHelperMailer.test.deliver_now
54 55 56
      end
    end
  end
57

58 59 60
  def test_repeated_assert_emails_calls
    assert_nothing_raised do
      assert_emails 1 do
61
        TestHelperMailer.test.deliver_now
62 63
      end
    end
64

65 66
    assert_nothing_raised do
      assert_emails 2 do
67 68
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
69 70 71
      end
    end
  end
72

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

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

86 87 88
  def test_assert_no_emails
    assert_nothing_raised do
      assert_no_emails do
89
        TestHelperMailer.test
90 91 92
      end
    end
  end
93

94
  def test_assert_emails_too_few_sent
95
    error = assert_raise ActiveSupport::TestCase::Assertion do
96
      assert_emails 2 do
97
        TestHelperMailer.test.deliver_now
98 99
      end
    end
100

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

104
  def test_assert_emails_too_many_sent
105
    error = assert_raise ActiveSupport::TestCase::Assertion do
106
      assert_emails 1 do
107 108
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
109 110
      end
    end
111

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

115 116 117 118 119 120 121 122 123 124 125
  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

126
  def test_assert_no_emails_failure
127
    error = assert_raise ActiveSupport::TestCase::Assertion do
128
      assert_no_emails do
129
        TestHelperMailer.test.deliver_now
130 131
      end
    end
132

133
    assert_match(/0 .* but 1/, error.message)
134
  end
135 136 137 138

  def test_assert_enqueued_emails
    assert_nothing_raised do
      assert_enqueued_emails 1 do
A
Aditya Kapoor 已提交
139 140 141
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
142 143 144 145
      end
    end
  end

146 147 148 149 150 151 152 153 154 155
  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

156 157 158
  def test_assert_enqueued_emails_too_few_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_enqueued_emails 2 do
A
Aditya Kapoor 已提交
159 160 161
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
162 163 164 165 166 167 168 169 170
      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 已提交
171 172 173 174
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
          TestHelperMailer.test.deliver_later
        end
175 176 177 178 179 180 181 182 183 184 185 186 187 188
      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

189 190 191 192 193 194 195 196
  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

197 198 199
  def test_assert_no_enqueued_emails_failure
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_no_enqueued_emails do
A
Aditya Kapoor 已提交
200 201 202
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
203 204 205 206 207
      end
    end

    assert_match(/0 .* but 1/, error.message)
  end
208
end
209 210 211 212 213 214 215 216

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

217
  def test_setup_shouldnt_conflict_with_mailer_setup
218
    assert_kind_of Mail::Message, @expected
219
    assert_equal "a value", @test_var
220 221
  end
end