diff options
Diffstat (limited to 'spec/models/tree_spec.rb')
-rw-r--r-- | spec/models/tree_spec.rb | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/spec/models/tree_spec.rb b/spec/models/tree_spec.rb index 20d786f311f..302cd9e9f10 100644 --- a/spec/models/tree_spec.rb +++ b/spec/models/tree_spec.rb @@ -2,69 +2,58 @@ require 'spec_helper' -RSpec.describe Tree do - let_it_be(:repository) { create(:project, :repository).repository } - - let(:sha) { repository.root_ref } - +RSpec.describe Tree, feature_category: :source_code_management do subject(:tree) { described_class.new(repository, '54fcc214') } - describe '#readme' do - before do - stub_const('FakeBlob', Class.new) - FakeBlob.class_eval do - attr_reader :name + let_it_be(:repository) { create(:project, :repository).repository } - def initialize(name) - @name = name - end + describe '#readme' do + subject { tree.readme } - def readme? - name =~ /^readme/i - end - end + before do + allow(tree).to receive(:blobs).and_return(files) end - it 'returns nil when repository does not contains a README file' do - files = [FakeBlob.new('file'), FakeBlob.new('license'), FakeBlob.new('copying')] - expect(subject).to receive(:blobs).and_return(files) + context 'when repository does not contains a README file' do + let(:files) { [fake_blob('file'), fake_blob('license'), fake_blob('copying')] } - expect(subject.readme).to eq nil + it { is_expected.to be_nil } end - it 'returns nil when repository does not contains a previewable README file' do - files = [FakeBlob.new('file'), FakeBlob.new('README.pages'), FakeBlob.new('README.png')] - expect(subject).to receive(:blobs).and_return(files) + context 'when repository does not contains a previewable README file' do + let(:files) { [fake_blob('file'), fake_blob('README.pages'), fake_blob('README.png')] } - expect(subject.readme).to eq nil + it { is_expected.to be_nil } end - it 'returns README when repository contains a previewable README file' do - files = [FakeBlob.new('README.png'), FakeBlob.new('README'), FakeBlob.new('file')] - expect(subject).to receive(:blobs).and_return(files) + context 'when repository contains a previewable README file' do + let(:files) { [fake_blob('README.png'), fake_blob('README'), fake_blob('file')] } - expect(subject.readme.name).to eq 'README' + it { is_expected.to have_attributes(name: 'README') } end - it 'returns first previewable README when repository contains more than one' do - files = [FakeBlob.new('file'), FakeBlob.new('README.md'), FakeBlob.new('README.asciidoc')] - expect(subject).to receive(:blobs).and_return(files) + context 'when repository contains more than one README file' do + let(:files) { [fake_blob('file'), fake_blob('README.md'), fake_blob('README.asciidoc')] } - expect(subject.readme.name).to eq 'README.md' - end + it 'returns first previewable README' do + is_expected.to have_attributes(name: 'README.md') + end - it 'returns first plain text README when repository contains more than one' do - files = [FakeBlob.new('file'), FakeBlob.new('README'), FakeBlob.new('README.txt')] - expect(subject).to receive(:blobs).and_return(files) + context 'when only plain-text READMEs' do + let(:files) { [fake_blob('file'), fake_blob('README'), fake_blob('README.txt')] } - expect(subject.readme.name).to eq 'README' + it 'returns first plain text README' do + is_expected.to have_attributes(name: 'README') + end + end end - it 'prioritizes previewable README file over one in plain text' do - files = [FakeBlob.new('file'), FakeBlob.new('README'), FakeBlob.new('README.md')] - expect(subject).to receive(:blobs).and_return(files) + context 'when the repository has a previewable and plain text READMEs' do + let(:files) { [fake_blob('file'), fake_blob('README'), fake_blob('README.md')] } - expect(subject.readme.name).to eq 'README.md' + it 'prefers previewable README file' do + is_expected.to have_attributes(name: 'README.md') + end end end @@ -73,4 +62,10 @@ RSpec.describe Tree do it { is_expected.to be_an_instance_of(Gitaly::PaginationCursor) } end + + private + + def fake_blob(name) + instance_double(Gitlab::Git::Blob, name: name) + end end |