From 9ae0a8c28b75a105b96336fd274c76454bcdbcb2 Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Sun, 7 Jul 2019 15:45:20 -0700 Subject: [PATCH] Add Server#base_url and make Session#server_url part of the public API --- lib/capybara/server.rb | 4 ++++ lib/capybara/session.rb | 8 ++++---- spec/server_spec.rb | 9 +++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/capybara/server.rb b/lib/capybara/server.rb index 73781010..ea5a94cc 100644 --- a/lib/capybara/server.rb +++ b/lib/capybara/server.rb @@ -86,6 +86,10 @@ module Capybara self end + def base_url + "http#{'s' if using_ssl?}://#{host}:#{port}" + end + private def middleware diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index 1ebe5c6b..6e0af0db 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -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 diff --git a/spec/server_spec.rb b/spec/server_spec.rb index b2625241..db41dccd 100644 --- a/spec/server_spec.rb +++ b/spec/server_spec.rb @@ -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