spec/grape_rabl_spec.rb in grape-rabl-0.4.1 vs spec/grape_rabl_spec.rb in grape-rabl-0.4.2

- old
+ new

@@ -4,46 +4,47 @@ subject do Class.new(Grape::API) end before do - subject.format :json + subject.default_format :json subject.formatter :json, Grape::Formatter::Rabl + subject.formatter :xml, Grape::Formatter::Rabl subject.helpers MyHelper end def app subject end it 'should work without rabl template' do subject.get('/home') { 'Hello World' } get '/home' - last_response.body.should == "\"Hello World\"" + expect(last_response.body).to eq('"Hello World"') end it 'should raise error about root directory' do begin subject.get('/home', rabl: true) {} get '/home' rescue Exception => e - e.message.should include "Use Rack::Config to set 'api.tilt.root' in config.ru" + expect(e.message).to include "Use Rack::Config to set 'api.tilt.root' in config.ru" end end - context 'titl root is setup' do + context 'titl root is setup' do let(:parsed_response) { JSON.parse(last_response.body) } before do subject.before { env['api.tilt.root'] = "#{File.dirname(__FILE__)}/views" } end describe 'helpers' do it 'should execute helper' do subject.get('/home', rabl: 'helper') { @user = OpenStruct.new } get '/home' - parsed_response.should == JSON.parse("{\"user\":{\"helper\":\"my_helper\"}}") + expect(parsed_response).to eq(JSON.parse('{"user":{"helper":"my_helper"}}')) end end describe '#render' do before do @@ -73,37 +74,37 @@ end end it 'renders template passed as argument to render method' do get('/home') - parsed_response.should == JSON.parse('{"admin":{"name":"LTe"}}') + expect(parsed_response).to eq(JSON.parse('{"admin":{"name":"LTe"}}')) end it 'renders admin template' do get('/admin/1') - parsed_response.should == JSON.parse('{"admin":{"name":"LTe"}}') + expect(parsed_response).to eq(JSON.parse('{"admin":{"name":"LTe"}}')) end it 'renders user template' do get('/admin/2') - parsed_response.should == JSON.parse('{"user":{"name":"LTe","project":null}}') + expect(parsed_response).to eq(JSON.parse('{"user":{"name":"LTe","project":null}}')) end it 'renders template passed as argument to render method with locals' do get('/home-detail') - parsed_response.should == JSON.parse('{"admin":{"name":"LTe","details":"amazing detail"}}') + expect(parsed_response).to eq(JSON.parse('{"admin":{"name":"LTe","details":"amazing detail"}}')) end it 'renders with locals without overriding template' do get('/about-detail') - parsed_response.should == JSON.parse('{"user":{"name":"LTe","details":"just a user","project":null}}') + expect(parsed_response).to eq(JSON.parse('{"user":{"name":"LTe","details":"just a user","project":null}}')) end it 'does not save rabl options after called #render method' do get('/home') get('/about') - parsed_response.should == JSON.parse('{"user":{"name":"LTe","project":null}}') + expect(parsed_response).to eq(JSON.parse('{"user":{"name":"LTe","project":null}}')) end it 'does not modify endpoint options' do get '/home' expect(last_request.env['api.endpoint'].options[:route_options][:rabl]).to eq 'user' @@ -111,38 +112,38 @@ end it 'should respond with proper content-type' do subject.get('/home', rabl: 'user') {} get('/home') - last_response.headers['Content-Type'].should == 'application/json' + expect(last_response.headers['Content-Type']).to eq('application/json') end it 'should not raise error about root directory' do subject.get('/home', rabl: 'user') {} get '/home' - last_response.status.should eq 200 - last_response.body.should_not include "Use Rack::Config to set 'api.tilt.root' in config.ru" + expect(last_response.status).to eq 200 + expect(last_response.body).not_to include "Use Rack::Config to set 'api.tilt.root' in config.ru" end ['user', 'user.rabl'].each do |rabl_option| it "should render rabl template (#{rabl_option})" do subject.get('/home', rabl: rabl_option) do @user = OpenStruct.new(name: 'LTe', email: 'email@example.com') @project = OpenStruct.new(name: 'First') end get '/home' - parsed_response.should == JSON.parse('{"user":{"name":"LTe","email":"email@example.com","project":{"name":"First"}}}') + expect(parsed_response).to eq(JSON.parse('{"user":{"name":"LTe","email":"email@example.com","project":{"name":"First"}}}')) end end describe 'template cache' do before do - @views_dir = FileUtils.mkdir_p("#{File.expand_path("..", File.dirname(__FILE__))}/tmp")[0] + @views_dir = FileUtils.mkdir_p("#{File.expand_path('..', File.dirname(__FILE__))}/tmp")[0] @template = "#{@views_dir}/user.rabl" FileUtils.cp("#{File.dirname(__FILE__)}/views/user.rabl", @template) - subject.before { env['api.tilt.root'] = "#{File.expand_path("..", File.dirname(__FILE__))}/tmp" } + subject.before { env['api.tilt.root'] = "#{File.expand_path('..', File.dirname(__FILE__))}/tmp" } subject.get('/home', rabl: 'user') do @user = OpenStruct.new(name: 'LTe', email: 'email@example.com') @project = OpenStruct.new(name: 'First') end end @@ -155,27 +156,47 @@ it 'should serve from cache if cache_template_loading' do Grape::Rabl.configure do |config| config.cache_template_loading = true end get '/home' - last_response.status.should be == 200 + expect(last_response.status).to eq(200) old_response = last_response.body open(@template, 'a') { |f| f << 'node(:test) { "test" }' } get '/home' - last_response.status.should be == 200 + expect(last_response.status).to eq(200) new_response = last_response.body - old_response.should == new_response + expect(old_response).to eq(new_response) end - it 'should serve new template if cache_template_loading' do + it 'should maintain different cached templates for different formats' do + Grape::Rabl.configure do |config| + config.cache_template_loading = true + end get '/home' - last_response.status.should be == 200 + expect(last_response.status).to eq(200) + json_response = last_response.body + get '/home.xml' + expect(last_response.status).to eq(200) + xml_response = last_response.body + expect(json_response).not_to eq(xml_response) + open(@template, 'a') { |f| f << 'node(:test) { "test" }' } + get '/home.xml' + expect(last_response.status).to eq(200) + expect(last_response.body).to eq(xml_response) + get '/home.json' + expect(last_response.status).to eq(200) + expect(last_response.body).to eq(json_response) + end + + it 'should serve new template unless cache_template_loading' do + get '/home' + expect(last_response.status).to eq(200) old_response = last_response.body open(@template, 'a') { |f| f << 'node(:test) { "test" }' } get '/home' - last_response.status.should be == 200 + expect(last_response.status).to eq(200) new_response = last_response.body - old_response.should_not == new_response + expect(old_response).not_to eq(new_response) end end end end