aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
Commit message (Collapse)AuthorAgeFilesLines
* Add :weeks to the list of variable duration partsAndrew White2016-08-031-0/+32
| | | | | | | | Since 434df00 week durations are no longer converted to days. This means we need to add :weeks to the parts that ActiveSupport::TimeWithZone will consider being of variable duration to take account of DST transitions. Fixes #26039.
* Revert "Adds `not_in?` onto Object"David Heinemeier Hansson2016-07-291-53/+0
|
* Merge pull request #25914 from jmccartie/jm/not_inRafael França2016-07-221-0/+53
|\ | | | | Adds `not_in?` onto Object
| * Adds `not_in?` onto ObjectJon McCartie2016-07-211-0/+53
| |
* | systematic revision of =~ usage in ASXavier Noria2016-07-226-12/+18
|/ | | | | Where appropriate prefer the more concise Regexp#match?, String#include?, String#start_with?, and String#end_with?
* define Range#match? if Ruby < 2.4Xavier Noria2016-07-221-0/+24
| | | | | | See the rationale in the documentation included in this patch. We are going to gradually introduce this predicate in the code base.
* Allow MessageEncryptor to take advantage of authenticated encryption modesBart de Water2016-07-211-0/+18
| | | | | | AEAD modes like `aes-256-gcm` provide both confidentiality and data authenticity, eliminating the need to use MessageVerifier to check if the encrypted data has been tampered with. Signed-off-by: Jeremy Daer <jeremydaer@gmail.com>
* Merge pull request #25823 from mechanicles/missing-memory-store-testsRafael França2016-07-201-0/+10
|\ | | | | Add missing tests for memory store of cache.
| * Add missing tests for memory store of cache.Santosh Wadghule2016-07-171-0/+10
| |
* | Merge pull request #25393 from gsamokovarov/introduce-assert-changesRafael França2016-07-201-0/+106
|\ \ | | | | | | Introduce `assert_changes` and `assert_no_changes`
| * | Introduce `assert_changes` and `assert_no_changes`Genadi Samokovarov2016-07-171-0/+106
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Those are assertions that I really do miss from the standard `ActiveSupport::TestCase`. Think of those as a more general version of `assert_difference` and `assert_no_difference` (those can be implemented by assert_changes, should this change be accepted). Why do we need those? They are useful when you want to check a side-effect of an operation. `assert_difference` do cover a really common case, but we `assert_changes` gives us more control. Having a global error flag? You can test it easily with `assert_changes`. In fact, you can be really specific about the initial state and the terminal one. ```ruby error = Error.new(:bad) assert_changes -> { Error.current }, from: nil, to: error do expected_bad_operation end ``` `assert_changes` follows `assert_difference` and a string can be given for evaluation as well. ```ruby error = Error.new(:bad) assert_changes 'Error.current', from: nil, to: error do expected_bad_operation end ``` Check out the test cases if you wanna see more examples. :beers:
* | | Merge pull request #25822 from ↵Rafael França2016-07-201-0/+12
|\ \ \ | | | | | | | | | | | | | | | | mechanicles/clear-local-cache-on-invalid-parameters-error Add missing test for clearing up local cache on invalid parameters error.
| * | | Add missing test for clearing up local cache on invalid parameters err.Santosh Wadghule2016-07-171-0/+12
| | |/ | |/| | | | | | | | | | Add missing test for clearing up local cache and check response should be present on invalid parameters error.
* | | Make sure the time method is unstubedRafael Mendonça França2016-07-171-29/+41
| |/ |/| | | | | | | | | The minitest stubs were conflicting with the time travel stubs so the travel_back method call in the teardown block was actually keeping the time stubbed.
* | Added :fallback_string option to Array#to_sentenceoss922016-07-131-1/+6
|/
* Remove old test that check duplicated items in the load pathRafael Mendonça França2016-07-131-16/+0
| | | | | | This test was added to protect the test suite from our mistakes but now it is failing because bundler does add duplicated libs in the load path by design (if the repository has more than one gem)
* Raise ArgumentError for bad strptime argumentsJohn Gesimondo2016-07-111-0/+7
|
* AS::Duration should serialize empty values correctly. (#25656)Paul Sadauskas2016-07-111-0/+1
| | | | | | | | | | | | | The current implementation serializes zero-length durations incorrectly (it serializes as `"-P"`), and cannot un-serialize itself: ``` [1] pry(main)> ActiveSupport::Duration.parse(0.minutes.iso8601) ActiveSupport::Duration::ISO8601Parser::ParsingError: Invalid ISO 8601 duration: "-P" is empty duration from /Users/rando/.gem/ruby/2.3.1/gems/activesupport-5.0.0/lib/active_support/duration/iso8601_parser.rb:96:in `raise_parsing_error' ``` Postgres empty intervals are serialized as `"PT0S"`, which is also parseable by the Duration deserializer, so I've modified the `ISO8601Serializer` to do the same. Additionally, the `#normalize` function returned a negative sign if `parts` was blank (all zero). Even though this fix does not rely on the sign, I've gone ahead and corrected that, too, in case a future refactoring of `#serialize` uses it.
* Merge pull request #25736 from voxik/file-store-test-require-pathnameRafael França2016-07-071-0/+2
|\ | | | | Pathname might not be always initialized.
| * Pathname might not be always initialized.Vít Ondruch2016-07-071-0/+2
| | | | | | | | Require 'pathname' explicitly
* | Merge pull request #24890 from vipulnsward/travel-to-raiseKasper Timm Hansen2016-07-051-0/+43
|\ \ | | | | | | `travel/travel_to` travel time helpers, now raise on nested calls
| * | `travel/travel_to` travel time helpers, now raise on nested calls,Vipul A M2016-07-021-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | as this can lead to confusing time stubbing. Instead of: travel_to 2.days.from_now do # 2 days from today travel_to 3.days.from_now do # 5 days from today end end preferred way to achieve above is: travel_to 2.days.from_now # 2 days from today travel_back travel_to 5.days.from_now # 5 days from today Closes #24690 Fixes #24689
* | | Merge pull request #25678 from voxik/DRY-downloaderRafael França2016-07-044-65/+36
|\ \ \ | | | | | | | | Dry downloader
| * | | Skip the test if test data download fails.Vít Ondruch2016-07-044-12/+16
| | | |
| * | | DRY Downloader.Vít Ondruch2016-07-044-53/+20
| | |/ | |/|
* / | Pathname might not be always initialized.Vít Ondruch2016-07-041-0/+2
|/ / | | | | | | Require 'pathname' explicitly
* / Do not depend on Rails git repository layout in ActiveSupport tests.Vít Ondruch2016-07-011-2/+2
|/
* Partially revert #25192Matthew Draper2016-07-011-1/+16
| | | | | | KeyGenerator is used in other contexts, and we cannot change its output... even if it does accidentally default to generating excess key material for our primary internal usage.
* We default to using aes-256-cbc as our verification/signing cipher. It can ↵Vipul A M2016-06-272-3/+3
| | | | | | | | | | accept key lengths of 128, 192 or 256-bit, whereas currently we were providing twice the acceptable value. ruby < 2.4 allowed accepting these values, as extra key bits were ignored. Since https://github.com/ruby/ruby/commit/ce635262f53b760284d56bb1027baebaaec175d1 this now has a strict checking on key length. Default to key length 32 bytes, to match the compatible length for aes-256-cbc Fixes #25185
* Define `Pathname#as_json`Ryunosuke Sato2016-06-251-0/+2
| | | | | | | | | | | | | | | | | When the Pathname object is converted as JSON, it should be a string that means itself. Expected: ``` >> Pathname.new('/path/to/somewhere.txt').as_json "/path/to/somewhere.txt" ``` Actual: ``` >> Pathname.new('/path/to/somewhere.txt').as_json {"path"=>"/path/to/somewhere.txt"} ```
* Define `URI::Generic#as_json`Ryunosuke Sato2016-06-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the URI object is converted as JSON, it is expected that it is a string that means its URI. Expected: ``` >> URI.parse('http://example.com').as_json "http://example.com" ``` Actual: ``` >> URI.parse('http://example.com').as_json {"scheme"=>"http", "user"=>nil, "password"=>nil, "host"=>"example.com", "port"=>80, "path"=>"", "query"=>nil, "opaque"=>nil, "fragment"=>nil, "parser"=> {"regexp"=> {"SCHEME"=>"(?-mix:\\A[A-Za-z][A-Za-z0-9+\\-.]*\\z)", "USERINFO"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=A-Z_a-z~])*\\z)", "HOST"=> "(?-mix:\\A(?:(?<IP-literal>\\[(?:(?<IPv6address>(?:\\h{1,4}:){6}(?<ls32>\\h{1,4}:\\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]|\\d)\\.\\g<dec-octet>\\.\\g<dec-octet>\\.\\g<dec-octet>))|::(?:\\h{1,4}:){5}\\g<ls32>|\\h{,4}::(?:\\h{1,4}:){4}\\g<ls32>|(?:(?:\\h{1,4}:)?\\h{1,4})?::(?:\\h{1,4}:){3}\\g<ls32>|(?:(?:\\h{1,4}:){,2}\\h{1,4})?::(?:\\h{1,4}:){2}\\g<ls32>|(?:(?:\\h{1,4}:){,3}\\h{1,4})?::\\h{1,4}:\\g<ls32>|(?:(?:\\h{1,4}:){,4}\\h{1,4})?::\\g<ls32>|(?:(?:\\h{1,4}:){,5}\\h{1,4})?::\\h{1,4}|(?:(?:\\h{1,4}:){,6}\\h{1,4})?::)|(?<IPvFuture>v\\h+\\.[!$&-.0-;=A-Z_a-z~]+))\\])|\\g<IPv4address>|(?<reg-name>(?:%\\h\\h|[!$&-.0-9;=A-Z_a-z~])*))\\z)", "ABS_PATH"=> "(?-mix:\\A\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*(?:\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*)*\\z)", "REL_PATH"=> "(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])+(?:\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*)*\\z)", "QUERY"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~\\/?])*\\z)", "FRAGMENT"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~\\/?])*\\z)", "OPAQUE"=>"(?-mix:\\A(?:[^\\/].*)?\\z)", "PORT"=> "(?-mix:\\A[\\x09\\x0a\\x0c\\x0d ]*\\d*[\\x09\\x0a\\x0c\\x0d ]*\\z)"}}} ```
* Merge pull request #23011 from arnvald/bugfix/correctly_parse_dateGodfrey Chan2016-06-251-5/+11
|\ | | | | | | Use correct timezone when parsing date in json
| * Use correct timezone when parsing date in jsonGrzegorz Witek2016-01-221-5/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | Fixes https://github.com/rails/rails/issues/22171 Time specified in ISO 8601 format without `Z` should be considered as local time, yet until now it was treated as UTC. This commit fixes problem by parsing time using timezone specified in application config. The downside of this solution is performance hit (`Time.zone.parse` is ~ 1.6x slower than `Time.parse`), so maybe there's a better solution.
* | Merge pull request #25302 from ↵Sean Griffin2016-06-171-1/+43
|\ \ | | | | | | | | | | | | schneems/schneems/evented-file-boot-at-check-time-master EventedFileUpdateChecker boots once per process
| * | Test how evented file checker handles forksschneems2016-06-081-1/+42
| | | | | | | | | | | | | | | | | | | | | Pretty proud of this. We are testing distributed processes synchronized via pipes which makes it deterministic. Pretty cool. We boot a listener in the parent process we then fork. Before we touch the file we verify the fork is booted using pipes. Then the parent process will touch the file while the fork waits on a pipe. Once the parent process signals that the file has been touched we continue inside of the fork.
| * | EventedFileUpdateChecker boots once per processschneems2016-06-061-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need one file checker booted per process as talked about in #24990. Before we do a check to see if any updates have been registered by the listener we first check to make sure that the current process has booted a listener. We are intentionally not starting a listener when the checker is created. This way we can avoid #25259 in which puma warns of multiple threads created before fork. As written the listener for each process will be invoked by the `ActionDispatch::Executor` middleware when the `updated?` method is called. This is the first middleware on the stack and will be invoked before application code is read into memory. The downside of this approach is that the API is a little less obvious. I.e. that you have to call `updated?` to get the listener to start is not intuitive. We could make `boot!` not private if we want to make the API a little nicer. Alternatively we could boot when the checker is initialized however this reintroduces the puma threads warning, and also means that in cases of `rails server` or when using `preload!` that we have extra threads notifying of changes on a process that we don't care about. [close #24990] [close #25259]
* | | Fix missing requires for object/blankRafael Mendonça França2016-06-131-1/+1
| | |
* | | Make sure the yielded variable is the loggerRafael Mendonça França2016-06-101-2/+4
| | |
* | | Be explicit about what Logger class is expectedKevin McPhillips2016-06-091-3/+3
| | |
* | | Broadcast #silence on logger. Rewrite tests.Kevin McPhillips2016-06-091-31/+103
| | |
* | | existant => existentAbhishek Jain2016-06-091-1/+1
| | |
* | | Improve Hash#compact! documentation and testsIgor Pstyga2016-06-031-0/+8
|/ / | | | | | | | | | | | | Make it clear what should be returned when no changes were made to the hash. { c: true }.compact! # => nil
* | Don't blank pad day of the month when formatting datesSean Griffin2016-06-021-0/+11
| | | | | | | | | | | | | | | | | | | | | | We are currently using `%e` which adds a space before the result if the digit is a single number. This leads to strings like `February 2, 2016` which is undesireable. I've opted to replace with 0 padding instead of removing the padding entirely, to preserve compatibility for those relying on the fact that the width is constant, and to be consistent with time formatting. Fixes #25251.
* | Add test for `delegate_missing_to` where method doesn't existJon Moss2016-05-261-0/+8
| |
* | Add tests for keyword arg to: for Module#delegateYosuke Kabuto2016-05-251-0/+15
| |
* | Don't delegate to private methods of the targerRafael Mendonça França2016-05-241-0/+14
| | | | | | | | And make sure that it doesn't even try to call the method in the target.
* | Merge pull request #23930 from gsamokovarov/module-delegate-missing-toRafael Mendonça França2016-05-241-0/+22
|\ \ | | | | | | | | | Introduce Module#delegate_missing_to
| * | Introduce Module#delegate_missing_toGenadi Samokovarov2016-02-271-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building decorators, a common pattern may emerge: class Partition def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end private def respond_to_missing?(name, include_private = false) @events.respond_to?(name, include_private) end def method_missing(method, *args, &block) @events.send(method, *args, &block) end end With `Module#delegate_missing_to`, the above is condensed to: class Partition delegate_missing_to :@events def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end end David suggested it in #23824.
* | | Revert "Add default exceptions affected by suppress (#25099)"Rafael Mendonça França2016-05-231-9/+0
| | | | | | | | | | | | | | | | | | | | | This reverts commit 28492204ee59a5aca2f3bc7b161d45724552686d. Reason: `suppress` without an argument doesn't actually tell what is supressing. Also, it can be confused with ActiveRecord::Base#suppress.
* | | Add default exceptions affected by suppress (#25099)Alexey Zapparov2016-05-231-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add default exceptions affected by suppress suppress { do_something_that_might_fail } # instead of begin do_something_that_might_fail rescue end # or do_something_that_might_fail rescue nil * Do not add default exceptions list constant [Rafael Mendonça França + Alexey Zapparov]