discourse/spec/components/hijack_spec.rb

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