72 lines
2.3 KiB
Ruby
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
|