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
 |