Commit bd7942b8dca9ab796f53d76bee80153a623a22c8
Committed by
Daniela Feitosa
1 parent
b3c57860
Exists in
master
and in
28 other branches
Show a more descriptive message to user when not fill the birthdate properly
- Also, adding 'validates_multiparameter_assignments' plugin (ActionItem1951)
Showing
7 changed files
with
142 additions
and
0 deletions
Show diff stats
app/models/person.rb
@@ -0,0 +1,57 @@ | @@ -0,0 +1,57 @@ | ||
1 | +Feature: edit profile | ||
2 | + | ||
3 | + Background: | ||
4 | + Given the following users | ||
5 | + | login | | ||
6 | + | joao | | ||
7 | + Given I am logged in as "joao" | ||
8 | + | ||
9 | + Scenario: Warn about invalid birth date when active | ||
10 | + Given the following person fields are active fields | ||
11 | + | display_name | | ||
12 | + | birth_date | | ||
13 | + When I go to joao's control panel | ||
14 | + And I follow "Profile Info and settings" | ||
15 | + And I select "November" | ||
16 | + And I select "15" | ||
17 | + And I press "Save" | ||
18 | + Then I should see "Birth date is invalid" | ||
19 | + And I should not see "Birth date is mandatory" | ||
20 | + | ||
21 | + Scenario: Warn about invalid birth date when required | ||
22 | + Given the following person fields are required fields | ||
23 | + | display_name | | ||
24 | + | birth_date | | ||
25 | + When I go to joao's control panel | ||
26 | + And I follow "Profile Info and settings" | ||
27 | + And I select "November" | ||
28 | + And I select "15" | ||
29 | + And I press "Save" | ||
30 | + Then I should see "Birth date is invalid" | ||
31 | + And I should see "Birth date is mandatory" | ||
32 | + | ||
33 | + Scenario: Not warn if birth date is valid when active | ||
34 | + Given the following person fields are active fields | ||
35 | + | display_name | | ||
36 | + | birth_date | | ||
37 | + When I go to joao's control panel | ||
38 | + And I follow "Profile Info and settings" | ||
39 | + And I select "November" | ||
40 | + And I select "15" | ||
41 | + And I select "1980" | ||
42 | + And I press "Save" | ||
43 | + Then I should not see "Birth date is invalid" | ||
44 | + And I should not see "Birth date is mandatory" | ||
45 | + | ||
46 | + Scenario: Not warn if birth date is valid when required | ||
47 | + Given the following person fields are required fields | ||
48 | + | display_name | | ||
49 | + | birth_date | | ||
50 | + When I go to joao's control panel | ||
51 | + And I follow "Profile Info and settings" | ||
52 | + And I select "November" | ||
53 | + And I select "15" | ||
54 | + And I select "1980" | ||
55 | + And I press "Save" | ||
56 | + Then I should not see "Birth date is invalid" | ||
57 | + And I should not see "Birth date is mandatory" |
test/unit/person_test.rb
@@ -1183,4 +1183,15 @@ class PersonTest < Test::Unit::TestCase | @@ -1183,4 +1183,15 @@ class PersonTest < Test::Unit::TestCase | ||
1183 | assert_includes Person.more_active, profile | 1183 | assert_includes Person.more_active, profile |
1184 | end | 1184 | end |
1185 | 1185 | ||
1186 | + should 'handle multiparameter attribute exception on birth date field' do | ||
1187 | + assert_nothing_raised ActiveRecord::MultiparameterAssignmentErrors do | ||
1188 | + p = Person.new( | ||
1189 | + :name => 'birthday', :identifier => 'birthday', :user_id => 999, | ||
1190 | + 'birth_date(1i)' => '', 'birth_date(2i)' => '6', 'birth_date(3i)' => '16' | ||
1191 | + ) | ||
1192 | + assert !p.valid? | ||
1193 | + assert p.errors.invalid?(:birth_date) | ||
1194 | + end | ||
1195 | + end | ||
1196 | + | ||
1186 | end | 1197 | end |
vendor/plugins/validates_multiparameter_assignments/MIT-LICENSE
0 → 100644
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +Copyright (c) 2006 Shinya Kasatani | ||
2 | + | ||
3 | +Permission is hereby granted, free of charge, to any person obtaining | ||
4 | +a copy of this software and associated documentation files (the | ||
5 | +"Software"), to deal in the Software without restriction, including | ||
6 | +without limitation the rights to use, copy, modify, merge, publish, | ||
7 | +distribute, sublicense, and/or sell copies of the Software, and to | ||
8 | +permit persons to whom the Software is furnished to do so, subject to | ||
9 | +the following conditions: | ||
10 | + | ||
11 | +The above copyright notice and this permission notice shall be | ||
12 | +included in all copies or substantial portions of the Software. | ||
13 | + | ||
14 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
15 | +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
16 | +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
17 | +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||
18 | +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||
19 | +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
20 | +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
vendor/plugins/validates_multiparameter_assignments/README
0 → 100644
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +* validates_multiparameter_assignments plugin | ||
2 | + | ||
3 | +A Ruby on Rails plugin that adds "validates_multiparameter_assignments" method to ActiveRecord::Base. | ||
4 | +Example: | ||
5 | + | ||
6 | +class User < ActiveRecord::Base | ||
7 | + validates_multiparameter_assignments | ||
8 | +end | ||
9 | + | ||
10 | +This makes multiparameter assignment errors to be added to the model, rather than raising ActiveRecord::MultiparameterAssignmentErrors. | ||
11 | +By default the error message is read from ActiveRecord::Base.default_error_messages[:invalid]. You can change the message by adding an option like this: | ||
12 | + | ||
13 | +validates_multiparameter_assignments :message => " is not entered correctly." | ||
14 | + | ||
15 | +This plugin is especially useful when you use date_select helper method in the view, where the user can enter invalid dates such as "Feb 31, 2006". | ||
16 | + | ||
17 | +- Shinya Kasatani <kasatani at gmail.com> |
vendor/plugins/validates_multiparameter_assignments/init.rb
0 → 100644
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +require 'validates_multiparameter_assignments' |
vendor/plugins/validates_multiparameter_assignments/lib/validates_multiparameter_assignments.rb
0 → 100644
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +module ActiveRecord | ||
2 | + module Validations | ||
3 | + module ClassMethods | ||
4 | + def validates_multiparameter_assignments(options = {}) | ||
5 | + configuration = if Rails::VERSION::STRING < "2.2.0" | ||
6 | + { :message => _("%{fn} is invalid.") } | ||
7 | + else | ||
8 | + { :message => I18n.translate('activerecord.errors.messages')[:invalid] } | ||
9 | + end.update(options) | ||
10 | + | ||
11 | + alias_method :assign_multiparameter_attributes_without_rescuing, :assign_multiparameter_attributes | ||
12 | + attr_accessor :assignment_error_attrs | ||
13 | + | ||
14 | + define_method(:assign_multiparameter_attributes) do |pairs| | ||
15 | + self.assignment_error_attrs = [] | ||
16 | + begin | ||
17 | + assign_multiparameter_attributes_without_rescuing(pairs) | ||
18 | + rescue ActiveRecord::MultiparameterAssignmentErrors | ||
19 | + $!.errors.each do |error| | ||
20 | + self.assignment_error_attrs << error.attribute | ||
21 | + end | ||
22 | + end | ||
23 | + end | ||
24 | + private :assign_multiparameter_attributes | ||
25 | + | ||
26 | + validate do |record| | ||
27 | + record.assignment_error_attrs && record.assignment_error_attrs.each do |attr| | ||
28 | + record.errors.add(attr, configuration[:message]) | ||
29 | + end | ||
30 | + end | ||
31 | + end | ||
32 | + end | ||
33 | + end | ||
34 | +end |