test: add application routing and dispatch tests

This commit is contained in:
dualfroz committed 2026-08-27 17:00:00 +02:00
1 parent 95ad583c16
commit d321e2fd1e
2 files changed
+236

No files matched your search

+100
View File
@@ -0,0 +1,100 @@
require 'minitest/autorun'
require 'prism'
require 'support'
class ResourceApp < Prism::Application
enable_sessions(secret: 'routing-secret')
root(to: 'welcome#show')
resources :routing_posts, only: %i[index show create]
get '/whoami' do
json(path: url_for(:routing_post, id: 5))
end
get '/write-flash' do
flash[:notice] = 'saved!'
redirect '/after-flash'
end
get '/after-flash' do
json(notice: flash[:notice])
end
end
class WelcomeController < Prism::Controller
def show
html('welcome')
end
end
class RoutingPostsController < Prism::Controller
def index
json(action: 'index')
end
def show
json(action: 'show', id: params['id'])
end
def create
json(action: 'create')
end
end
class ApplicationRoutingTest < Minitest::Test
include TestSupport
def call(method, path, **opts)
ResourceApp.call(env_for(method, path, **opts))
end
def test_root_dispatches_to_controller
status, _, body = call('GET', '/')
assert_equal 200, status
assert_equal 'welcome', body.join
end
def test_resources_index
_, _, body = call('GET', '/routing_posts')
assert_equal({ 'action' => 'index' }, JSON.parse(body.join))
end
def test_resources_show
_, _, body = call('GET', '/routing_posts/9')
assert_equal({ 'action' => 'show', 'id' => '9' }, JSON.parse(body.join))
end
def test_resources_create
_, _, body = call('POST', '/routing_posts')
assert_equal({ 'action' => 'create' }, JSON.parse(body.join))
end
def test_resources_only_registers_requested_actions
status, = call('DELETE', '/routing_posts/1')
assert_equal 404, status
end
def test_url_for_named_resource_route
_, _, body = call('GET', '/whoami')
assert_equal '/routing_posts/5', JSON.parse(body.join)['path']
end
def test_flash_survives_a_redirect
status, headers, = call('GET', '/write-flash')
assert_equal 302, status
cookie = headers['Set-Cookie'].split(';').first
_, _, body = call('GET', '/after-flash', cookies: cookie)
assert_equal 'saved!', JSON.parse(body.join)['notice']
end
def test_flash_does_not_survive_a_second_request
_, headers, = call('GET', '/write-flash')
cookie = headers['Set-Cookie'].split(';').first
_, headers2, = call('GET', '/after-flash', cookies: cookie)
cookie2 = headers2['Set-Cookie']&.split(';')&.first || cookie
_, _, body = call('GET', '/after-flash', cookies: cookie2)
assert_nil JSON.parse(body.join)['notice']
end
end