aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #23138 from rails/custom-url-helpers-and-polymorphic-urlsAndrew White2017-02-218-16/+787
|\ | | | | Implement custom url helpers and polymorphic mapping
| * Fix schema leakage from dirty_test.rbAndrew White2017-02-211-0/+1
| | | | | | | | | | The column information for the testings table was being cached so clear the cache in the test teardown.
| * Split direct method into twoAndrew White2017-02-215-113/+159
| | | | | | | | | | Use a separate method called `resolve` for the custom polymorphic mapping to clarify the API.
| * Push option extract into call methodAndrew White2017-02-212-8/+7
| |
| * Fix typo in exception messageAndrew White2017-02-211-1/+1
| |
| * Removed `model_name` method to prevent warningAndrew White2017-02-211-0/+1
| |
| * Prefer remove_method over undef_methodAndrew White2017-02-213-4/+69
| | | | | | | | | | | | Using `undef_method` means that when a route is removed any other implementations of that method in the ancestor chain are inaccessible so instead use `remove_method` which restores access to the ancestor.
| * Support mapping of non-model classesAndrew White2017-02-212-3/+33
| |
| * Raise an error if `direct` is inside a scope blockAndrew White2017-02-212-3/+26
| |
| * Add CHANGELOG entry for `direct` methodAndrew White2017-02-211-0/+39
| |
| * Add custom polymorphic mappingAndrew White2017-02-216-65/+314
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow the use of `direct` to specify custom mappings for polymorphic_url, e.g: resource :basket direct(class: "Basket") { [:basket] } This will then generate the following: >> link_to "Basket", @basket => <a href="/basket">Basket</a> More importantly it will generate the correct url when used with `form_for`. Fixes #1769.
| * Add test for calling a url helper in Mapper#directAndrew White2017-02-211-0/+7
| |
| * Don't allocate a hash unnecessarilyAndrew White2017-02-212-2/+6
| |
| * Only accept symbols and strings for Mapper#directAndrew White2017-02-212-1/+23
| |
| * Rename url_helper to directAndrew White2017-02-213-23/+23
| |
| * Add support for defining custom url helpers in routes.rbAndrew White2017-02-214-2/+270
| | | | | | | | | | | | | | | | | | | | | | Allow the definition of custom url helpers that will be available automatically wherever standard url helpers are available. The current solution is to create helper methods in ApplicationHelper or some other helper module and this isn't a great solution since the url helper module can be called directly or included in another class which doesn't include the normal helper modules. Reference #22512.
| * Wrap routes.url_helpers.url_for via a proxyAndrew White2017-02-211-4/+21
| | | | | | | | | | | | | | | | | | | | | | | | The singleton url_for on Rails.application.routes.url_helpers isn't the same as the url_for you get when you include the module in your class as the latter has support for polymorphic style routes, etc. whereas the former accepts only a hash and is the underlying implementation defined on ActionDispatch::Routing::RouteSet. This commit changes the singleton method to call through a proxy instance so that it gets the full range of features specified in the documentation for url_for.
* | Add backticks around method namesJon Moss2017-02-211-1/+1
| | | | | | | | [ci skip]
* | Remove extra spacesJon Moss2017-02-211-1/+1
| | | | | | | | [ci skip]
* | Add backticks around commandJon Moss2017-02-211-1/+1
| | | | | | | | [ci skip]
* | Use released arelRafael Mendonça França2017-02-218-16/+2
| |
* | Add backticks around constantJon Moss2017-02-211-1/+1
| | | | | | | | [ci skip]
* | Revert back to the original of using package.json in the root of the project ↵David Heinemeier Hansson2017-02-217-13/+13
| | | | | | | | (#28093)
* | Only load SystemTestCase if Capybara is definedeileencodes2017-02-211-5/+10
|/ | | | | | | | For applications that are upgrading or applications that are choosing to skip system testing Capbyara will not be available. SystemTestCase and friends shoud only be loaded if Capbyara is defined. Fixes #28094
* Tiny documentation edits [ci skip]Robin Dupret2017-02-212-17/+12
|
* Merge pull request #28092 from ↵Guillermo Iguaran2017-02-212-1/+8
|\ | | | | | | | | sikachu/fix-define_attribute_method-with-symbol-in-ar Fix `define_attribute_method` with Symbol in AR
| * Fix `define_attribute_method` with Symbol in ARPrem Sichanugrist2017-02-212-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This issue is only appear when you try to call `define_attribute_method` and passing a symbol in Active Record. It does not appear in isolation in Active Model itself. Before this patch, when you run `User.define_attribute_method :foo`, you will get: NoMethodError: undefined method `unpack' for :foo:Symbol from activerecord/lib/active_record/attribute_methods/read.rb:28:in `define_method_attribute' from activerecord/lib/active_record/attribute_methods/primary_key.rb:61:in `define_method_attribute' from activemodel/lib/active_model/attribute_methods.rb:292:in `block in define_attribute_method' from activemodel/lib/active_model/attribute_methods.rb:285:in `each' from activemodel/lib/active_model/attribute_methods.rb:285:in `define_attribute_method' This patch contains both a fix in Active Model and a test in Active Record for this error.
* | Merge pull request #28088 from y-yagi/do_not_generate_templates_to_api_docGuillermo Iguaran2017-02-211-1/+1
|\ \ | |/ |/| Do not display template files on API doc [ci skip]
| * Do not display template files on API doc [ci skip]yuuji.yaginuma2017-02-211-1/+1
| |
* | Fix run_via[]= backwards compatibility.Kasper Timm Hansen2017-02-212-1/+13
| | | | | | | | | | | | | | | | | | ``` Minitest.run_via[:rails] = true ``` 👆 would break because a simple alias won't catch the second true argument there.
* | Merge pull request #28055 from robertomiranda/patch-3Guillermo Iguaran2017-02-212-2/+2
|\ \ | | | | | | Use Puma 3.7
| * | Use Puma 3.7.xRoberto Miranda2017-02-202-2/+2
| | | | | | | | | | | | ref this commit seems that has not been merged into 3.7 https://github.com/puma/puma/commit/42bec4600c51ab8a1c1ee5a0e1b738a4ffd82bf2
* | | Merge pull request #28089 from kenta-s/improve-testing-docsVipul A M2017-02-212-4/+4
|\ \ \ | | | | | | | | Fix some grammar in docs [ci skip]
| * | | Fix some grammar in docs [ci skip]kenta-s2017-02-212-4/+4
|/ / /
* | | Merge pull request #28081 from meinac/fix_redirect_methodGuillermo Iguaran2017-02-212-3/+3
|\ \ \ | |_|/ |/| | Use `response#location` instead of `#location` in redirect.
| * | Use `response#location` instead of `#location` in redirect.Mehmet Emin INAC2017-02-202-3/+3
| | | | | | | | | | | | Closes #28033
* | | Merge pull request #28083 from eileencodes/ensure-test-threads-shared-db-connMatthew Draper2017-02-218-32/+80
|\ \ \ | | | | | | | | Ensure test threads share a DB connection
| * | | Ensure test threads share a DB connectioneileencodes2017-02-208-32/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This ensures multiple threads inside a transactional test to see consistent database state. When a system test starts Puma spins up one thread and Capybara spins up another thread. Because of this when tests are run the database cannot see what was inserted into the database on teardown. This is because there are two threads using two different connections. This change uses the statement cache to lock the threads to using a single connection ID instead of each not being able to see each other. This code only runs in the fixture setup and teardown so it does not affect real production databases. When a transaction is opened we set `lock_thread` to `Thread.current` so we can keep track of which connection the thread is using. When we rollback the transaction we unlock the thread and then there will be no left-over data in the database because the transaction will roll back the correct connections. [ Eileen M. Uchitelle, Matthew Draper ]
* | | | Add missing spaceJon Moss2017-02-201-1/+1
| | | | | | | | | | | | | | | | [ci skip]
* | | | Add changelog for system testseileencodes2017-02-201-0/+8
| | | |
* | | | Merge pull request #26703 from eileencodes/rails_system_testsEileen M. Uchitelle2017-02-2035-5/+686
|\ \ \ \ | | | | | | | | | | WIP: Capybara Integration with Rails (AKA System Tests)
| * | | | Clean up documentationeileencodes2017-02-202-16/+17
| | | | | | | | | | | | | | | | | | | | | | | | | There were some grammar issues and incorrect information in the system tests documentation.
| * | | | Rename system_test_helper -> application_system_test_caseeileencodes2017-02-209-38/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This renames the system test helper file to be application system test case to match what the rest of Rails does. In the future we should consider changing the test_helper to match.
| * | | | Fix default host in setup, move teardown to helper fileeileencodes2017-02-207-16/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Override integration test default host Integration tests automatically set the default host to 'http://example.com'. This works fine for integration tests because they are not real browser sessions, but doesn't work fine for system tests because they are real browser sessions. We can override this by setting the `host!` in `before_setup. The `Capybara.always_include_port` will allow the test to look at `127.0.0.1:port capybara picks` and properly redirect the test. Any application can override this by setting the `host!` in their system test helper. Generally though, applications are going to be using localhost. In this commit I also moved the setup and teardown into their own module for tidiness. * Move teardown settings into system test case These configuration options can be put into the system test case file instead of the generated system tests helper file. This is an implementation detail and therefore shouldn't be generated with the template.
| * | | | Fix screenshot helper to provide correct file nameeileencodes2017-02-202-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | We only want the file name to include the word `failures` if it failed, not any time the user wants to take a screenshot during a test run.
| * | | | Add default configuration to generated system test helpereileencodes2017-02-203-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | This serves as self documentation so users know how to change the driver.
| * | | | Move and rename system testseileencodes2017-02-2037-519/+298
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Move system tests back into Action Pack * Rename `ActionSystemTest` to `ActionDispatch::SystemTestCase` * Remove private base module and only make file for public `SystemTestCase` class, name private module `SystemTesting` * Rename `ActionSystemTestCase` to `ApplicationSystemTestCase` * Update corresponding documentation and guides * Delete old `ActionSystemTest` files
| * | | | Rename server and remove optional port settingeileencodes2017-02-205-46/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've renamed the server to `rails_puma` so that it doesn't override Capybara's default puma server. I've also removed the hard port setting. Users can simply use `Capybara.server_port` writer to set the port if they require that.
| * | | | Update documentation and guideseileencodes2017-02-205-201/+193
| | | | | | | | | | | | | | | | | | | | | | | | | Update the documentation after rewriting a majority of the functionality for system testing.
| * | | | Rewrite API for ActionSystemTesteileencodes2017-02-2020-486/+171
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a major rewrite of what existed previously. After discussing this feature with DHH I realized that I was looking at the setup all wrong. I had originally mentally broken it into "what Rails wants" and "what Capybara already has". What happened after looking at it from DHH's angle was that I saw there was no reason to group settings by Driver but instead the following groups: - There will always be a `Driver` - This can selenium, poltergeist, or capybara webkit. Capybara already provides all of these and there's no reason to break them into a category of Rails' usese Selenium like this and Capybara uses it like that. - Only Selenium drivers care about `Browser` - Because of this it was weird to set it only in the Rails end. - Therefore only `Browser`, and not `Driver` cares about `screen_size`. - Puma is the default `Server` in Rails - Therefore there's no reason to explictly support Webkit Once I looked at it from this angle I was able to abstract all the settings away from grouping the drivers with their options. Now all the driver, server, and browser settings are abstracted away and not part of the public facing API. This means there's no requirement to initialize new classes to change the default settings and the public options API is much smaller. All of Rails preferred defaults are still there (selenium with port 21800 using the chrome browser with a screen size of 1400x1400) but changing these no longer requires initializing a new class or understanding which driver you're using underneath (rails defaults or capybaras defaults respectively). Rails opinions are now simple defaults instead of doing a them versus us setup with Drivers and explicit options. Changing the defaults is simple. Call `driven_by` with different settings to change the defaults which will on their own initialize new classes and change the default settings. Use poltergeist with port 3000 for Puma ``` driven_by :poltergeist, on: 3000 ``` Use selenium with the Chrome browser and a screen size of 800x800 ``` driven_by :selenium, using: :firefox, screen_size: [ 800, 800 ] ``` The entire setup of how browser and drivers interact with each other are abstracted away and the only required argument is the driver name.