test_helper_test.rb 5.3 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 13 14
  end
end

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

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

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

  def test_mailer_class_is_correctly_inferred
    assert_equal TestHelperMailer, self.class.mailer_class
  end

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

40
  def test_charset_is_utf_8
41
    assert_equal "UTF-8", charset
42 43
  end

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

  def test_read_fixture
49
    assert_equal ["Welcome!"], read_fixture("welcome")
50 51
  end

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

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

67 68
    assert_nothing_raised do
      assert_emails 2 do
69 70
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
71 72 73
      end
    end
  end
74

75 76
  def test_assert_emails_with_no_block
    assert_nothing_raised do
77
      TestHelperMailer.test.deliver_now
78 79
      assert_emails 1
    end
80

81
    assert_nothing_raised do
82 83
      TestHelperMailer.test.deliver_now
      TestHelperMailer.test.deliver_now
84 85 86
      assert_emails 3
    end
  end
87

88 89 90
  def test_assert_no_emails
    assert_nothing_raised do
      assert_no_emails do
91
        TestHelperMailer.test
92 93 94
      end
    end
  end
95

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

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

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

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

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

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

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

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

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

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

191 192 193 194 195 196 197 198
  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

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

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

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

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