-
Notifications
You must be signed in to change notification settings - Fork 21.6k
/
subset_validation_test.rb
134 lines (95 loc) · 3.88 KB
/
subset_validation_test.rb
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
132
133
134
# encoding: utf-8
require 'cases/helper'
require 'models/person'
class SubsetValidationTest < ActiveModel::TestCase
def teardown
Person.reset_callbacks(:validate)
end
def test_validates_subset_of
nicknames = ['Bubba', 'Jimbo', 'Jr.', 'Rodney', 'Edmundo']
Person.validates_subset_of(:nicknames, :in => nicknames)
assert Person.new(:nicknames => "blargle").invalid?
assert Person.new(:nicknames => ["blargle"]).invalid?
assert Person.new(:nicknames => nicknames + ["blargle"]).invalid?
assert Person.new(:nicknames => nicknames.sample(nicknames.length - 1) + ["blargle"]).invalid?
(1..nicknames.length).each do |i|
assert Person.new(:nicknames => nicknames.sample(i)).valid?
end
end
def test_validates_subset_of_with_allow_nil
nicknames = ['Bubba', 'Jimbo', 'Jr.', 'Rodney', 'Edmundo']
Person.validates_subset_of(:nicknames, :in => nicknames, :allow_nil => true)
assert Person.new(:nicknames => nil).valid?
Person.reset_callbacks(:validate)
Person.validates_subset_of(:nicknames, :in => nicknames, :allow_nil => false)
assert Person.new(:nicknames => nil).invalid?
Person.reset_callbacks(:validate)
Person.validates_subset_of(:nicknames, :in => nicknames)
assert Person.new(:nicknames => nil).invalid?
end
def test_validates_subset_of_with_allow_blank
nicknames = ['Bubba', 'Jimbo', 'Jr.', 'Rodney', 'Edmundo']
Person.validates_subset_of(:nicknames, :in => nicknames, :allow_blank => true)
assert Person.new(:nicknames => nil).valid?
assert Person.new(:nicknames => "").valid?
assert Person.new(:nicknames => []).valid?
Person.reset_callbacks(:validate)
Person.validates_subset_of(:nicknames, :in => nicknames, :allow_blank => false)
assert Person.new(:nicknames => nil).invalid?
assert Person.new(:nicknames => "").invalid?
assert Person.new(:nicknames => []).invalid?
Person.reset_callbacks(:validate)
Person.validates_subset_of(:nicknames, :in => nicknames)
assert Person.new(:nicknames => nil).invalid?
assert Person.new(:nicknames => "").invalid?
assert Person.new(:nicknames => []).invalid?
end
def test_validates_subset_of_with_default_message
Person.validates_subset_of(:nicknames, :in => ['Bubba', 'Jimbo', 'Jr.', 'Rodney', 'Edmundo'])
nicknames = ["Bubbajim"]
p = Person.new(:nicknames => nicknames)
assert p.invalid?
assert_equal ["is not a subset of the list"], p.errors[:nicknames]
end
def test_validates_subset_of_with_formatted_message
Person.validates_subset_of(:nicknames, :in => ['Bubba', 'Jimbo', 'Jr.', 'Rodney', 'Edmundo'], :message => "%{value} ain't a subset")
nicknames = ["Bubbajim"]
p = Person.new(:nicknames => nicknames)
assert p.invalid?
assert_equal ["#{nicknames} ain't a subset"], p.errors[:nicknames]
end
def test_validates_subset_of_with_lambda
Person.validates_subset_of :nicknames, :in => lambda{ |p| p.title == "Duke of Rodney" ? ["Rodney", "Duke"] : ["Edmundo", "Sir"] }
p = Person.new
p.title = "Duke of Rodney"
p.nicknames = ["Sir"]
assert p.invalid?
p.nicknames = ["Edmundo"]
assert p.invalid?
p.nicknames = ["Sir", "Edmundo"]
assert p.invalid?
p.nicknames = ["Rodney"]
assert p.valid?
p.nicknames = ["Duke"]
assert p.valid?
p.nicknames = ["Rodney", "Duke"]
assert p.valid?
p.title = "Sir Edmundo"
p.nicknames = ["Rodney"]
assert p.invalid?
p.nicknames = ["Duke"]
assert p.invalid?
p.nicknames = ["Rodney", "Duke"]
assert p.invalid?
p.nicknames = ["Sir"]
assert p.valid?
p.nicknames = ["Edmundo"]
assert p.valid?
p.nicknames = ["Sir", "Edmundo"]
assert p.valid?
end
def test_argument_validation
assert_raise(ArgumentError) { Person.validates_subset_of(:nicknames, :in => nil ) }
assert_raise(ArgumentError) { Person.validates_subset_of(:nicknames, :in => 0) }
end
end