detox 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +19 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +20 -0
  7. data/README.md +40 -0
  8. data/Rakefile +11 -0
  9. data/detox.gemspec +27 -0
  10. data/gemfiles/activemodel_3_2_x.gemfile +5 -0
  11. data/gemfiles/activemodel_4_0_x.gemfile +5 -0
  12. data/lib/active_model/validations/absence.rb +19 -0
  13. data/lib/detox.rb +11 -0
  14. data/lib/detox/array_validity.rb +23 -0
  15. data/lib/detox/locales/en.yml +21 -0
  16. data/lib/detox/locales/ja.yml +21 -0
  17. data/lib/detox/validations/all.rb +41 -0
  18. data/lib/detox/validations/any.rb +57 -0
  19. data/lib/detox/validations/ordering.rb +34 -0
  20. data/lib/detox/validations/possession.rb +30 -0
  21. data/lib/detox/validity_broker.rb +55 -0
  22. data/lib/detox/version.rb +4 -0
  23. data/spec/detox/array_validity_spec.rb +214 -0
  24. data/spec/detox/validations/all_absence_spec.rb +147 -0
  25. data/spec/detox/validations/all_acceptance_spec.rb +352 -0
  26. data/spec/detox/validations/all_exclusion_spec.rb +137 -0
  27. data/spec/detox/validations/all_format_spec.rb +351 -0
  28. data/spec/detox/validations/all_inclusion_spec.rb +352 -0
  29. data/spec/detox/validations/all_length_spec.rb +388 -0
  30. data/spec/detox/validations/all_numericality_spec.rb +369 -0
  31. data/spec/detox/validations/all_presence_spec.rb +159 -0
  32. data/spec/detox/validations/any_absence_spec.rb +597 -0
  33. data/spec/detox/validations/any_acceptance_spec.rb +597 -0
  34. data/spec/detox/validations/any_exclusion_spec.rb +597 -0
  35. data/spec/detox/validations/any_format_spec.rb +597 -0
  36. data/spec/detox/validations/any_inclusion_spec.rb +597 -0
  37. data/spec/detox/validations/any_length_spec.rb +597 -0
  38. data/spec/detox/validations/any_numericality_spec.rb +609 -0
  39. data/spec/detox/validations/any_presence_spec.rb +596 -0
  40. data/spec/detox/validations/any_validator_check_validity_spec.rb +126 -0
  41. data/spec/detox/validations/ordering_spec.rb +452 -0
  42. data/spec/detox/validations/possession_spec.rb +263 -0
  43. data/spec/detox/validity_broker_spec.rb +126 -0
  44. data/spec/spec_helper.rb +24 -0
  45. data/spec/test_class/all_absence_test.rb +14 -0
  46. data/spec/test_class/all_acceptance_test.rb +27 -0
  47. data/spec/test_class/all_exclusion_test.rb +15 -0
  48. data/spec/test_class/all_format_test.rb +26 -0
  49. data/spec/test_class/all_inclusion_test.rb +27 -0
  50. data/spec/test_class/all_length_test.rb +28 -0
  51. data/spec/test_class/all_numericality_test.rb +33 -0
  52. data/spec/test_class/all_presence_test.rb +14 -0
  53. data/spec/test_class/any_absence_test.rb +33 -0
  54. data/spec/test_class/any_acceptance_test.rb +34 -0
  55. data/spec/test_class/any_exclusion_test.rb +34 -0
  56. data/spec/test_class/any_format_test.rb +34 -0
  57. data/spec/test_class/any_inclusion_test.rb +33 -0
  58. data/spec/test_class/any_length_test.rb +33 -0
  59. data/spec/test_class/any_numericality_test.rb +35 -0
  60. data/spec/test_class/any_presence_test.rb +33 -0
  61. data/spec/test_class/array_validity_test.rb +6 -0
  62. data/spec/test_class/model_base.rb +11 -0
  63. data/spec/test_class/ordering_test.rb +33 -0
  64. data/spec/test_class/possession_test.rb +22 -0
  65. metadata +219 -0
