Sha256: 0f10e1a48b8443b4e36f1e0268c79833b71796a2acaf6697e4f9390fe77b351e

Contents?: true

Size: 1.65 KB

Versions: 17

Compression:

Stored size: 1.65 KB

Contents

RSpec::Matchers.define :set_cookie do |name, expected_value, expected_expires_at|
  failure_message_for_should do
    "Expected #{expectation} got #{result}"
  end

  match do |subject|
    @headers = subject
    @expected_name = name
    @expected_value = expected_value
    @expected_expires_at = expected_expires_at
    extract_cookies
    find_expected_cookie
    parse_expiration
    parse_value
    parse_path
    ensure_cookie_set
    ensure_expiration_correct
    ensure_path_is_correct
  end

  def ensure_cookie_set
    @value.should == @expected_value
  end

  def ensure_expiration_correct
    @expires_at.should_not be_nil
    @expires_at.should be_within(100).of(@expected_expires_at)
  end

  def ensure_path_is_correct
    @path.should == "/"
  end

  def expectation
    "a cookie named #{@expected_name} with value #{@expected_value.inspect} expiring at #{@expected_expires_at.inspect}"
  end

  def extract_cookies
    @cookie_headers = @headers['Set-Cookie'] || []
    @cookie_headers = [@cookie_headers] if @cookie_headers.respond_to?(:to_str)
  end

  def find_expected_cookie
    @cookie = @cookie_headers.detect do |header|
      header =~ /^#{@expected_name}=[^;]*(;|$)/
    end
  end

  def parse_expiration
    if @cookie && result = @cookie.match(/; expires=(.*?)(;|$)/)
      @expires_at = Time.parse(result[1])
    end
  end

  def parse_path
    if @cookie && result = @cookie.match(/; path=(.*?)(;|$)/)
      @path = result[1]
    end
  end

  def parse_value
    if @cookie && result = @cookie.match(/=(.*?)(?:;|$)/)
      @value = result[1]
    end
  end

  def result
    if @cookie
      @cookie
    else
      @cookie_headers.join("; ")
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
clearance-1.4.3 spec/support/cookies.rb
clearance-1.4.2 spec/support/cookies.rb
clearance-1.4.1 spec/support/cookies.rb
clearance-1.4.0 spec/support/cookies.rb
clearance-1.3.0 spec/support/cookies.rb
clearance-1.2.1 spec/support/cookies.rb
clearance-1.2.0 spec/support/cookies.rb
clearance-1.1.0 spec/support/cookies.rb
clearance-1.0.1 spec/support/cookies.rb
clearance-1.0.0 spec/support/cookies.rb
clearance-1.0.0.rc8 spec/support/cookies.rb
clearance-1.0.0.rc7 spec/support/cookies.rb
clearance-1.0.0.rc6 spec/support/cookies.rb
clearance-1.0.0.rc4 spec/support/cookies.rb
clearance-1.0.0.rc3 spec/support/cookies.rb
clearance-1.0.0.rc2 spec/support/cookies.rb
clearance-1.0.0.rc1 spec/support/cookies.rb