Make sure the ETag changes when either the page model or the actual rendered content changes. Fixes #313
This commit is contained in:
parent
e3e9909268
commit
98a6740a7d
@ -98,7 +98,7 @@ module Locomotive
|
||||
response.headers['Content-Type'] = 'text/html; charset=utf-8'
|
||||
|
||||
if @page.with_cache?
|
||||
fresh_when :etag => @page, :last_modified => @page.updated_at.utc, :public => true
|
||||
fresh_when :etag => [@page, output], :last_modified => @page.updated_at.utc, :public => true
|
||||
|
||||
if @page.cache_strategy != 'simple' # varnish
|
||||
response.cache_control[:max_age] = @page.cache_strategy
|
||||
|
@ -71,6 +71,50 @@ describe 'Locomotive rendering system' do
|
||||
@controller.status.should == :not_found
|
||||
end
|
||||
|
||||
context 'templatized page' do
|
||||
|
||||
before(:each) do
|
||||
@content_type = FactoryGirl.build(:content_type, :site => nil)
|
||||
@content = @content_type.contents.build(:_visible => true, :tile => 'one')
|
||||
@page.templatized = true
|
||||
@page.content_type = @content_type
|
||||
end
|
||||
|
||||
it 'sets the etag' do
|
||||
@page.cache_strategy = 'simple'
|
||||
@page.stubs(:updated_at).returns(Time.now)
|
||||
@controller.send(:prepare_and_set_response, 'Hello world !')
|
||||
@controller.response.to_a # force to build headers
|
||||
@controller.response.headers['ETag'].should == "\"d232eefab45e58af59c2d00409261365\""
|
||||
end
|
||||
|
||||
it 'changes the etag if the page changes' do
|
||||
@page.cache_strategy = 'simple'
|
||||
@page.stubs(:updated_at).returns(Time.now)
|
||||
@page.stubs(:to_param).returns("1")
|
||||
@controller.send(:prepare_and_set_response, 'Hello world !')
|
||||
@controller.response.to_a # force to build headers
|
||||
old_etag = @controller.response.headers['ETag']
|
||||
|
||||
@page.stubs(:to_param).returns("2")
|
||||
@controller.send(:prepare_and_set_response, 'Hello world !')
|
||||
@controller.response.to_a # force to build headers
|
||||
@controller.response.headers['ETag'].should_not == old_etag
|
||||
end
|
||||
|
||||
it 'changes the etag if the output changes' do
|
||||
@page.cache_strategy = 'simple'
|
||||
@page.stubs(:updated_at).returns(Time.now)
|
||||
@controller.send(:prepare_and_set_response, 'Hello world !')
|
||||
@controller.response.to_a # force to build headers
|
||||
old_etag = @controller.response.headers['ETag']
|
||||
|
||||
@controller.send(:prepare_and_set_response, 'Hello world !!')
|
||||
@controller.response.to_a # force to build headers
|
||||
@controller.response.headers['ETag'].should_not == old_etag
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
context 'when retrieving page' do
|
||||
|
Loading…
Reference in New Issue
Block a user