mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 10:29:35 +08:00
608207b2e5
This ensures that even if it is slow to download avatars site will continue to work Also simplifies hijack pattern
75 lines
1.6 KiB
Ruby
75 lines
1.6 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe Hijack do
|
|
class Hijack::Tester < ApplicationController
|
|
attr_reader :io
|
|
|
|
include Hijack
|
|
|
|
def initialize
|
|
@io = StringIO.new
|
|
self.request = ActionController::TestRequest.new(
|
|
{ "rack.hijack" => lambda { @io } },
|
|
nil,
|
|
nil
|
|
)
|
|
# we need this for the 418
|
|
self.response = ActionDispatch::Response.new
|
|
end
|
|
|
|
def hijack_test(&blk)
|
|
hijack(&blk)
|
|
end
|
|
|
|
end
|
|
|
|
let :tester do
|
|
Hijack::Tester.new
|
|
end
|
|
|
|
it "handles expires_in" do
|
|
tester.hijack_test do
|
|
expires_in 1.year
|
|
render body: "hello world", status: 402
|
|
end
|
|
|
|
expect(tester.io.string).to include("max-age=31556952")
|
|
end
|
|
|
|
it "renders non 200 status if asked for" do
|
|
tester.hijack_test do
|
|
render body: "hello world", status: 402
|
|
end
|
|
|
|
expect(tester.io.string).to include("402")
|
|
expect(tester.io.string).to include("world")
|
|
end
|
|
|
|
it "renders stuff correctly if it works" do
|
|
tester.hijack_test do
|
|
render plain: "hello world"
|
|
end
|
|
|
|
result = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 11\r\nConnection: close\r\n\r\nhello world"
|
|
expect(tester.io.string).to eq(result)
|
|
end
|
|
|
|
it "returns 500 by default" do
|
|
tester.hijack_test
|
|
|
|
expected = "HTTP/1.1 500 Internal Server Error\r\nContent-Type: text/html\r\nContent-Length: 0\r\nConnection: close\r\n\r\n"
|
|
expect(tester.io.string).to eq(expected)
|
|
end
|
|
|
|
it "does not run the block if io is closed" do
|
|
tester.io.close
|
|
|
|
ran = false
|
|
tester.hijack_test do
|
|
ran = true
|
|
end
|
|
|
|
expect(ran).to eq(false)
|
|
end
|
|
end
|