test_helper_test.rb 4.3 KB
Newer Older
1
# encoding: utf-8
2
require 'abstract_unit'
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 14
class TestHelperMailerTest < ActionMailer::TestCase
  def test_setup_sets_right_action_mailer_options
15
    assert_equal :test, ActionMailer::Base.delivery_method
16 17 18 19 20
    assert ActionMailer::Base.perform_deliveries
    assert_equal [], ActionMailer::Base.deliveries
  end

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

  def test_mailer_class_is_correctly_inferred
    assert_equal TestHelperMailer, self.class.mailer_class
  end

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

36
  def test_charset_is_utf_8
37
    assert_equal "UTF-8", charset
38 39
  end

40 41 42 43 44 45 46 47
  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

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

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

63 64
    assert_nothing_raised do
      assert_emails 2 do
65 66
        TestHelperMailer.test.deliver_now
        TestHelperMailer.test.deliver_now
67 68 69
      end
    end
  end
70

71 72
  def test_assert_emails_with_no_block
    assert_nothing_raised do
73
      TestHelperMailer.test.deliver_now
74 75
      assert_emails 1
    end
76

77
    assert_nothing_raised do
78 79
      TestHelperMailer.test.deliver_now
      TestHelperMailer.test.deliver_now
80 81 82
      assert_emails 3
    end
  end
83

84 85 86
  def test_assert_no_emails
    assert_nothing_raised do
      assert_no_emails do
87
        TestHelperMailer.test
88 89 90
      end
    end
  end
91

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

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

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

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

113
  def test_assert_no_emails_failure
114
    error = assert_raise ActiveSupport::TestCase::Assertion do
115
      assert_no_emails do
116
        TestHelperMailer.test.deliver_now
117 118
      end
    end
119

120
    assert_match(/0 .* but 1/, error.message)
121
  end
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168

  def test_assert_enqueued_emails
    assert_nothing_raised do
      assert_enqueued_emails 1 do
        TestHelperMailer.test.deliver_later
      end
    end
  end

  def test_assert_enqueued_emails_too_few_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_enqueued_emails 2 do
        TestHelperMailer.test.deliver_later
      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
        TestHelperMailer.test.deliver_later
        TestHelperMailer.test.deliver_later
      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
        TestHelperMailer.test.deliver_later
      end
    end

    assert_match(/0 .* but 1/, error.message)
  end
169
end
170 171 172 173 174 175 176 177

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

178
  def test_setup_shouldnt_conflict_with_mailer_setup
179
    assert_kind_of Mail::Message, @expected
180
    assert_equal 'a value', @test_var
181 182
  end
end