Files
euchre_camp/spec/playwright_runner.rb
T

80 lines
1.6 KiB
Ruby

# frozen_string_literal: true
require 'open3'
require 'timeout'
require 'net/http'
require 'uri'
# Script to start Hanami server and run Playwright tests
class PlaywrightRunner
PORT = 2300
SERVER_START_TIMEOUT = 30
SERVER_URL = "http://localhost:#{PORT}"
def initialize
@server_process = nil
end
def start_server
puts "Starting Hanami server on port #{PORT}..."
# Start the server in the background
@server_process = IO.popen(
"bundle exec hanami server --port #{PORT}",
err: [:child, :out]
)
# Wait for server to be ready
timeout = SERVER_START_TIMEOUT
start_time = Time.now
while Time.now - start_time < timeout
begin
# Try to connect to the server
Net::HTTP.get_response(URI(SERVER_URL))
puts "Server is ready!"
return true
rescue Errno::ECONNREFUSED, SocketError
sleep 1
next
end
end
puts "Server failed to start within #{timeout} seconds"
return false
end
def stop_server
if @server_process
puts "Stopping Hanami server..."
Process.kill('TERM', @server_process.pid)
@server_process.close
@server_process = nil
end
end
def run_tests
puts "Running Playwright tests..."
# Run RSpec with the Playwright tests
system("bundle exec rspec spec/playwright/mobile_responsiveness_spec.rb")
$?.exitstatus == 0
end
end
# Main execution
if __FILE__ == $0
runner = PlaywrightRunner.new
begin
if runner.start_server
success = runner.run_tests
exit(success ? 0 : 1)
else
exit(1)
end
ensure
runner.stop_server
end
end