cartodb/spec/requests/carto/api/presenter_cache_spec.rb
2020-06-15 10:58:47 +08:00

72 lines
2.3 KiB
Ruby

require_relative '../../../simplecov_helper'
require_relative '../../../../app/controllers/carto/api/presenter_cache'
class Carto::Api::FakeModel
attr_reader :id
def initialize(id = rand(100000))
@id = id
end
end
class Carto::Api::FakePresenter
def initialize(model)
@model = model
end
def to_poro
{ id: @model.id }
end
end
describe Carto::Api::PresenterCache do
describe '#get_poro' do
let(:cache) { Carto::Api::PresenterCache.new }
let(:fake_model) { Carto::Api::FakeModel.new }
let(:fake_model_b) { Carto::Api::FakeModel.new }
let(:fake_model_idless) { Carto::Api::FakeModel.new(nil) }
let(:fake_presenter) { Carto::Api::FakePresenter.new(fake_model) }
let(:fake_presenter_b) { Carto::Api::FakePresenter.new(fake_model_b) }
it 'throws an error if no block is provided' do
expect { cache.get_poro(fake_model) }.to raise_error(/no block given \(yield\)/)
end
it 'returns block presenter.to_poro for non-cached models' do
cache.get_poro(fake_model) { fake_presenter }.should == fake_presenter.to_poro
cache.get_poro(fake_model_b) { fake_presenter_b }.should == fake_presenter_b.to_poro
end
it 'returns cached presenter.to_poro for cached classes and ids' do
cache.get_poro(fake_model) { fake_presenter }.should == fake_presenter.to_poro
# Block is ignored
cache.get_poro(fake_model) { fake_presenter_b }.should == fake_presenter.to_poro
end
it 'raises error with nil models' do
expect { cache.get_poro(nil) }.to raise_error(/no model given/)
end
it 'does not cache if model.id is nil' do
cache.get_poro(fake_model_idless) { fake_presenter }.should == fake_presenter.to_poro
cache.get_poro(fake_model_idless) { fake_presenter_b }.should == fake_presenter_b.to_poro
end
it 'raises error for nil presenters' do
expect { cache.get_poro(fake_model) { nil } }.to raise_error(/no presenter given/)
expect { cache.get_poro(fake_model_idless) { nil } }.to raise_error(/no presenter given/)
end
it 'does not raise error for nil presenter if it was cached' do
cache.get_poro(fake_model) { fake_presenter }.should == fake_presenter.to_poro
cache.get_poro(fake_model) { nil }.should == fake_presenter.to_poro
end
end
end