confirmation_validation_test.rb 3.1 KB
Newer Older
1
require "cases/helper"
2

3 4
require "models/topic"
require "models/person"
5 6

class ConfirmationValidationTest < ActiveModel::TestCase
7
  def teardown
8
    Topic.clear_validators!
9
  end
10 11 12 13

  def test_no_title_confirmation
    Topic.validates_confirmation_of(:title)

14
    t = Topic.new(author_name: "Plutarch")
15 16 17
    assert t.valid?

    t.title_confirmation = "Parallel Lives"
18
    assert t.invalid?
19 20 21 22 23 24 25 26 27 28 29 30

    t.title_confirmation = nil
    t.title = "Parallel Lives"
    assert t.valid?

    t.title_confirmation = "Parallel Lives"
    assert t.valid?
  end

  def test_title_confirmation
    Topic.validates_confirmation_of(:title)

31 32
    t = Topic.new("title" => "We should be confirmed","title_confirmation" => "")
    assert t.invalid?
33 34

    t.title_confirmation = "We should be confirmed"
35
    assert t.valid?
36 37
  end

38
  def test_validates_confirmation_of_for_ruby_class
39
    Person.validates_confirmation_of :karma
40

41 42 43
    p = Person.new
    p.karma_confirmation = "None"
    assert p.invalid?
44

45
    assert_equal ["doesn't match Karma"], p.errors[:karma_confirmation]
46

47 48 49
    p.karma = "None"
    assert p.valid?
  ensure
50
    Person.clear_validators!
51 52
  end

53
  def test_title_confirmation_with_i18n_attribute
54 55 56 57
    begin
      @old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
      I18n.load_path.clear
      I18n.backend = I18n::Backend::Simple.new
58 59
      I18n.backend.store_translations("en",
        errors: { messages: { confirmation: "doesn't match %{attribute}" } },
60
        activemodel: { attributes: { topic: { title: "Test Title"} } })
61

62
      Topic.validates_confirmation_of(:title)
63

64 65 66 67 68 69 70 71
      t = Topic.new("title" => "We should be confirmed","title_confirmation" => "")
      assert t.invalid?
      assert_equal ["doesn't match Test Title"], t.errors[:title_confirmation]
    ensure
      I18n.load_path.replace @old_load_path
      I18n.backend = @old_backend
      I18n.backend.reload!
    end
72 73
  end

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
  test "does not override confirmation reader if present" do
    klass = Class.new do
      include ActiveModel::Validations

      def title_confirmation
        "expected title"
      end

      validates_confirmation_of :title
    end

    assert_equal "expected title", klass.new.title_confirmation,
     "confirmation validation should not override the reader"
  end

  test "does not override confirmation writer if present" do
    klass = Class.new do
      include ActiveModel::Validations

      def title_confirmation=(value)
        @title_confirmation = "expected title"
      end

      validates_confirmation_of :title
    end

    model = klass.new
    model.title_confirmation = "new title"
    assert_equal "expected title", model.title_confirmation,
     "confirmation validation should not override the writer"
  end
A
Aditya Kapoor 已提交
105 106 107 108 109 110 111 112 113 114 115 116 117 118

  def test_title_confirmation_with_case_sensitive_option_true
    Topic.validates_confirmation_of(:title, case_sensitive: true)

    t = Topic.new(title: "title", title_confirmation: "Title")
    assert t.invalid?
  end

  def test_title_confirmation_with_case_sensitive_option_false
    Topic.validates_confirmation_of(:title, case_sensitive: false)

    t = Topic.new(title: "title", title_confirmation: "Title")
    assert t.valid?
  end
119
end