Add Server#base_url and make Session#server_url part of the public API

This commit is contained in:
Thomas Walpole 2019-07-07 15:45:20 -07:00
parent 91bdb822fe
commit 9ae0a8c28b
3 changed files with 17 additions and 4 deletions

View File

@ -86,6 +86,10 @@ module Capybara
self
end
def base_url
"http#{'s' if using_ssl?}://#{host}:#{port}"
end
private
def middleware

View File

@ -806,6 +806,10 @@ module Capybara
end
end
def server_url
@server&.base_url
end
private
@@instance_created = false # rubocop:disable Style/ClassVars
@ -863,10 +867,6 @@ module Capybara
end
end
def server_url
"http#{'s' if @server.using_ssl?}://#{@server.host}:#{@server.port}" if @server
end
def adjust_server_port(uri)
uri.port ||= @server.port if @server && config.always_include_port
end

View File

@ -74,6 +74,13 @@ RSpec.describe Capybara::Server do
end
end
it 'should return its #base_url' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
server = Capybara::Server.new(app).boot
uri = ::Addressable::URI.parse(server.base_url)
expect(uri.to_hash).to include(scheme: 'http', host: server.host, port: server.port)
end
it 'should support SSL' do
begin
key = File.join(Dir.pwd, 'spec', 'fixtures', 'key.pem')
@ -93,6 +100,8 @@ RSpec.describe Capybara::Server do
end
expect(res.body).to include('Hello SSL Server!')
uri = ::Addressable::URI.parse(server.base_url)
expect(uri.to_hash).to include(scheme: 'https', host: server.host, port: server.port)
ensure
Capybara.server = :default
end