80 lines
1.6 KiB
Ruby
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 |