aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/test/test_helper_test.rb
blob: 86d22da9bfae86d958620b1e093ebfa485a740e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require 'abstract_unit'

class TestHelperMailer < ActionMailer::Base
  def test
    recipients "test@example.com"
    from       "tester@example.com"

    @world = "Earth"
    render(:inline => "Hello, <%= @world %>")
  end
end

class TestHelperMailerTest < ActionMailer::TestCase
  def test_setup_sets_right_action_mailer_options
    assert_instance_of ActionMailer::DeliveryMethod::Test, ActionMailer::Base.delivery_method
    assert ActionMailer::Base.perform_deliveries
    assert_equal [], ActionMailer::Base.deliveries
  end

  def test_setup_creates_the_expected_mailer
    assert @expected.is_a?(Mail::Message)
    assert_equal "1.0", @expected.mime_version.version
    assert_equal "text/plain", @expected.content_type.string
  end

  def test_mailer_class_is_correctly_inferred
    assert_equal TestHelperMailer, self.class.mailer_class
  end

  def test_determine_default_mailer_raises_correct_error
    assert_raise(ActionMailer::NonInferrableMailerError) do
      self.class.determine_default_mailer("NotAMailerTest")
    end
  end
  
  def test_charset_is_utf_8
    assert_equal "utf-8", charset
  end

  def test_encode
    assert_equal "=?utf-8?Q?=0Aasdf=0A?=", encode("\nasdf\n")
  end

  def test_assert_emails
    assert_nothing_raised do
      assert_emails 1 do
        TestHelperMailer.deliver_test
      end
    end
  end
  
  def test_repeated_assert_emails_calls
    assert_nothing_raised do
      assert_emails 1 do
        TestHelperMailer.deliver_test
      end
    end
    
    assert_nothing_raised do
      assert_emails 2 do
        TestHelperMailer.deliver_test
        TestHelperMailer.deliver_test
      end
    end
  end
  
  def test_assert_emails_with_no_block
    assert_nothing_raised do
      TestHelperMailer.deliver_test
      assert_emails 1
    end
    
    assert_nothing_raised do
      TestHelperMailer.deliver_test
      TestHelperMailer.deliver_test
      assert_emails 3
    end
  end
  
  def test_assert_no_emails
    assert_nothing_raised do
      assert_no_emails do
        TestHelperMailer.create_test
      end
    end
  end
  
  def test_assert_emails_too_few_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_emails 2 do
        TestHelperMailer.deliver_test
      end
    end
    
    assert_match(/2 .* but 1/, error.message)
  end
  
  def test_assert_emails_too_many_sent
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_emails 1 do
        TestHelperMailer.deliver_test
        TestHelperMailer.deliver_test
      end
    end
    
    assert_match(/1 .* but 2/, error.message)
  end
  
  def test_assert_no_emails_failure
    error = assert_raise ActiveSupport::TestCase::Assertion do
      assert_no_emails do
        TestHelperMailer.deliver_test
      end
    end
    
    assert_match(/0 .* but 1/, error.message)
  end
end

class AnotherTestHelperMailerTest < ActionMailer::TestCase
  tests TestHelperMailer

  def setup
    @test_var = "a value"
  end

  def test_setup_shouldnt_conflict_with_mailer_setup
    assert @expected.is_a?(Mail::Message)
    assert_equal 'a value', @test_var
  end
end