123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- # 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
|