@@ -0,0 +1,4 @@
1
+ # coding: utf-8
2
+ module Detox
3
+ VERSION = "1.0.0"
4
+ end
@@ -0,0 +1,214 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "test_class/array_validity_test"
4
+
5
+ describe Detox::ArrayValidity do
6
+ let(:test) { ArrayValidityTest.new }
7
+
8
+ describe "#convert_to_validatee" do
9
+ context "without option" do# {{{
10
+ context "when given Array" do
11
+ let(:actual) { test.convert_to_validatee(["1", nil, "2", "", "3", " "]) }
12
+
13
+ it "returns itself" do
14
+ expect(actual).to eq ["1", nil, "2", "", "3", " "]
15
+ end
16
+ end
17
+
18
+ context "when given Hash" do
19
+ let(:actual) { test.convert_to_validatee({ :a => "1", :b => nil, :c => "2" , :d => "", :e => "3", :f => " "}) }
20
+
21
+ it "returns Array that contains given Hash values" do
22
+ expect(actual).to eq ["1", nil, "2", "", "3", " "]
23
+ end
24
+ end
25
+
26
+ context "when given nil" do
27
+ let(:actual) { test.convert_to_validatee(nil) }
28
+
29
+ it "returns empty Array" do
30
+ expect(actual).to eq []
31
+ end
32
+ end
33
+
34
+ context "when given other data" do
35
+ context "when data is not blank" do
36
+ let(:actual) { test.convert_to_validatee("data") }
37
+
38
+ it "returns Array that has given data only" do
39
+ expect(actual).to eq ["data"]
40
+ end
41
+ end
42
+ context "when data is empty" do
43
+ let(:actual) { test.convert_to_validatee("") }
44
+
45
+ it "returns empty Array that has empty data only" do
46
+ expect(actual).to eq [""]
47
+ end
48
+ end
49
+ context "when data is blank" do
50
+ let(:actual) { test.convert_to_validatee(" ") }
51
+
52
+ it "returns Array that has given blank data only" do
53
+ expect(actual).to eq [" "]
54
+ end
55
+ end
56
+ end
57
+ end# }}}
58
+
59
+ context "with ignore_nil_value option" do# {{{
60
+ let(:options) { { :ignore_nil_value => true } }
61
+ context "when given Array" do
62
+ let(:actual) { test.convert_to_validatee(["1", nil, "2", "", "3", " "], options) }
63
+
64
+ it "returns Array that removed nil" do
65
+ expect(actual).to eq ["1", "2", "", "3", " "]
66
+ end
67
+ end
68
+
69
+ context "when given Hash" do
70
+ let(:actual) { test.convert_to_validatee({ :a => "1", :b => nil, :c => "2" , :d => "", :e => "3", :f => " "}, options) }
71
+
72
+ it "returns Array that contains given Hash not nil values" do
73
+ expect(actual).to eq ["1", "2", "", "3", " "]
74
+ end
75
+ end
76
+
77
+ context "when given nil" do
78
+ let(:actual) { test.convert_to_validatee(nil, options) }
79
+
80
+ it "returns empty Array" do
81
+ expect(actual).to eq []
82
+ end
83
+ end
84
+
85
+ context "when given other data" do
86
+ context "when data is not blank" do
87
+ let(:actual) { test.convert_to_validatee("data", options) }
88
+
89
+ it "returns Array that has given data only" do
90
+ expect(actual).to eq ["data"]
91
+ end
92
+ end
93
+ context "when data is empty" do
94
+ let(:actual) { test.convert_to_validatee("", options) }
95
+
96
+ it "returns Array that has empty data only" do
97
+ expect(actual).to eq [""]
98
+ end
99
+ end
100
+ context "when data is blank" do
101
+ let(:actual) { test.convert_to_validatee(" ", options) }
102
+
103
+ it "returns Array that has given blank data only" do
104
+ expect(actual).to eq [" "]
105
+ end
106
+ end
107
+ end
108
+ end# }}}
109
+
110
+ context "with ignore_blank_value option" do# {{{
111
+ let(:options) { { :ignore_blank_value => true } }
112
+
113
+ context "when given Array" do
114
+ let(:actual) { test.convert_to_validatee(["1", nil, "2", "", "3", " "], options) }
115
+
116
+ it "returns Array that removed blank values" do
117
+ expect(actual).to eq ["1", "2", "3"]
118
+ end
119
+ end
120
+
121
+ context "when given Hash" do
122
+ let(:actual) { test.convert_to_validatee({ :a => "1", :b => nil, :c => "2" , :d => "", :e => "3", :f => " "}, options) }
123
+
124
+ it "returns Array that contains given Hash not blank values" do
125
+ expect(actual).to eq ["1", "2", "3"]
126
+ end
127
+ end
128
+
129
+ context "when given nil" do
130
+ let(:actual) { test.convert_to_validatee(nil, options) }
131
+
132
+ it "returns empty Array" do
133
+ expect(actual).to eq []
134
+ end
135
+ end
136
+
137
+ context "when given other data" do
138
+ context "when data is not blank" do
139
+ let(:actual) { test.convert_to_validatee("data", options) }
140
+
141
+ it "returns Array that has given data only" do
142
+ expect(actual).to eq ["data"]
143
+ end
144
+ end
145
+ context "when data is empty" do
146
+ let(:actual) { test.convert_to_validatee("", options) }
147
+
148
+ it "returns empty Array" do
149
+ expect(actual).to eq []
150
+ end
151
+ end
152
+ context "when data is blank" do
153
+ let(:actual) { test.convert_to_validatee(" ", options) }
154
+
155
+ it "returns empty Array" do
156
+ expect(actual).to eq []
157
+ end
158
+ end
159
+ end
160
+ end# }}}
161
+
162
+ context "with option that value is false" do# {{{
163
+ let(:options) { { :ignore_nil_value => false, :ignore_blank_value => false } }
164
+
165
+ context "when given Array" do
166
+ let(:actual) { test.convert_to_validatee(["1", nil, "2", "", "3", " "]) }
167
+
168
+ it "returns itself" do
169
+ expect(actual).to eq ["1", nil, "2", "", "3", " "]
170
+ end
171
+ end
172
+
173
+ context "when given Hash" do
174
+ let(:actual) { test.convert_to_validatee({ :a => "1", :b => nil, :c => "2" , :d => "", :e => "3", :f => " "}) }
175
+
176
+ it "returns Array that contains given Hash values" do
177
+ expect(actual).to eq ["1", nil, "2", "", "3", " "]
178
+ end
179
+ end
180
+
181
+ context "when given nil" do
182
+ let(:actual) { test.convert_to_validatee(nil) }
183
+
184
+ it "returns empty Array" do
185
+ expect(actual).to eq []
186
+ end
187
+ end
188
+
189
+ context "when given other data" do
190
+ context "when data is not blank" do
191
+ let(:actual) { test.convert_to_validatee("data") }
192
+
193
+ it "returns Array that has given data only" do
194
+ expect(actual).to eq ["data"]
195
+ end
196
+ end
197
+ context "when data is empty" do
198
+ let(:actual) { test.convert_to_validatee("") }
199
+
200
+ it "returns empty Array that has empty data only" do
201
+ expect(actual).to eq [""]
202
+ end
203
+ end
204
+ context "when data is not blank" do
205
+ let(:actual) { test.convert_to_validatee(" ") }
206
+
207
+ it "returns Array that has given blank data only" do
208
+ expect(actual).to eq [" "]
209
+ end
210
+ end
211
+ end
212
+ end# }}}
213
+ end
214
+ end
@@ -0,0 +1,147 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_absence_test"
5
+
6
+ describe Detox::Validations::AllAbsenceValidator do
7
+ describe "validation result" do
8
+ let(:test) { AllAbsenceTest.new }
9
+
10
+ context "when apply to nil" do
11
+ it "is valid" do
12
+ test.values = nil
13
+ expect(test.valid?).to eq true
14
+ end
15
+ end
16
+
17
+ context "when apply to Array" do
18
+ context "when apply to [] (empty)" do
19
+ it "is valid" do
20
+ test.values = []
21
+ expect(test.valid?).to eq true
22
+ end
23
+ end
24
+ context "when apply to [nil, nil, nil] (only nil)" do
25
+ it "is valid" do
26
+ test.values = [nil, nil, nil]
27
+ expect(test.valid?).to eq true
28
+ end
29
+ end
30
+ context "when apply to [nil, '', ' '] (nil, empty, blank)" do
31
+ it "is valid" do
32
+ test.values = [nil, "", " "]
33
+ expect(test.valid?).to eq true
34
+ end
35
+ end
36
+ context "when apply to [nil, '', ' ', '4'] (contains not blank value)" do
37
+ it "is invalid" do
38
+ test.values = [nil, "", " ", "4"]
39
+ expect(test.valid?).to eq false
40
+ end
41
+ end
42
+ end
43
+
44
+ context "when apply to Hash" do
45
+ context "when apply to {} (empty)" do
46
+ it "is valid" do
47
+ test.values = {}
48
+ expect(test.valid?).to eq true
49
+ end
50
+ end
51
+ context "when apply to { :a => nil, :b => nil, :c => nil } (only nil)" do
52
+ it "is valid" do
53
+ test.values = { :a => nil, :b => nil, :c => nil }
54
+ expect(test.valid?).to eq true
55
+ end
56
+ end
57
+ context "when apply to { :a => nil, :b => '', :c => ' ' } (only nil)" do
58
+ it "is valid" do
59
+ test.values = { :a => nil, :b => "", :c => " " }
60
+ expect(test.valid?).to eq true
61
+ end
62
+ end
63
+ context "when apply to { :a => nil, :b => '', :c => ' ', :d => '4' } (contains not blank value)" do
64
+ it "is invalid" do
65
+ test.values = { :a => nil, :b => "", :c => " ", :d => "4"}
66
+ expect(test.valid?).to eq false
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "error message" do
73
+ context "when without message option" do# {{{
74
+ let(:test) { AllAbsenceTest.new }
75
+
76
+ context "when valid" do
77
+ before do
78
+ test.values = [nil, "", " "]
79
+ test.valid?
80
+ end
81
+
82
+ it "has no message" do
83
+ expect(test.errors.present?).to eq false
84
+ end
85
+ end
86
+ context "when invalid" do
87
+ before do
88
+ test.values = [nil, "", "1"]
89
+ test.valid?
90
+ end
91
+
92
+ it "has 1 error message" do
93
+ expect(test.errors.empty?).to eq false
94
+ expect(test.errors.size).to eq 1
95
+ end
96
+ it "error message is associated with values attribute" do
97
+ expect(test.errors.include?(:values)).to eq true
98
+ end
99
+ it %q{error messsage is "Values can't contain not blank value"} do
100
+ expect(test.errors.full_messages.first).to eq "Values can't contain not blank value"
101
+ end
102
+ end
103
+ context "when using i18n" do
104
+ before do
105
+ @base_locale = I18n.locale
106
+ I18n.locale = :ja
107
+ test.values = [nil, "", "1"]
108
+ test.valid?
109
+ end
110
+ after do
111
+ I18n.locale = @base_locale
112
+ end
113
+ it "error messsage is translated" do
114
+ expect(test.errors.full_messages.first).to eq "Values には空ではない値を含められません"
115
+ end
116
+ end
117
+ end# }}}
118
+
119
+ context "when given message option" do# {{{
120
+ let(:test) { AllAbsenceTestWithMessageOption.new }
121
+
122
+ context "when invalid" do
123
+ before do
124
+ test.values = [nil, "", "1"]
125
+ test.valid?
126
+ end
127
+ it "error messsage uses given message" do
128
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
129
+ end
130
+ end
131
+ context "when using i18n" do
132
+ before do
133
+ @base_locale = I18n.locale
134
+ I18n.locale = :ja
135
+ test.values = [nil, "", "1"]
136
+ test.valid?
137
+ end
138
+ after do
139
+ I18n.locale = @base_locale
140
+ end
141
+ it "error messsage is not translated" do
142
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
143
+ end
144
+ end
145
+ end# }}}
146
+ end
147
+ end
@@ -0,0 +1,352 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_acceptance_test"
5
+
6
+ describe Detox::Validations::AllAcceptanceValidator do
7
+ describe "validation result" do
8
+ context "when given no additional option" do# {{{
9
+ let(:test) { AllAcceptanceTest.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.flags = nil
14
+ expect(test.valid?).to eq true
15
+ end
16
+ end
17
+
18
+ context "when apply to Array" do# {{{
19
+ context "when apply to [] (empty)" do
20
+ it "is valid" do
21
+ test.flags = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to ['1', '1', '1'] (valid flags)" do
26
+ it "is valid" do
27
+ test.flags = ["1", "1", "1"]
28
+ expect(test.valid?).to eq true
29
+ end
30
+ end
31
+ context "when apply to ['1', '1', '4'] (contains invalid value)" do
32
+ it "is invalid" do
33
+ test.flags = ["1", "1", "4"]
34
+ expect(test.valid?).to eq false
35
+ end
36
+ end
37
+ context "when apply to ['1', '1', nil] (contains nil)" do
38
+ it "is valid" do
39
+ test.flags = ['1', '1', nil]
40
+ expect(test.valid?).to eq true
41
+ end
42
+ end
43
+ context "when apply to ['1', '1', ''] (contains empty)" do
44
+ it "is invalid" do
45
+ test.flags = ['1', '1', '']
46
+ expect(test.valid?).to eq false
47
+ end
48
+ end
49
+ context "when apply to ['1', '1', ' '] (contains blank)" do
50
+ it "is invalid" do
51
+ test.flags = ['1', '1', ' ']
52
+ expect(test.valid?).to eq false
53
+ end
54
+ end
55
+ end# }}}
56
+
57
+ context "when apply to Hash" do# {{{
58
+ context "when apply to {} (empty)" do
59
+ it "is valid" do
60
+ test.flags = {}
61
+ expect(test.valid?).to eq true
62
+ end
63
+ end
64
+ context "when apply to { :a => '1', :b => '1', :c => '1' } (valid flags)" do
65
+ it "is valid" do
66
+ test.flags = { :a => '1', :b => '1', :c => '1' }
67
+ expect(test.valid?).to eq true
68
+ end
69
+ end
70
+ context "when apply to { :a => '1', :b => '1', :c => '4' } (contains invalid value)" do
71
+ it "is invalid" do
72
+ test.flags = { :a => '1', :b => '1', :c => '4' }
73
+ expect(test.valid?).to eq false
74
+ end
75
+ end
76
+ context "when apply to { :a => '1', :b => '1', :c => nil } (contains nil)" do
77
+ it "is valid" do
78
+ test.flags = { :a => '1', :b => '1', :c => nil }
79
+ expect(test.valid?).to eq true
80
+ end
81
+ end
82
+ context "when apply to { :a => '1', :b => '1', :c => '' } (contains empty)" do
83
+ it "is invalid" do
84
+ test.flags = { :a => '1', :b => '1', :c => '' }
85
+ expect(test.valid?).to eq false
86
+ end
87
+ end
88
+ context "when apply to { :a => '1', :b => '1', :c => ' ' } (contains blank)" do
89
+ it "is invalid" do
90
+ test.flags = { :a => '1', :b => '1', :c => ' ' }
91
+ expect(test.valid?).to eq false
92
+ end
93
+ end
94
+ end# }}}
95
+ end# }}}
96
+
97
+ context "when given ignore_nil_value option" do# {{{
98
+ let(:test) { AllAcceptanceTestWithIgnoreNilValueOption.new }
99
+
100
+ context "when apply to nil" do
101
+ it "is valid" do
102
+ test.flags = nil
103
+ expect(test.valid?).to eq true
104
+ end
105
+ end
106
+
107
+ context "when apply to Array" do# {{{
108
+ context "when apply to [] (empty)" do
109
+ it "is valid" do
110
+ test.flags = []
111
+ expect(test.valid?).to eq true
112
+ end
113
+ end
114
+ context "when apply to ['1', '1', '1'] (valid flags)" do
115
+ it "is valid" do
116
+ test.flags = ["1", "1", "1"]
117
+ expect(test.valid?).to eq true
118
+ end
119
+ end
120
+ context "when apply to ['1', '1', '4'] (contains invalid flags)" do
121
+ it "is invalid" do
122
+ test.flags = ["1", "1", "4"]
123
+ expect(test.valid?).to eq false
124
+ end
125
+ end
126
+ context "when apply to ['1', '1', nil] (contains nil)" do
127
+ it "is valid" do
128
+ test.flags = ['1', '1', nil]
129
+ expect(test.valid?).to eq true
130
+ end
131
+ end
132
+ context "when apply to ['1', '1', ''] (contains empty)" do
133
+ it "is invalid" do
134
+ test.flags = ['1', '1', '']
135
+ expect(test.valid?).to eq false
136
+ end
137
+ end
138
+ context "when apply to ['1', '1', ' '] (contains blank)" do
139
+ it "is invalid" do
140
+ test.flags = ['1', '1', ' ']
141
+ expect(test.valid?).to eq false
142
+ end
143
+ end
144
+ end# }}}
145
+
146
+ context "when apply to Hash" do# {{{
147
+ context "when apply to {} (empty)" do
148
+ it "is valid" do
149
+ test.flags = {}
150
+ expect(test.valid?).to eq true
151
+ end
152
+ end
153
+ context "when apply to { :a => '1', :b => '1', :c => '1' } (valid flags)" do
154
+ it "is valid" do
155
+ test.flags = { :a => '1', :b => '1', :c => '1' }
156
+ expect(test.valid?).to eq true
157
+ end
158
+ end
159
+ context "when apply to { :a => '1', :b => '1', :c => '4' } (contains invalid flags)" do
160
+ it "is invalid" do
161
+ test.flags = { :a => '1', :b => '1', :c => '4' }
162
+ expect(test.valid?).to eq false
163
+ end
164
+ end
165
+ context "when apply to { :a => '1', :b => '1', :c => nil } (contains nil)" do
166
+ it "is valid" do
167
+ test.flags = { :a => '1', :b => '1', :c => nil }
168
+ expect(test.valid?).to eq true
169
+ end
170
+ end
171
+ context "when apply to { :a => '1', :b => '1', :c => '' } (contains empty)" do
172
+ it "is invalid" do
173
+ test.flags = { :a => '1', :b => '1', :c => '' }
174
+ expect(test.valid?).to eq false
175
+ end
176
+ end
177
+ context "when apply to { :a => '1', :b => '1', :c => ' ' } (contains blank)" do
178
+ it "is invalid" do
179
+ test.flags = { :a => '1', :b => '1', :c => ' ' }
180
+ expect(test.valid?).to eq false
181
+ end
182
+ end
183
+ end# }}}
184
+ end# }}}
185
+
186
+ context "when given ignore_blank_value option" do# {{{
187
+ let(:test) { AllAcceptanceTestWithIgnoreBlankValueOption.new }
188
+
189
+ context "when apply to nil" do
190
+ it "is valid" do
191
+ test.flags = nil
192
+ expect(test.valid?).to eq true
193
+ end
194
+ end
195
+
196
+ context "when apply to Array" do# {{{
197
+ context "when apply to [] (empty)" do
198
+ it "is valid" do
199
+ test.flags = []
200
+ expect(test.valid?).to eq true
201
+ end
202
+ end
203
+ context "when apply to ['1', '1', '1'] (valid flags)" do
204
+ it "is valid" do
205
+ test.flags = ["1", "1", "1"]
206
+ expect(test.valid?).to eq true
207
+ end
208
+ end
209
+ context "when apply to ['1', '1', '4'] (contains invalid flags)" do
210
+ it "is invalid" do
211
+ test.flags = ["1", "1", "4"]
212
+ expect(test.valid?).to eq false
213
+ end
214
+ end
215
+ context "when apply to ['1', '1', nil] (contains nil)" do
216
+ it "is valid" do
217
+ test.flags = ['1', '1', nil]
218
+ expect(test.valid?).to eq true
219
+ end
220
+ end
221
+ context "when apply to ['1', '1', ''] (contains empty)" do
222
+ it "is valid" do
223
+ test.flags = ['1', '1', '']
224
+ expect(test.valid?).to eq true
225
+ end
226
+ end
227
+ context "when apply to ['1', '1', ' '] (contains blank)" do
228
+ it "is valid" do
229
+ test.flags = ['1', '1', ' ']
230
+ expect(test.valid?).to eq true
231
+ end
232
+ end
233
+ end# }}}
234
+
235
+ context "when apply to Hash" do# {{{
236
+ context "when apply to {} (empty)" do
237
+ it "is valid" do
238
+ test.flags = {}
239
+ expect(test.valid?).to eq true
240
+ end
241
+ end
242
+ context "when apply to { :a => '1', :b => '1', :c => '1' } (valid flags)" do
243
+ it "is valid" do
244
+ test.flags = { :a => '1', :b => '1', :c => '1' }
245
+ expect(test.valid?).to eq true
246
+ end
247
+ end
248
+ context "when apply to { :a => '1', :b => '1', :c => '4' } (contains invalid flags)" do
249
+ it "is invalid" do
250
+ test.flags = { :a => '1', :b => '1', :c => '4' }
251
+ expect(test.valid?).to eq false
252
+ end
253
+ end
254
+ context "when apply to { :a => '1', :b => '1', :c => nil } (contains nil)" do
255
+ it "is valid" do
256
+ test.flags = { :a => '1', :b => '1', :c => nil }
257
+ expect(test.valid?).to eq true
258
+ end
259
+ end
260
+ context "when apply to { :a => '1', :b => '1', :c => '' } (contains empty)" do
261
+ it "is valid" do
262
+ test.flags = { :a => '1', :b => '1', :c => '' }
263
+ expect(test.valid?).to eq true
264
+ end
265
+ end
266
+ context "when apply to { :a => '1', :b => '1', :c => ' ' } (contains blank)" do
267
+ it "is valid" do
268
+ test.flags = { :a => '1', :b => '1', :c => ' ' }
269
+ expect(test.valid?).to eq true
270
+ end
271
+ end
272
+ end# }}}
273
+ end# }}}
274
+ end
275
+
276
+ describe "error message" do
277
+ context "when without message option" do# {{{
278
+ let(:test) { AllAcceptanceTest.new }
279
+
280
+ context "when valid" do
281
+ before do
282
+ test.flags = ['1', '1', '1']
283
+ test.valid?
284
+ end
285
+
286
+ it "has no message" do
287
+ expect(test.errors.present?).to eq false
288
+ end
289
+ end
290
+ context "when invalid" do
291
+ before do
292
+ test.flags = ['1', '1', '4']
293
+ test.valid?
294
+ end
295
+
296
+ it "has 1 error message" do
297
+ expect(test.errors.empty?).to eq false
298
+ expect(test.errors.size).to eq 1
299
+ end
300
+ it "error message is associated with flags attribute" do
301
+ expect(test.errors.include?(:flags)).to eq true
302
+ end
303
+ it %q{error messsage is "Flags must be all accepted"} do
304
+ expect(test.errors.full_messages.first).to eq "Flags must be all accepted"
305
+ end
306
+ end
307
+ context "when using i18n" do
308
+ before do
309
+ @base_locale = I18n.locale
310
+ I18n.locale = :ja
311
+ test.flags = ['1', '1', '4']
312
+ test.valid?
313
+ end
314
+ after do
315
+ I18n.locale = @base_locale
316
+ end
317
+ it "error messsage is translated" do
318
+ expect(test.errors.full_messages.first).to eq "Flags を全て承諾してください"
319
+ end
320
+ end
321
+ end# }}}
322
+
323
+ context "when given message option" do# {{{
324
+ let(:test) { AllAcceptanceTestWithMessageOption.new }
325
+
326
+ context "when invalid" do
327
+ before do
328
+ test.flags = ['1', '1', '4']
329
+ test.valid?
330
+ end
331
+ it "error messsage uses given message" do
332
+ expect(test.errors.full_messages.first).to eq 'Flags is invalid'
333
+ end
334
+ end
335
+ context "when using i18n" do
336
+ before do
337
+ @base_locale = I18n.locale
338
+ I18n.locale = :ja
339
+ test.flags = ['1', '1', '4']
340
+ test.valid?
341
+ end
342
+ after do
343
+ I18n.locale = @base_locale
344
+ end
345
+ it "error messsage is not translated" do
346
+ expect(test.errors.full_messages.first).to eq 'Flags is invalid'
347
+ end
348
+ end
349
+ end# }}}
350
+ end
351
+ end
352
+