hanami-view/spec/unit/layout_spec.rb

56 lines
1.3 KiB
Ruby

RSpec.describe Dry::View::Layout do
subject(:layout) { layout_class.new }
let(:layout_class) do
klass = Class.new(Dry::View::Layout)
klass.configure do |config|
config.root = SPEC_ROOT.join('fixtures/templates')
config.name = 'app'
config.template = 'user'
config.formats = {html: :slim}
end
klass
end
let(:page) do
double(:page, title: 'Test')
end
let(:options) do
{ scope: page, locals: { user: { name: 'Jane' }, header: { title: 'User' } } }
end
let(:renderer) do
layout.class.renderers[:html]
end
describe '#call' do
it 'renders template within the layout' do
expect(layout.(options)).to eql(
'<!DOCTYPE html><html><head><title>Test</title></head><body><h1>User</h1><p>Jane</p></body></html>'
)
end
end
describe '#parts' do
it 'returns view parts' do
part = layout.parts({ user: { id: 1, name: 'Jane' } }, renderer)
expect(part[:id]).to be(1)
expect(part[:name]).to eql('Jane')
end
it 'builds null parts for nil values' do
part = layout.parts({ user: nil }, renderer)
expect(part[:id]).to be_nil
end
it 'returns empty part when no locals are passed' do
expect(layout.parts({}, renderer)).to be_instance_of(Dry::View::Part)
end
end
end