require "cases/helper"
require "rack"
module ActiveRecord
module IdentityMap
class MiddlewareTest < ActiveRecord::TestCase
def setup
super
@enabled = IdentityMap.enabled
IdentityMap.enabled = false
end
def teardown
super
IdentityMap.enabled = @enabled
IdentityMap.clear
end
def test_delegates
called = false
mw = Middleware.new lambda { |env|
called = true
[200, {}, nil]
}
mw.call({})
assert called, 'middleware delegated'
end
def test_im_enabled_during_delegation
mw = Middleware.new lambda { |env|
assert IdentityMap.enabled?, 'identity map should be enabled'
[200, {}, nil]
}
mw.call({})
end
class Enum < Struct.new(:iter)
def each(&b)
iter.call(&b)
end
end
def test_im_enabled_during_body_each
mw = Middleware.new lambda { |env|
[200, {}, Enum.new(lambda { |&b|
assert IdentityMap.enabled?, 'identity map should be enabled'
b.call "hello"
})]
}
body = mw.call({}).last
body.each { |x| assert_equal 'hello', x }
end
def test_im_disabled_after_body_close
mw = Middleware.new lambda { |env| [200, {}, []] }
body = mw.call({}).last
assert IdentityMap.enabled?, 'identity map should be enabled'
body.close
assert !IdentityMap.enabled?, 'identity map should be disabled'
end
def test_im_cleared_after_body_close
mw = Middleware.new lambda { |env| [200, {}, []] }
body = mw.call({}).last
IdentityMap.repository['hello'] = 'world'
assert !IdentityMap.repository.empty?, 'repo should not be empty'
body.close
assert IdentityMap.repository.empty?, 'repo should be empty'
end
end
end
end