0
0
Fork 0
zero/spec/unit/zero/renderer/render_spec.rb

66 lines
2.0 KiB
Ruby

require 'spec_helper'
describe Zero::Renderer, '#render' do
subject { described_class.new(template_path, type_map) }
let(:template_path) { 'spec/fixtures/templates/' }
let(:type_map) {{
'html' => ['text/html', 'text/xml', '*/*'],
'json' => ['application/json', 'plain/text']
}}
let(:html_types) { ['text/html'] }
let(:json_types) { ['application/json'] }
let(:foo_types) { ['foo/bar', 'bar/foo'] }
let(:binding) { SpecTemplateContext.new('foo') }
context 'with default layout' do
it 'returns a tilt template' do
subject.render('index', html_types, binding).should be_kind_of(String)
end
it 'renders html content' do
subject.render('index', html_types, binding).should match('success')
end
it 'returns a tilt template for different types' do
subject.render('index', json_types, binding).should be_kind_of(String)
end
it 'renders json content' do
subject.render('index', json_types, binding).should match("{text: 'success'}")
end
it 'returns an ArgumentError, if given template does not exist' do
expect {
subject.render('foobar', html_types, binding)
}.to raise_error(ArgumentError, /Template 'foobar' does not exist/)
end
it 'returns an ArgumentError, if no template fits types' do
expect {
subject.render('index', foo_types, binding)
}.to raise_error(
ArgumentError, /Template 'index' not found/)
end
it 'uses the context' do
subject.render('context', html_types, binding).should match('foo')
end
end
context 'with special layout' do
subject { described_class.new(template_path, layout, type_map) }
let(:layout) { 'special_layout' }
it 'uses the layout for rendering' do
expect(subject.render('index', html_types, binding)
).to match(/layout loaded/)
end
it 'renders the template into the layout' do
expect(subject.render('index', html_types, binding)
).to match(/success/)
end
end
end