34 lines
		
	
	
		
			849 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			849 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
RSpec::Matchers.define :have_http_link_header do |href|
 | 
						|
  match do |response|
 | 
						|
    @response = response
 | 
						|
 | 
						|
    header_link&.href == href
 | 
						|
  end
 | 
						|
 | 
						|
  match_when_negated do |response|
 | 
						|
    response.headers['Link'].blank?
 | 
						|
  end
 | 
						|
 | 
						|
  chain :for do |attributes|
 | 
						|
    @attributes = attributes
 | 
						|
  end
 | 
						|
 | 
						|
  failure_message do |response|
 | 
						|
    "Expected `#{response.headers['Link']}` to include `href` value of `#{href}` for `#{@attributes}` but it did not."
 | 
						|
  end
 | 
						|
 | 
						|
  failure_message_when_negated do
 | 
						|
    "Expected response not to have a `Link` header but `#{response.headers['Link']}` is present."
 | 
						|
  end
 | 
						|
 | 
						|
  def header_link
 | 
						|
    LinkHeader
 | 
						|
      .parse(@response.headers['Link'])
 | 
						|
      .find_link(*@attributes.stringify_keys)
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
RSpec::Matchers.define_negated_matcher :not_have_http_link_header, :have_http_link_header # Allow chaining
 |