aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/application
Commit message (Collapse)AuthorAgeFilesLines
* make sure `rake test` respects TESTOPTSAaron Patterson2016-02-221-0/+13
| | | | | We should be able to pass options to minitest via TESTOPTS environment variable
* Make collection caching explicit.Kasper Timm Hansen2016-02-201-0/+2
| | | | | | | | | | | | Having collection caching that wraps templates and automatically tries to infer if they are cachable proved to be too much of a hassle. We'd rather have it be something you explicitly turn on. This removes much of the code and docs to explain the previous automatic behavior. This change also removes scoped cache keys and passing cache_options.
* move digest cache on to the DetailsKey objectAaron Patterson2016-02-181-2/+3
| | | | | | | | | | | | | This moves digest calculation cache on to the details key object. Before, the digest cache was a class level ivar, and one of the keys was the hash value of the details key object: https://github.com/rails/rails/blob/13c4cc3b5aea02716b7459c0da641438077f5236/actionview/lib/action_view/digestor.rb#L28 An object's hash value is not unique, so it's possible for this cache key to produce colliding keys with no resolution. This commit move cache on to the details key object itself, so we know that the digests are always unique per details key object.
* Implement ActionController::Parameters#inspectBenjamin Quorning2016-02-171-1/+1
| | | | Now that AC::Parameters is no longer a Hash, it shouldn't look like a hash.
* Merge pull request #23630 from akshaymohite/correct-test-name-api-onlyYves Senn2016-02-161-1/+1
|\ | | | | Correct config option from only_api to api_only in test
| * Correct config option from only_api to api_only in testAkshay2016-02-121-1/+1
| |
* | reset `ActionMailer::Base.deliveries` in `ActionDispatch::IntegrationTest`.Yves Senn2016-02-161-0/+46
| | | | | | | | | | | | | | | | | | Whenever you are sending emails in integration tests using the `:test` delivery method you need to make sure that `ActionMailer::Base.deliveries` is reset after every test. This piece of boilerplate code is present in all my applications that send emails. Let's have `ActionDispatch::IntegrationTest` reset the deliveries automatically.
* | Merge pull request #23631 from y-yagi/generate_mailer_views_in_apiYves Senn2016-02-151-0/+10
|\ \ | | | | | | generate mailer views in Rails API
| * | generate mailer views in Rails APIyuuji.yaginuma2016-02-151-0/+10
| |/ | | | | | | | | View files is necessary to send mail, it should be generated even Rails API. Fixes #23617
* | test runner, relay minitest information about the error location.Yves Senn2016-02-151-1/+1
| | | | | | | | | | This is a follow-up to ea70c29 to bring back the assertion error location information provided by minitest.
* | Revert "Prefer Minitest's location for test failures."Yves Senn2016-02-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 0db310586ac3e15be95d2ef27ff40cfa24c05c10. Closes #23686. Conflicts: railties/test/application/test_runner_test.rb It's possible that the `result.location` returned by minitest is outside the test file itself. For example in the case of mocha. This resulted in bad rerun snipptets: ``` bin/rails test app/models/deliveries/delivery.rb:103 ``` Let's always use the first line of the failed test-case in our rerun snippet. We can display the line number of the assertion error elsewhere.
* | Merge pull request #23611 from abhishekjain16/routes_optionsKasper Timm Hansen2016-02-121-1/+9
|\ \ | |/ |/| Fix routes to match verb and URL path with -g option also.
| * Fixes routes to match verbs and path with -g optionAbhishek Jain2016-02-111-1/+9
| |
* | Merge pull request #23512 from y-yagi/set_association_name_to_fixtureDavid Heinemeier Hansson2016-02-101-5/+4
|\ \ | |/ |/| set association name to generated fixtures if attribute is reference
| * set association name to generated fixtures if attribute is referenceyuuji.yaginuma2016-02-061-5/+4
| | | | | | | | | | | | | | It has been changed to require `belongs_to` by default in Rails 5. Therefore in order to pass the controller test, have association of set to fixtures. Fixes #23384
* | revert dev:cache to rake task, fixes #23410Scott Bronson2016-02-071-0/+34
|/
* Fix mixing line filters with Minitest's -n filter.Kasper Timm Hansen2016-02-051-0/+24
| | | | | | | | | | | Previous commit accidentally broke mixing line filters with string -n filter. Fix by checking if it is a string and returning it. We also need to ensure the -n filter carry forward into any other composite filters. Fix by letting the named filter be extractable, so we'll keep this for the next runnable's run.
* Fix model test path typo uncovered in previous commit.Kasper Timm Hansen2016-02-031-1/+1
| | | | | | | | | | | | Because of the expanding whitelist for test filters, this test ended up running the tests on lines 4 and 9 in the post test even though the path wasn't right. Happened incidentally because the same line numbers were used in both account and post test. Add the .rb line so the file is required correctly and the filters are applied.
* Fix line filters running tests from multiple runnables.Kasper Timm Hansen2016-02-031-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | `derive_regexp` was written with the assumption that we were run from a blank slate — that if the filter didn't match we might as well return it because it was nil. This isn't the case because minitest calls `run` on every runnable. Which is any subclass of Minitest::Runnable, such as ActiveSupport::TestCase, ActionDispatch::IntegrationTest as well as any inheriting from those. Thus after the first `run` we'd have put in a composite filter in `options[:filter]` making the next `run` create a linked list when it failed to match the regexp and put the composite filter as the head. Every runnable would accumulate more and more of the same filters, which effectively acted like an expanding whitelist and we ran tests from other runnables. Clog the accumulation by returning nil if there's no filter to derive a regexp from. Note: we pass a seed in the tests because Minitest shuffles the runnables to ensure the whitelist is expanded enough that the failure is triggered.
* use rails command in routes taskyuuji.yaginuma2016-02-031-7/+7
| | | | | For other task has become to use the rails command at doc and test, I think that routes task also it is better to use the rails command.
* Merge pull request #23225 from vipulnsward/20420-rake-routes-optionsKasper Timm Hansen2016-02-011-2/+61
|\ | | | | Add options for rake routes task
| * Add options for rake routes taskVipul A M2016-02-021-2/+61
| | | | | | | | | | | | | | | | | | | | Add two options: `-c` and `-g`. `-g` option returns the urls name, verb and path fields that match the pattern. `-c` option returns the urls for specific controller. Fixes #18902, and Fixes #20420 [Anton Davydov & Vipul A M]
* | Shorten ActiveRecord::InternalMetadata.table_name to ar_internal_metadataYasuo Honda2016-02-012-3/+3
|/ | | | to support Oracle database which only supports 30 byte identifier length
* Introduce new welcome page for new projectsGenadi Samokovarov2016-01-261-2/+1
| | | | As requested by David in 23233.
* Be consistent in testing outputs from railties test and use /bin/rails ↵Vipul A M2016-01-249-95/+96
| | | | | | everywhere(the default behaviour now) instead of mix of /bin/rake /bin/rails everywhere [Ryo Hashimoto & Vipul A M]
* Don't run all tests when files end in a colon.Kasper Timm Hansen2016-01-181-8/+0
| | | | | | | | | | | | | | If running `bin/rails t test/models/bunny_test.rb:` we'd implicitly run all the tests in the bunny test. I now highly doubt that people would ever put in a line filter without a line *and* want that to mean run all tests in that file. Instead, change regex to require a line digit after the colon, so runs without a line at the end would fail to require the test file. This also has the side benefit of breaking requiring a file with many colons: `bin/rails t test/models/bunny_test.rb:::::::::::::4` Think this means I've had enough colonoscopy to last me through the year :)
* bring back `TEST` env for `rake test`.Yves Senn2016-01-121-0/+11
| | | | | | | Closes #23027. This does not restore complete backwards compatibility. It simply passes the contets of the `TEST` env to the new runner.
* remove warnings from rake testyuuji.yaginuma2016-01-111-2/+2
| | | | | | | | | This removes the following warnings. ``` test/application/rake_test.rb:33: warning: ambiguous first argument; put parentheses or a space even after `/' operator test/application/rake_test.rb:43: warning: ambiguous first argument; put parentheses or a space even after `/' operator ```
* Added multiple line filters support for test runnerSiva Gollapalli2016-01-101-0/+78
|
* rake log:clear task updated refs[#22544]Pramod2016-01-091-3/+3
| | | | | | | | - Avoided truncating all files if no ENV['LOGS'] specified - Updated task to accept LOGS=all for truncating all files from log/ i.e. log/*log - If no LOGS specified will truncates standard environment log files i.e. 'development,test,production' - CHANGELOG & guide update added - bin/setup test cases fixed
* Merge pull request #22967 from schneems/schneems/generic-metadataSean Griffin2016-01-084-7/+27
|\ | | | | Prevent destructive action on production database
| * Fixing tests and re-locating error checking.schneems2016-01-082-3/+3
| |
| * Prevent destructive action on production databaseschneems2016-01-074-7/+27
| | | | | | | | | | | | | | This PR introduces a key/value type store to Active Record that can be used for storing internal values. It is an alternative implementation to #21237 cc @sgrif @matthewd. It is possible to run your tests against your production database by accident right now. While infrequently, but as an anecdotal data point, Heroku receives a non-trivial number of requests for a database restore due to this happening. In these cases the loss can be large. To prevent against running tests against production we can store the "environment" version that was used when migrating the database in a new internal table. Before executing tests we can see if the database is a listed in `protected_environments` and abort. There is a manual escape valve to force this check from happening with environment variable `DISABLE_DATABASE_ENVIRONMENT_CHECK=1`.
* | Default new apps to tag logs with `request_id`schneems2016-01-061-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In high volume applications it can be very difficult to figure out what is happening in logs because each request is not easily identified. For example 3 requests could look something like this: ``` Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 Rendered welcome/index.html.erb within layouts/application (0.1ms) Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:22 +0000 Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:23 +0000 Rendered welcome/index.html.erb within layouts/application (0.1ms) Processing by WelcomeController#index as HTML Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) Processing by WelcomeController#index as HTML Rendered welcome/index.html.erb within layouts/application (0.1ms) Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) Processing by WelcomeController#index as HTML Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` The `:request_id` log tag ensures that each request is tagged with a unique identifier. While they are still interleaved it is possible to figure out which lines belong to which requests. Like: ``` [c6034478-4026-4ded-9e3c-088c76d056f1] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 [c6034478-4026-4ded-9e3c-088c76d056f1] Rendered welcome/index.html.erb within layouts/application (0.1ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:22 +0000 [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:23 +0000 [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Rendered welcome/index.html.erb within layouts/application (0.1ms) [c6034478-4026-4ded-9e3c-088c76d056f1] Processing by WelcomeController#index as HTML [c6034478-4026-4ded-9e3c-088c76d056f1] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Processing by WelcomeController#index as HTML [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Rendered welcome/index.html.erb within layouts/application (0.1ms) [abuqw781-5026-6ded-7e2v-788c7md0L6fQ] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Processing by WelcomeController#index as HTML [acfab2a7-f1b7-4e15-8bf6-cdaa008d102c] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` Now if you have the logs and you find this unique ID you can filter to only look at information from that request. So a filtered log output would be very clear: ``` [c6034478-4026-4ded-9e3c-088c76d056f1] Started GET "/" for 72.48.77.213 at 2016-01-06 20:30:21 +0000 [c6034478-4026-4ded-9e3c-088c76d056f1] Rendered welcome/index.html.erb within layouts/application (0.1ms) [c6034478-4026-4ded-9e3c-088c76d056f1] Processing by WelcomeController#index as HTML [c6034478-4026-4ded-9e3c-088c76d056f1] Completed 200 OK in 5ms (Views: 3.8ms | ActiveRecord: 0.0ms) ``` In addition to this benefit the `:request_id` can be set via the `X-Request-ID` header so that the same request could be traced between multiple components. For example a request comes in Nginx (or another load balancer) could assign a request id. As the load balancer processes the request I can log using that id, then when the request is passed on to Rails, the same id is used. That way if a problem is determined to be not caused in Rails it could be traced back to other components with the same ID. You can set a value in nginx for example using something like this: ``` location / { proxy_pass http://upstream; proxy_set_header X-Request-Id $pid-$msec-$remote_addr-$request_length; } # http://stackoverflow.com/questions/17748735/setting-a-trace-id-in-nginx-load-balancer ``` Heroku sets this header value so problems like timeouts that are logged by like router can be traced back to specific request within the application. Whether you are using components that are setting request ID or not, all production applications can benefit from the additional debugging information of having a unique identifier for all requests. This change will only affect new applications, anyone can opt out by commenting or removing the line in `config/production.rb`.
* | Merge pull request #22939 from ↵Rafael França2016-01-061-0/+9
|\ \ | | | | | | | | | | | | y-yagi/make_generated_controller_test_file_work_correctly make generated controller test work correctly
| * | make generated controller test work correctlyyuuji.yaginuma2016-01-061-0/+9
| | | | | | | | | | | | | | | | | | | | | Since the `#file_name` that not consideration for the namespace, if generate a controller with a namespace, not the correct url helper generation, it had become an error to run the test. Modified to generate the correct url helper, even if it is produced a namespace with controller.
* | | Merge pull request #22275 from mastahyeti/per-form-csrfRafael França2016-01-061-1/+1
|\ \ \ | | | | | | | | Per-form CSRF tokens
| * | | add option for per-form CSRF tokensBen Toews2016-01-041-1/+1
| |/ /
* / / Provide a better error message if a user mistypes the name of script with runnerStephen Blackstone2016-01-051-0/+10
|/ / | | | | | | Add tests for detecting bad options for runner
* | Flexible configuration for ActionDispatch::SSLTim Rogers2015-12-291-1/+8
| |
* | display detailed information in inline reportingyuuji.yaginuma2015-12-211-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The errors message only was not displayed, as if it did not use the inline reporting, modified to also information the method name and the like in error are displayed. ``` # before Failed assertion, no message given. bin/rails test test/models/user_test.rb:5 ``` ``` # after Failure: UserTest#test_the_truth: Failed assertion, no message given. bin/rails test test/models/user_test.rb:5 ```
* | ApplicationMailer should be generated by default just like every other ↵David Heinemeier Hansson2015-12-172-1/+2
| | | | | | | | Application* parent
* | Fix warningRafael Mendonça França2015-12-171-1/+1
| |
* | Fix test now that cable is in there by default tooDavid Heinemeier Hansson2015-12-161-1/+1
| |
* | Merge branch 'master' into merge-action-cableRafael Mendonça França2015-12-164-10/+12
|\ \
| * | Use sprockets 3 in the Rails 5 releaseRafael Mendonça França2015-12-162-6/+7
| | |
| * | Merge pull request #22567 from gsamokovarov/introduce-application-recordRafael França2015-12-162-1/+2
| |\ \ | | |/ | |/| Introduce ApplicationRecord, an Active Record layer supertype
| | * Introduce ApplicationRecord, an Active Record layer supertypeGenadi Samokovarov2015-12-162-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's pretty common for folks to monkey patch `ActiveRecord::Base` to work around an issue or introduce extra functionality. Instead of shoving even more stuff in `ActiveRecord::Base`, `ApplicationRecord` can hold all those custom work the apps may need. Now, we don't wanna encourage all of the application models to inherit from `ActiveRecord::Base`, but we can encourage all the models that do, to inherit from `ApplicationRecord`. Newly generated applications have `app/models/application_record.rb` present by default. The model generators are smart enough to recognize that newly generated models have to inherit from `ApplicationRecord`, but only if it's present.
| * | Run railties generated app tests in test enveileencodes2015-12-151-3/+3
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Running railties generated app tests in development env can cause unintended consequences. The environments are different and tests aren't meant to be run in development mode. The changes to the generator exposed this issue where the random test order in the generated apps could cause problems when those tests are run in development mode. Particularly we saw failures in `railties/test/application/rake_test.rb` generated apps that used the scaffold to create applications and then run the migration and immediately run the tests. The error we saw was `ActiveRecord::RecordNotFound: Couldn't find User with 'id'=980190962` and seemed to only occur if the destroy test ran first. I'm not entirely sure _why_ this causes that error to be thrown but I believe it is related to the environments being different.
* / Accept a Pathname in Application#config_forRafael Mendonça França2015-12-151-0/+15
|/ | | | That would make possible to use it with action cable configuration.