Skip to content

Commit

Permalink
Merge pull request #32143 from sambostock/bubble-up-session-assertions
Browse files Browse the repository at this point in the history
Delegate child session assertions to parent session
  • Loading branch information
rafaelfranca committed Dec 18, 2019
2 parents 2e84228 + affe3e2 commit c135b92
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 0 deletions.
13 changes: 13 additions & 0 deletions actionpack/CHANGELOG.md
@@ -1,3 +1,16 @@
* Include child session assertion count in ActionDispatch::IntegrationTest

`IntegrationTest#open_session` uses `dup` to create the new session, which
meant it had its own copy of `@assertions`. This prevented the assertions
from being correctly counted and reported.

Child sessions now have their `attr_accessor` overriden to delegate to the
root session.

Fixes #32142

*Sam Bostock*

* Add SameSite protection to every written cookie.

Enabling `SameSite` cookie protection is an addition to CSRF protection,
Expand Down
10 changes: 10 additions & 0 deletions actionpack/lib/action_dispatch/testing/integration.rb
Expand Up @@ -320,6 +320,7 @@ module Runner
APP_SESSIONS = {}

attr_reader :app
attr_accessor :root_session # :nodoc:

def initialize(*args, &blk)
super(*args, &blk)
Expand Down Expand Up @@ -387,10 +388,19 @@ def remove! # :nodoc:
def open_session
dup.tap do |session|
session.reset!
session.root_session = self.root_session || self
yield session if block_given?
end
end

def assertions # :nodoc:
root_session ? root_session.assertions : super
end

def assertions=(assertions) # :nodoc:
root_session ? root_session.assertions = assertions : super
end

# Copy the instance variables from the current session instance into the
# test instance.
def copy_session_variables! #:nodoc:
Expand Down
8 changes: 8 additions & 0 deletions actionpack/test/controller/integration_test.rb
Expand Up @@ -138,6 +138,14 @@ def test_opens_new_session
assert_not session1.equal?(session2)
end

def test_child_session_assertions_bubble_up_to_root
assertions_before = @test.assertions
@test.open_session.assert(true)
assertions_after = @test.assertions

assert_equal 1, assertions_after - assertions_before
end

# RSpec mixes Matchers (which has a #method_missing) into
# IntegrationTest's superclass. Make sure IntegrationTest does not
# try to delegate these methods to the session object.
Expand Down

0 comments on commit c135b92

Please sign in to comment.