detox 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+