Files
openfoodnetwork/spec/system/support/cuprite_setup.rb
Maikel Linke a062a7b697 Add Billy proxy to Chrome in system specs
And demonstrate the use of puffing-billy browser proxy.

Billy can cache and record responses to browser requests. For that to
work we need to allow network connections and disable VCR. But instead I
found that the Billy proxy is just like any other Ruby backend code and
its connections can be recorded with VCR instead.

And instead of stubbing requests via Billy.proxy, we can use standard
Webmock `stub_request`. Now we use puffing-billy just to relay browser
requests via our Ruby app.
2025-07-29 14:37:27 +10:00

52 lines
1.6 KiB
Ruby

# frozen_string_literal: true
require "capybara/cuprite"
headless = ActiveModel::Type::Boolean.new.cast(ENV.fetch("HEADLESS", true))
browser_options = {
"ignore-certificate-errors" => nil,
}
browser_options["no-sandbox"] = nil if ENV['CI'] || ENV['DOCKER']
Capybara.register_driver(:cuprite_ofn) do |app|
Capybara::Cuprite::Driver.new(
app,
window_size: [1280, 800],
browser_options:,
process_timeout: 60,
timeout: 60,
# Don't load scripts from external sources, like google maps or stripe
url_whitelist: [
%r{^http://localhost}, %r{^http://0.0.0.0}, %r{http://127.0.0.1},
# Just for testing external connections: spec/system/billy_spec.rb
%r{^https?://deb.debian.org},
],
inspector: true,
headless:,
js_errors: true,
proxy: { host: Billy.proxy.host, port: Billy.proxy.port },
)
end
# Configure Capybara to use :cuprite_ofn driver by default
Capybara.default_driver = Capybara.javascript_driver = :cuprite_ofn
RSpec.configure do |config|
config.include CupriteHelpers, type: :system
config.include Devise::Test::IntegrationHelpers, type: :system
config.prepend_before(:each, type: :system) { driven_by :cuprite_ofn }
# Make sure url helpers in mailers use the Capybara server host.
config.around(:each, type: :system) do |example|
original_host = Rails.application.default_url_options[:host]
Rails.application.default_url_options[:host] =
"#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}"
example.run
Rails.application.default_url_options[:host] = original_host
remove_downloaded_files
end
end