test: Add Playwright tests for mobile responsiveness
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user