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 72 lines (57 sloc) 2.681 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
require 'test/spec'

require 'rack/showstatus'
require 'rack/mock'

context "Rack::ShowStatus" do
  specify "should provide a default status message" do
    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
                                                     }))

    res = req.get("/", :lint => true)
    res.should.be.not_found
    res.should.be.not.empty

    res["Content-Type"].should.equal("text/html")
    res.should =~ /404/
    res.should =~ /Not Found/
  end

  specify "should let the app provide additional information" do
    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
                                                       env["rack.showstatus.detail"] = "gone too meta."
                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
                                                     }))

    res = req.get("/", :lint => true)
    res.should.be.not_found
    res.should.be.not.empty

    res["Content-Type"].should.equal("text/html")
    res.should =~ /404/
    res.should =~ /Not Found/
    res.should =~ /too meta/
  end

  specify "should not replace existing messages" do
    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "4"}, ["foo!"]]
                                                     }))
    res = req.get("/", :lint => true)
    res.should.be.not_found

    res.body.should == "foo!"
  end

  specify "should pass on original headers" do
    headers = {"WWW-Authenticate" => "Basic blah"}

    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env| [401, headers, []] }))
    res = req.get("/", :lint => true)

    res["WWW-Authenticate"].should.equal("Basic blah")
  end

  specify "should replace existing messages if there is detail" do
    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
                                                       env["rack.showstatus.detail"] = "gone too meta."
                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "4"}, ["foo!"]]
                                                     }))

    res = req.get("/", :lint => true)
    res.should.be.not_found
    res.should.be.not.empty

    res["Content-Type"].should.equal("text/html")
    res["Content-Length"].should.not.equal("4")
    res.should =~ /404/
    res.should =~ /too meta/
    res.body.should.not =~ /foo/
  end
end
Something went wrong with that request. Please try again.