# frozen_string_literal: true require 'open3' require 'timeout' # 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