test_helper_test.rb 4.5 KB
Newer Older
1
require 'abstract_unit'
A
Aditya Kapoor 已提交
2
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 43 44 45 46 47 48 49
  def test_encode
    assert_equal '=?UTF-8?Q?This_is_=E3=81=82_string?=', encode('This is あ string')
  end

  def test_read_fixture
    assert_equal ['Welcome!'], read_fixture('welcome')
  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
  def test_assert_no_emails_failure
116
    error = assert_raise ActiveSupport::TestCase::Assertion do
117
      assert_no_emails do
118
        TestHelperMailer.test.deliver_now
119 120
      end
    end
121

122
    assert_match(/0 .* but 1/, error.message)
123
  end
124 125 126 127

  def test_assert_enqueued_emails
    assert_nothing_raised do
      assert_enqueued_emails 1 do
A
Aditya Kapoor 已提交
128 129 130
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
131 132 133 134 135 136 137
      end
    end
  end

  def test_assert_enqueued_emails_too_few_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_enqueued_emails 2 do
A
Aditya Kapoor 已提交
138 139 140
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
141 142 143 144 145 146 147 148 149
      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 已提交
150 151 152 153
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
          TestHelperMailer.test.deliver_later
        end
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
      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

  def test_assert_no_enqueued_emails_failure
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_no_enqueued_emails do
A
Aditya Kapoor 已提交
171 172 173
        silence_stream($stdout) do
          TestHelperMailer.test.deliver_later
        end
174 175 176 177 178
      end
    end

    assert_match(/0 .* but 1/, error.message)
  end
179
end
180 181 182 183 184 185 186 187

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

188
  def test_setup_shouldnt_conflict_with_mailer_setup
189
    assert_kind_of Mail::Message, @expected
190
    assert_equal 'a value', @test_var
191 192
  end
end