diff options
Diffstat (limited to 'spec/models/repository_spec.rb')
-rw-r--r-- | spec/models/repository_spec.rb | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 70630467d24..6599b4e765a 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1095,65 +1095,69 @@ describe Repository do end end - describe '#exists?' do - it 'returns true when a repository exists' do - expect(repository.exists?).to be(true) - end - - it 'returns false if no full path can be constructed' do - allow(repository).to receive(:full_path).and_return(nil) - - expect(repository.exists?).to be(false) - end - - context 'with broken storage', :broken_storage do - it 'should raise a storage error' do - expect_to_raise_storage_error { broken_repository.exists? } - end - end - + shared_examples 'asymmetric cached method' do |method| context 'asymmetric caching', :use_clean_rails_memory_store_caching, :request_store do let(:cache) { repository.send(:cache) } let(:request_store_cache) { repository.send(:request_store_cache) } context 'when it returns true' do before do - expect(repository.raw_repository).to receive(:exists?).once.and_return(true) + expect(repository.raw_repository).to receive(method).once.and_return(true) end it 'caches the output in RequestStore' do expect do - repository.exists? - end.to change { request_store_cache.read(:exists?) }.from(nil).to(true) + repository.send(method) + end.to change { request_store_cache.read(method) }.from(nil).to(true) end it 'caches the output in RepositoryCache' do expect do - repository.exists? - end.to change { cache.read(:exists?) }.from(nil).to(true) + repository.send(method) + end.to change { cache.read(method) }.from(nil).to(true) end end context 'when it returns false' do before do - expect(repository.raw_repository).to receive(:exists?).once.and_return(false) + expect(repository.raw_repository).to receive(method).once.and_return(false) end it 'caches the output in RequestStore' do expect do - repository.exists? - end.to change { request_store_cache.read(:exists?) }.from(nil).to(false) + repository.send(method) + end.to change { request_store_cache.read(method) }.from(nil).to(false) end it 'does NOT cache the output in RepositoryCache' do expect do - repository.exists? - end.not_to change { cache.read(:exists?) }.from(nil) + repository.send(method) + end.not_to change { cache.read(method) }.from(nil) end end end end + describe '#exists?' do + it 'returns true when a repository exists' do + expect(repository.exists?).to be(true) + end + + it 'returns false if no full path can be constructed' do + allow(repository).to receive(:full_path).and_return(nil) + + expect(repository.exists?).to be(false) + end + + context 'with broken storage', :broken_storage do + it 'should raise a storage error' do + expect_to_raise_storage_error { broken_repository.exists? } + end + end + + it_behaves_like 'asymmetric cached method', :exists? + end + describe '#has_visible_content?' do before do # If raw_repository.has_visible_content? gets called more than once then @@ -1271,6 +1275,8 @@ describe Repository do repository.root_ref repository.root_ref end + + it_behaves_like 'asymmetric cached method', :root_ref end describe '#expire_root_ref_cache' do |