2016-03-08 00:52:19 +00:00
|
|
|
# frozen_string_literal: true
|
2018-03-01 00:11:41 +00:00
|
|
|
|
2009-11-09 22:09:51 +00:00
|
|
|
require 'sinatra/base'
|
2015-05-20 20:08:24 +00:00
|
|
|
require 'tilt/erb'
|
2009-11-09 22:09:51 +00:00
|
|
|
require 'rack'
|
2009-12-19 10:52:08 +00:00
|
|
|
require 'yaml'
|
2009-11-09 22:09:51 +00:00
|
|
|
|
2009-11-04 22:32:35 +00:00
|
|
|
class TestApp < Sinatra::Base
|
2012-07-13 12:57:43 +00:00
|
|
|
class TestAppError < StandardError; end
|
2016-11-07 17:34:57 +00:00
|
|
|
class TestAppOtherError < StandardError
|
|
|
|
def initialize(string1, msg)
|
|
|
|
@something = string1
|
|
|
|
@message = msg
|
|
|
|
end
|
|
|
|
end
|
2009-11-05 16:35:45 +00:00
|
|
|
set :root, File.dirname(__FILE__)
|
|
|
|
set :static, true
|
2012-07-13 12:57:43 +00:00
|
|
|
set :raise_errors, true
|
|
|
|
set :show_exceptions, false
|
2009-11-04 22:32:35 +00:00
|
|
|
|
2017-07-04 22:14:55 +00:00
|
|
|
@@form_post_count = 0
|
2012-01-10 00:33:59 +00:00
|
|
|
# Also check lib/capybara/spec/views/*.erb for pages not listed here
|
|
|
|
|
2009-11-04 22:32:35 +00:00
|
|
|
get '/' do
|
2018-03-01 00:11:41 +00:00
|
|
|
response.set_cookie('capybara', value: 'root cookie', domain: request.host, path: request.path)
|
2011-08-30 08:54:20 +00:00
|
|
|
'Hello world! <a href="with_html">Relative</a>'
|
2009-11-04 22:32:35 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
get '/foo' do
|
|
|
|
'Another World'
|
|
|
|
end
|
2010-06-24 13:51:44 +00:00
|
|
|
|
2009-11-12 17:58:27 +00:00
|
|
|
get '/redirect' do
|
|
|
|
redirect '/redirect_again'
|
|
|
|
end
|
|
|
|
|
|
|
|
get '/redirect_again' do
|
|
|
|
redirect '/landed'
|
|
|
|
end
|
|
|
|
|
2018-06-07 17:05:42 +00:00
|
|
|
post '/redirect_307' do
|
|
|
|
redirect '/landed', 307
|
|
|
|
end
|
|
|
|
|
2018-06-08 17:10:26 +00:00
|
|
|
post '/redirect_308' do
|
|
|
|
redirect '/landed', 308
|
|
|
|
end
|
|
|
|
|
2012-01-08 21:45:47 +00:00
|
|
|
get '/referer_base' do
|
2018-03-01 00:11:41 +00:00
|
|
|
'<a href="/get_referer">direct link</a>' \
|
|
|
|
'<a href="/redirect_to_get_referer">link via redirect</a>' \
|
2012-01-20 12:24:40 +00:00
|
|
|
'<form action="/get_referer" method="get"><input type="submit"></form>'
|
2012-01-08 21:45:47 +00:00
|
|
|
end
|
|
|
|
|
2012-01-10 17:03:48 +00:00
|
|
|
get '/redirect_to_get_referer' do
|
2012-01-10 16:08:22 +00:00
|
|
|
redirect '/get_referer'
|
2012-01-08 21:45:47 +00:00
|
|
|
end
|
|
|
|
|
2012-01-10 16:08:22 +00:00
|
|
|
get '/get_referer' do
|
2018-07-10 21:18:39 +00:00
|
|
|
request.referer.nil? ? 'No referer' : "Got referer: #{request.referer}"
|
2012-01-08 21:45:47 +00:00
|
|
|
end
|
|
|
|
|
2011-03-25 09:01:59 +00:00
|
|
|
get '/host' do
|
2012-01-04 15:33:41 +00:00
|
|
|
"Current host is #{request.scheme}://#{request.host}:#{request.port}"
|
2011-03-25 09:01:59 +00:00
|
|
|
end
|
|
|
|
|
2010-06-29 21:11:24 +00:00
|
|
|
get '/redirect/:times/times' do
|
|
|
|
times = params[:times].to_i
|
|
|
|
if times.zero?
|
2018-07-10 21:18:39 +00:00
|
|
|
'redirection complete'
|
2010-06-29 21:11:24 +00:00
|
|
|
else
|
|
|
|
redirect "/redirect/#{times - 1}/times"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-11-12 17:58:27 +00:00
|
|
|
get '/landed' do
|
2018-07-10 21:18:39 +00:00
|
|
|
'You landed'
|
2009-11-12 17:58:27 +00:00
|
|
|
end
|
2009-11-28 23:32:16 +00:00
|
|
|
|
2018-06-07 17:05:42 +00:00
|
|
|
post '/landed' do
|
|
|
|
"You post landed: #{params.dig(:form, 'data')}"
|
|
|
|
end
|
|
|
|
|
2009-11-28 23:32:16 +00:00
|
|
|
get '/with-quotes' do
|
2018-03-01 00:11:41 +00:00
|
|
|
%q("No," he said, "you can't do that.")
|
2009-11-28 23:32:16 +00:00
|
|
|
end
|
|
|
|
|
2009-11-24 20:32:25 +00:00
|
|
|
get '/form/get' do
|
2009-11-14 09:44:46 +00:00
|
|
|
'<pre id="results">' + params[:form].to_yaml + '</pre>'
|
2009-11-08 00:13:16 +00:00
|
|
|
end
|
2010-06-24 13:51:44 +00:00
|
|
|
|
2011-05-22 08:37:02 +00:00
|
|
|
post '/relative' do
|
2011-05-22 07:34:46 +00:00
|
|
|
'<pre id="results">' + params[:form].to_yaml + '</pre>'
|
|
|
|
end
|
|
|
|
|
2009-11-24 20:32:25 +00:00
|
|
|
get '/favicon.ico' do
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
post '/redirect' do
|
|
|
|
redirect '/redirect_again'
|
|
|
|
end
|
|
|
|
|
2018-07-10 21:18:39 +00:00
|
|
|
delete '/delete' do
|
|
|
|
'The requested object was deleted'
|
2010-04-09 12:01:17 +00:00
|
|
|
end
|
|
|
|
|
2018-07-10 21:18:39 +00:00
|
|
|
get '/delete' do
|
|
|
|
'Not deleted'
|
2011-08-30 09:20:29 +00:00
|
|
|
end
|
|
|
|
|
2010-02-12 13:41:41 +00:00
|
|
|
get '/redirect_back' do
|
|
|
|
redirect back
|
|
|
|
end
|
|
|
|
|
2011-07-18 19:08:55 +00:00
|
|
|
get '/redirect_secure' do
|
2012-01-04 15:33:41 +00:00
|
|
|
redirect "https://#{request.host}:#{request.port}/host"
|
2011-07-18 19:08:55 +00:00
|
|
|
end
|
|
|
|
|
2011-02-22 14:53:14 +00:00
|
|
|
get '/slow_response' do
|
|
|
|
sleep 2
|
|
|
|
'Finally!'
|
|
|
|
end
|
|
|
|
|
2010-06-24 13:51:44 +00:00
|
|
|
get '/set_cookie' do
|
|
|
|
cookie_value = 'test_cookie'
|
|
|
|
response.set_cookie('capybara', cookie_value)
|
|
|
|
"Cookie set to #{cookie_value}"
|
|
|
|
end
|
|
|
|
|
|
|
|
get '/get_cookie' do
|
|
|
|
request.cookies['capybara']
|
|
|
|
end
|
|
|
|
|
2011-01-19 11:29:20 +00:00
|
|
|
get '/get_header' do
|
|
|
|
env['HTTP_FOO']
|
|
|
|
end
|
|
|
|
|
2011-08-30 08:19:52 +00:00
|
|
|
get '/get_header_via_redirect' do
|
|
|
|
redirect '/get_header'
|
|
|
|
end
|
|
|
|
|
2012-07-13 12:57:43 +00:00
|
|
|
get '/error' do
|
2018-07-10 21:18:39 +00:00
|
|
|
raise TestAppError, 'some error'
|
2012-07-13 12:57:43 +00:00
|
|
|
end
|
|
|
|
|
2016-11-07 17:34:57 +00:00
|
|
|
get '/other_error' do
|
2018-07-10 21:18:39 +00:00
|
|
|
raise TestAppOtherError.new('something', 'other error')
|
2016-11-07 17:34:57 +00:00
|
|
|
end
|
|
|
|
|
2015-02-26 21:40:59 +00:00
|
|
|
get '/load_error' do
|
|
|
|
raise LoadError
|
|
|
|
end
|
|
|
|
|
2015-04-14 19:46:00 +00:00
|
|
|
get '/with.*html' do
|
2015-07-22 06:41:23 +00:00
|
|
|
erb :with_html, locals: { referrer: request.referrer }
|
2015-04-14 19:46:00 +00:00
|
|
|
end
|
|
|
|
|
2018-03-05 22:57:33 +00:00
|
|
|
get '/with_title' do
|
|
|
|
<<-HTML
|
|
|
|
<title>#{params[:title] || 'Test Title'}</title>
|
|
|
|
<body>
|
|
|
|
<svg><title>abcdefg</title></svg>
|
|
|
|
</body>
|
|
|
|
HTML
|
|
|
|
end
|
|
|
|
|
2018-06-17 17:29:46 +00:00
|
|
|
get '/download.csv' do
|
2018-07-10 21:18:39 +00:00
|
|
|
content_type 'text/csv'
|
2018-06-17 17:29:46 +00:00
|
|
|
'This, is, comma, separated' \
|
|
|
|
'Thomas, Walpole, was , here'
|
|
|
|
end
|
|
|
|
|
2010-02-12 13:41:41 +00:00
|
|
|
get '/:view' do |view|
|
2015-07-22 06:41:23 +00:00
|
|
|
erb view.to_sym, locals: { referrer: request.referrer }
|
2010-02-12 13:41:41 +00:00
|
|
|
end
|
|
|
|
|
2009-11-24 20:32:25 +00:00
|
|
|
post '/form' do
|
2017-07-04 22:14:55 +00:00
|
|
|
@@form_post_count += 1
|
2018-07-10 21:18:39 +00:00
|
|
|
'<pre id="results">' + params[:form].merge('post_count' => @@form_post_count).to_yaml + '</pre>'
|
2009-11-17 22:36:27 +00:00
|
|
|
end
|
2009-11-12 16:07:43 +00:00
|
|
|
|
2010-12-06 07:22:59 +00:00
|
|
|
post '/upload_empty' do
|
|
|
|
if params[:form][:file].nil?
|
|
|
|
'Successfully ignored empty file field.'
|
|
|
|
else
|
|
|
|
'Something went wrong.'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-11-12 16:07:43 +00:00
|
|
|
post '/upload' do
|
2010-01-06 16:30:48 +00:00
|
|
|
begin
|
|
|
|
buffer = []
|
2018-07-10 21:18:39 +00:00
|
|
|
buffer << "Content-type: #{params.dig(:form, :document, :type)}"
|
|
|
|
buffer << "File content: #{params.dig(:form, :document, :tempfile).read}"
|
2010-01-06 16:30:48 +00:00
|
|
|
buffer.join(' | ')
|
2018-07-10 21:18:39 +00:00
|
|
|
rescue StandardError
|
2010-01-06 16:30:48 +00:00
|
|
|
'No file uploaded'
|
|
|
|
end
|
2009-11-12 16:07:43 +00:00
|
|
|
end
|
2010-11-10 22:43:58 +00:00
|
|
|
|
|
|
|
post '/upload_multiple' do
|
|
|
|
begin
|
2018-07-10 21:18:39 +00:00
|
|
|
docs = params.dig(:form, :multiple_documents)
|
|
|
|
buffer = [docs.size.to_s]
|
|
|
|
docs.each do |doc|
|
2012-09-17 12:48:13 +00:00
|
|
|
buffer << "Content-type: #{doc[:type]}"
|
|
|
|
buffer << "File content: #{doc[:tempfile].read}"
|
|
|
|
end
|
2010-11-10 22:43:58 +00:00
|
|
|
buffer.join(' | ')
|
2018-07-10 21:18:39 +00:00
|
|
|
rescue StandardError
|
2010-11-10 22:43:58 +00:00
|
|
|
'No files uploaded'
|
|
|
|
end
|
|
|
|
end
|
2009-11-08 00:13:16 +00:00
|
|
|
end
|
2009-11-09 22:09:51 +00:00
|
|
|
|
2018-03-01 00:11:41 +00:00
|
|
|
Rack::Handler::Puma.run TestApp, Port: 8070 if $PROGRAM_NAME == __FILE__
|