test: add template, view, session, and flash tests
This commit is contained in:
1 parent
7cf239f4e3
commit
bb0ac4afc3
4 files changed
+186
No files matched your search
@@ -0,0 +1,55 @@
|
||||
require 'minitest/autorun'
|
||||
require 'prism'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
class ViewTest < Minitest::Test
|
||||
def setup
|
||||
@dir = Dir.mktmpdir('prism-view')
|
||||
FileUtils.mkdir_p(File.join(@dir, 'posts'))
|
||||
FileUtils.mkdir_p(File.join(@dir, 'layouts'))
|
||||
File.write(File.join(@dir, 'posts', 'index.erb'), '<%= greeting %>')
|
||||
File.write(File.join(@dir, 'posts', '_item.erb'), '[<%= label %>]')
|
||||
File.write(File.join(@dir, 'layouts', 'application.erb'), 'before-<%== content %>-after')
|
||||
@view = Prism::View.new(@dir)
|
||||
end
|
||||
|
||||
def teardown
|
||||
FileUtils.remove_entry(@dir)
|
||||
end
|
||||
|
||||
def test_render_reads_and_evaluates_template
|
||||
assert_equal 'hi', @view.render('posts/index', locals: { greeting: 'hi' })
|
||||
end
|
||||
|
||||
def test_render_wraps_content_with_layout
|
||||
result = @view.render('posts/index', locals: { greeting: 'hi' }, layout: :application)
|
||||
assert_equal 'before-hi-after', result
|
||||
end
|
||||
|
||||
def test_render_partial_directly
|
||||
assert_equal '[x]', @view.render_partial('posts/item', locals: { label: 'x' })
|
||||
end
|
||||
|
||||
def test_partial_called_from_within_a_template_resolves_relative_to_it
|
||||
File.write(File.join(@dir, 'posts', 'index.erb'), "<%== partial('item', locals: { label: greeting }) %>")
|
||||
assert_equal '[hi]', @view.render('posts/index', locals: { greeting: 'hi' })
|
||||
end
|
||||
|
||||
def test_render_collection_exposes_item_and_counter_locals
|
||||
File.write(File.join(@dir, 'posts', '_item.erb'), '<%= label_counter %>:<%= label %>;')
|
||||
result = @view.render_collection('posts/item', %w[a b], as: :label)
|
||||
assert_equal '1:a;2:b;', result
|
||||
end
|
||||
|
||||
def test_render_collection_defaults_local_name_to_partial_basename
|
||||
File.write(File.join(@dir, 'posts', '_item.erb'), '<%= item %>;')
|
||||
result = @view.render_collection('posts/item', %w[a b])
|
||||
assert_equal 'a;b;', result
|
||||
end
|
||||
|
||||
def test_missing_template_raises_a_descriptive_error
|
||||
error = assert_raises(Prism::View::TemplateNotFound) { @view.render('posts/missing') }
|
||||
assert_includes error.message, 'posts/missing'
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user