49 lines
1.2 KiB
Ruby
49 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec::Matchers.define :have_cacheable_headers do
|
|
match do |response|
|
|
@response = response
|
|
|
|
@errors = [].tap do |errors|
|
|
errors << check_cookies
|
|
errors << check_cookie_headers
|
|
errors << check_session
|
|
errors << check_cache_control
|
|
errors << check_vary if @expected_vary.present?
|
|
end
|
|
|
|
@errors.compact.empty?
|
|
end
|
|
|
|
chain :with_vary do |string|
|
|
@expected_vary = string
|
|
end
|
|
|
|
failure_message do
|
|
<<~ERROR
|
|
Expected that the response would be cacheable but it was not:
|
|
- #{@errors.compact.join("\n - ")}
|
|
ERROR
|
|
end
|
|
|
|
def check_vary
|
|
"Response `Vary` header does not contain `#{@expected_vary}`" unless @response.headers['Vary'].include?(@expected_vary)
|
|
end
|
|
|
|
def check_cookies
|
|
'Reponse cookies are present' unless @response.cookies.empty?
|
|
end
|
|
|
|
def check_cookie_headers
|
|
'Response `Set-Cookies` headers are present' if @response.headers['Set-Cookies'].present?
|
|
end
|
|
|
|
def check_session
|
|
'The session is not empty' unless session.empty?
|
|
end
|
|
|
|
def check_cache_control
|
|
'The `Cache-Control` header does not contain `public`' unless @response.headers['Cache-Control'].include?('public')
|
|
end
|
|
end
|