aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Allow attributes with a proc default to be marshalledSean Griffin2018-01-231-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't implement much custom marshalling logic for these objects, but the proc default case needs to be handled separately. Unfortunately there's no way to just say "do what you would have done but with this value for one ivar", so we have to manually implement `marshal_load` as well. The test case is a little bit funky, but I'd really like an equality test in there, and there's no easy way to add one now that this is out of AR (since the `attributes` method isn't here) Fixes #31216
* | | | More exercise `ActiveModel::Dirty` testsRyuta Kamizono2018-01-201-3/+24
| | | |
* | | | Change test case name to FormatValidationTestPatrik Bóna2018-01-141-1/+1
| | | | | | | | | | | | | | | | I believe that this was caused by a copy/paste mistake.
* | | | Fix validation callbacks on multiple contextYoshiyuki Hirano2017-12-201-0/+43
| |_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I found a bug that validation callbacks don't fire on multiple context. So I've fixed it. Example: ```ruby class Dog include ActiveModel::Validations include ActiveModel::Validations::Callbacks attr_accessor :history def initialize @history = [] end before_validation :set_before_validation_on_a, on: :a before_validation :set_before_validation_on_b, on: :b after_validation :set_after_validation_on_a, on: :a after_validation :set_after_validation_on_b, on: :b def set_before_validation_on_a; history << "before_validation on a"; end def set_before_validation_on_b; history << "before_validation on b"; end def set_after_validation_on_a; history << "after_validation on a" ; end def set_after_validation_on_b; history << "after_validation on b" ; end end ``` Before: ``` d = Dog.new d.valid?([:a, :b]) d.history # [] ``` After: ``` d = Dog.new d.valid?([:a, :b]) d.history # ["before_validation on a", "before_validation on b", "after_validation on a", "after_validation on b"] ```
* | | Suppress `warning: BigDecimal.new is deprecated` in Active ModelYasuo Honda2017-12-143-23/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `BigDecimal.new` has been deprecated in BigDecimal 1.3.3 which will be a default for Ruby 2.5. Refer ruby/bigdecimal@5337373 * This commit has been made as follows: ```ruby $ cd activemodel/ $ git grep -l BigDecimal.new | grep \.rb | xargs sed -i -e "s/BigDecimal.new/BigDecimal/g" ``` * This commit has been tested with these Ruby versions: ``` ruby 2.5.0dev (2017-12-15 trunk 61262) [x86_64-linux] ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux] ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-linux] ```
* | | Change how `AttributeSet::Builder` receives its defaultsSean Griffin2017-11-271-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are two concerns which are both being combined into one here, but both have the same goal. There are certain attributes which we want to always consider initialized. Previously, they were handled separately. The primary key (which is assumed to be backed by a database column) needs to be initialized, because there is a ton of code in Active Record that assumes `foo.id` will never raise. Additionally, we want attributes which aren't backed by a database column to always be initialized, since we would never receive a database value for them. Ultimately these two concerns can be combined into one. The old implementation hid a lot of inherent complexity, and is hard to optimize from the outside. We can simplify things significantly by just passing in a hash. This has slightly different semantics from the old behavior, in that `Foo.select(:bar).first.id` will return the default value for the primary key, rather than `nil` unconditionally -- however, the default value is always `nil` in practice.
* | | Merge pull request #31117 from renuo/fix_errors_addedRafael França2017-11-131-0/+7
|\ \ \ | | | | | | | | fix bug on added? method
| * | | fix bug on added? methodAlessandro Rodi2017-11-131-0/+7
| | | | | | | | | | | | | | | | fix rubocop issues
* | | | Add missing autoload `Type` (#31123)Ryuta Kamizono2017-11-1114-14/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Attribute modules (`Attribute`, `Attributes`, `AttributeSet`) uses `Type`, but referencing `Type` before the modules still fail. ``` % ./bin/test -w test/cases/attribute_test.rb -n test_with_value_from_user_validates_the_value Run options: -n test_with_value_from_user_validates_the_value --seed 31876 E Error: ActiveModel::AttributeTest#test_with_value_from_user_validates_the_value: NameError: uninitialized constant ActiveModel::AttributeTest::Type /Users/kamipo/src/github.com/rails/rails/activemodel/test/cases/attribute_test.rb:233:in `block in <class:AttributeTest>' bin/test test/cases/attribute_test.rb:232 Finished in 0.002985s, 335.0479 runs/s, 335.0479 assertions/s. 1 runs, 1 assertions, 0 failures, 1 errors, 0 skips ``` Probably we need more autoloading at least `Type`.
* | | | Add missing requiresyuuji.yaginuma2017-11-101-0/+2
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, executing the test with only `attribute_set_test.rb` results in an error. ``` ./bin/test -w test/cases/attribute_set_test.rb Run options: --seed 33470 # Running: E Error: ActiveModel::AttributeSetTest#test_#map_returns_a_new_attribute_set_with_the_changes_applied: NameError: uninitialized constant ActiveModel::AttributeSetTest::AttributeSet Did you mean? ActiveModel::Attributes ActiveModel::Attribute activemodel/test/cases/attribute_set_test.rb:235:in `block in <class:AttributeSetTest>' bin/test test/cases/attribute_set_test.rb:234 ``` Added a missing require to fix this. Also, I suspect that this is the cause of failures in CI. Ref: https://travis-ci.org/rails/rails/jobs/299994708
* | | Move Attribute and AttributeSet to ActiveModelLisa Ugray2017-11-095-32/+532
| | | | | | | | | | | | | | | Use these to back the attributes API. Stop automatically including ActiveModel::Dirty in ActiveModel::Attributes, and make it optional.
* | | Merge pull request #31061 from ↵Rafael França2017-11-065-7/+62
|\ \ \ | | | | | | | | | | | | | | | | bogdanvlviv/test-if-unless-options-for-validations Add cases to test combining validation conditions
| * | | Add cases to test combining validation conditionsbogdanvlviv2017-11-065-7/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Test condition that is defined by array of conditions - Test condition that is defined by combining :if and :unless - Test local condition that is defined by :if - Test local condition that is defined by :unless See http://edgeguides.rubyonrails.org/active_record_validations.html#combining-validation-conditions
* | | | Execute `ConfirmationValidator` validation when `_confirmation`'s value is ↵bogdanvlviv2017-11-051-0/+13
|/ / / | | | | | | | | | `false`
* | | Allow passing a Proc or Symbol as an argument to length validator valuesMatt Rohrer2017-10-261-0/+31
| | | | | | | | | | | | | | | This brings the Length validator in line with the Numericality validator, which currently supports Proc & Symbol arguments
* | | Merge pull request #30920 from lugray/attributes_to_amSean Griffin2017-10-232-0/+287
|\ \ \ | | | | | | | | Start bringing attributes API to AM
| * | | Start bringing attributes API to AMLisa Ugray2017-10-182-0/+287
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the first PR of a WIP to bring the attributes API to ActiveModel. It is not yet ready for public API. The `attributes_dirty_test.rb` file was created based on `dirty_test.rb`, and the simplifications in the diff do much to motivate this change. ``` diff activemodel/test/cases/dirty_test.rb activemodel/test/cases/attributes_dirty_test.rb 3a4 > require "active_model/attributes" 5c6 < class DirtyTest < ActiveModel::TestCase --- > class AttributesDirtyTest < ActiveModel::TestCase 7,41c8,12 < include ActiveModel::Dirty < define_attribute_methods :name, :color, :size < < def initialize < @name = nil < @color = nil < @size = nil < end < < def name < @name < end < < def name=(val) < name_will_change! < @name = val < end < < def color < @color < end < < def color=(val) < color_will_change! unless val == @color < @color = val < end < < def size < @size < end < < def size=(val) < attribute_will_change!(:size) unless val == @size < @size = val < end --- > include ActiveModel::Model > include ActiveModel::Attributes > attribute :name, :string > attribute :color, :string > attribute :size, :integer ```
* | | | Remove deprecated `:if` and `:unless` string filter for callbacksRafael Mendonça França2017-10-232-104/+2
|/ / /
* | | Merge pull request #29788 from kamipo/remove_unused_mutex_mRafael França2017-07-171-1/+1
|\ \ \ | | | | | | | | Remove unused `Mutex_m` in Active Model
| * | | Make `generated_attribute_methods` to privateRyuta Kamizono2017-07-141-1/+1
| | | | | | | | | | | | | | | | Because `generated_attribute_methods` is an internal API.
* | | | Use frozen string literal in activemodel/Kir Shatrov2017-07-1661-0/+122
|/ / /
* | | Add ActiveModel::Errors#merge!Jahfer Husain2017-07-071-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ActiveModel::Errors#merge! allows ActiveModel::Errors to append errors from a separate ActiveModel::Errors instance onto their own. Example: person = Person.new person.errors.add(:name, :blank) errors = ActiveModel::Errors.new(Person.new) errors.add(:name, :invalid) person.errors.merge!(errors) puts person.errors.messages # => { name: ["can't be blank", "is invalid"] }
* | | Revert "Merge pull request #29540 from kirs/rubocop-frozen-string"Matthew Draper2017-07-0261-61/+0
| | | | | | | | | | | | | | | This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
* | | Merge pull request #29540 from kirs/rubocop-frozen-stringMatthew Draper2017-07-0261-0/+61
|\ \ \ | | | | | | | | | | | | Enforce frozen string in Rubocop
| * | | Enforce frozen string in RubocopKir Shatrov2017-07-0161-0/+61
| | | |
* | | | Make ActiveModel frozen string literal friendly.Pat Allan2017-06-202-2/+2
|/ / / | | | | | | | | | Includes two external changes because they're referenced within the ActiveModel test suite.
* | | Replace \Z to \zRyuta Kamizono2017-04-241-3/+3
| | | | | | | | | | | | \Z was a mistake of \z. Replace \Z to \z to prevent newly \Z added.
* | | :scissors:Ryuta Kamizono2017-04-131-1/+0
| | | | | | | | | | | | [ci skip]
* | | Don't freeze input stringsMatthew Draper2017-04-121-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | See 34321e4a433bb7eef48fd743286601403f8f7d82 for background on ImmutableString vs String. Our String type cannot delegate typecasting to ImmutableString, because the latter freezes its input: duplicating the value after that gives us an unfrozen result, but still mutates the originally passed object.
* | | Fix ActiveModel::Errors #keys, #valuesbogdanvlviv2017-03-281-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before: person.errors.keys # => [] person.errors.values # => [] person.errors[:name] # => [] person.errors.keys # => [:name] person.errors.values # => [[]] After: person.errors.keys # => [] person.errors.values # => [] person.errors[:name] # => [] person.errors.keys # => [] person.errors.values # => [] Related to #23468
* | | Merge pull request #28050 from namusyaka/avoid-converting-int-into-floatRafael Mendonça França2017-03-271-0/+9
|\ \ \ | |/ / |/| | | | | Avoid converting integer as a string into float
| * | Avoid converting integer as a string into floatnamusyaka2017-02-181-0/+9
| | |
* | | Fix invalid string Decimal casting under ruby 2.4John Hawthorn2017-02-243-0/+17
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Ruby 2.4, BigDecimal(), as used by the Decimal cast, was changed so that it will raise ArgumentError when passed an invalid string, in order to be more consistent with Integer(), Float(), etc. The other numeric types use ex. to_i and to_f. Unfortunately, we can't simply change BigDecimal() to to_d. String#to_d raises errors like BigDecimal(), unlike all the other to_* methods (this should probably be filed as a ruby bug). Instead, this simulates the existing behaviour and the behaviour of the other to_* methods by finding a numeric string at the start of the passed in value, and parsing that using BigDecimal(). See also https://bugs.ruby-lang.org/issues/10286 https://github.com/ruby/bigdecimal/commit/3081a627cebdc1fc119425c7a9f009dbb6bec8e8
* | Remove deprecated behavior that halts callbacks when the return is falseRafael Mendonça França2017-02-072-13/+10
| |
* | Merge pull request #27608 from ↵Rafael França2017-02-073-11/+31
|\ \ | | | | | | | | | | | | kamipo/remove_deprecated_passing_string_to_define_callback Remove deprecated passing string to define callback
| * | Deprecate passing string to `:if` and `:unless` conditional options on ↵Ryuta Kamizono2017-02-042-10/+30
| | | | | | | | | | | | `set_callback` and `skip_callback`
| * | Remove deprecated passing string to define callbackRyuta Kamizono2017-02-041-1/+1
| | | | | | | | | | | | And raise `ArgumentError` when passing string to define callback.
* | | Remove `ActiveModel::TestCase` from libyuuji.yaginuma2017-02-071-1/+1
|/ / | | | | | | | | | | `ActiveModel::TestCase` is used only for the test of Active Model. Also, it is a private API and can not be used in applications. Therefore, it is not necessary to include it in lib.
* | Don't pollute Object with rubinius_skip and jruby_skipAkira Matsuda2017-01-171-9/+9
| | | | | | | | we call them only in the tests
* | Missing require for strip_heredocAkira Matsuda2017-01-171-0/+1
| |
* | "Use assert_nil if expecting nil. This will fail in minitest 6."Akira Matsuda2016-12-255-13/+13
| |
* | Describe what we are protectingAkira Matsuda2016-12-231-0/+2
| |
* | Missing require "yaml"Akira Matsuda2016-12-121-0/+1
| |
* | Make ActiveModel::Errors backward compatible with 4.2Rafael Mendonça França2016-12-081-0/+20
| | | | | | | | | | | | | | If a Error object was serialized in the database as YAML in the Rails 4.2 version, if we load in the Rails 5.0 version it will miss the @details instance variable so methods like #clear and #add will start to fail.
* | Merge pull request #26696 from iainbeeston/only-ruby-types-in-activemodelSean Griffin2016-12-081-18/+0
|\ \ | | | | | | | | | Moved database-specific ActiveModel types into ActiveRecord
| * | Moved database-specific ActiveModel types into ActiveRecordIain Beeston2016-10-141-18/+0
| |/ | | | | | | ie. DecimalWithoutScale, Text and UnsignedInteger
* | Allow indifferent access in ActiveModel::ErrorsKenichi Kamiya2016-11-221-3/+8
| | | | | | | | | | | | `#[]` has already applied indifferent access, but some methods does not. `#include?`, `#has_key?`, `#key?`, `#delete` and `#full_messages_for`.
* | Do not rely on Ruby implementation in AM testKir Shatrov2016-11-191-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | Now a few tests in ActiveModel rely on Ruby implementation and the fact that in MRI `97.18` as a float is greater than `97.18` as a BigDecimal. This is only relevant for MRI. On JRuby, comparing float to BigDecimal would be conversion of them to the same type and they will be equal. I'd like the ActiveModel test suite to be Ruby implementation-agnostic. Here we test ActiveModel, not the Ruby internals. This PR fixes a couple more JRuby tests.
* | Merge pull request #26935 from y-yagi/fix_ruby_warningAndrew White2016-10-311-1/+1
|\ \ | | | | | | remove warning from big integer test
| * | remove warning from big integer testyuuji.yaginuma2016-10-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | This removes the following warnings. ``` activemodel/test/cases/type/big_integer_test.rb:15: warning: ambiguous first argument; put parentheses or a space even after `-' operator ```