Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 41 lines (31 sloc) 1.186 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
require 'test/spec'
require 'time'

require 'rack/mock'
require 'rack/conditionalget'

context "Rack::ConditionalGet" do
  specify "should set a 304 status and truncate body when If-Modified-Since hits" do
    timestamp = Time.now.httpdate
    app = Rack::ConditionalGet.new(lambda { |env|
      [200, {'Last-Modified'=>timestamp}, 'TEST'] })

    response = Rack::MockRequest.new(app).
      get("/", 'HTTP_IF_MODIFIED_SINCE' => timestamp)

    response.status.should.be == 304
    response.body.should.be.empty
  end

  specify "should set a 304 status and truncate body when If-None-Match hits" do
    app = Rack::ConditionalGet.new(lambda { |env|
      [200, {'Etag'=>'1234'}, 'TEST'] })

    response = Rack::MockRequest.new(app).
      get("/", 'HTTP_IF_NONE_MATCH' => '1234')

    response.status.should.be == 304
    response.body.should.be.empty
  end

  specify "should not affect non-GET/HEAD requests" do
    app = Rack::ConditionalGet.new(lambda { |env|
      [200, {'Etag'=>'1234'}, 'TEST'] })

    response = Rack::MockRequest.new(app).
      post("/", 'HTTP_IF_NONE_MATCH' => '1234')

    response.status.should.be == 200
    response.body.should.be == 'TEST'
  end
end
Something went wrong with that request. Please try again.