diff options
Diffstat (limited to 'spec/models/blob_spec.rb')
-rw-r--r-- | spec/models/blob_spec.rb | 90 |
1 files changed, 74 insertions, 16 deletions
diff --git a/spec/models/blob_spec.rb b/spec/models/blob_spec.rb index 598c91a64fb..7d40843ca6c 100644 --- a/spec/models/blob_spec.rb +++ b/spec/models/blob_spec.rb @@ -68,28 +68,86 @@ RSpec.describe Blob do end end - context 'with project' do - let(:container) { create(:project, :repository) } - let(:same_container) { Project.find(container.id) } - let(:other_container) { create(:project, :repository) } + context 'when increase_diff_file_performance is turned off' do + before do + stub_feature_flags(increase_diff_file_performance: false) + end - it_behaves_like '.lazy checks' - end + context 'with project' do + let_it_be(:container) { create(:project, :repository) } + let_it_be(:same_container) { Project.find(container.id) } + let_it_be(:other_container) { create(:project, :repository) } - context 'with personal snippet' do - let(:container) { create(:personal_snippet, :repository) } - let(:same_container) { PersonalSnippet.find(container.id) } - let(:other_container) { create(:personal_snippet, :repository) } + it_behaves_like '.lazy checks' + end + + context 'with personal snippet' do + let_it_be(:container) { create(:personal_snippet, :repository) } + let_it_be(:same_container) { PersonalSnippet.find(container.id) } + let_it_be(:other_container) { create(:personal_snippet, :repository) } - it_behaves_like '.lazy checks' + it_behaves_like '.lazy checks' + end + + context 'with project snippet' do + let_it_be(:container) { create(:project_snippet, :repository) } + let_it_be(:same_container) { ProjectSnippet.find(container.id) } + let_it_be(:other_container) { create(:project_snippet, :repository) } + + it_behaves_like '.lazy checks' + end end - context 'with project snippet' do - let(:container) { create(:project_snippet, :repository) } - let(:same_container) { ProjectSnippet.find(container.id) } - let(:other_container) { create(:project_snippet, :repository) } + context 'when increase_diff_file_performance is turned on' do + context 'with project' do + let_it_be(:container) { create(:project, :repository) } + let_it_be(:same_container) { Project.find(container.id) } + let_it_be(:other_container) { create(:project, :repository) } + + it_behaves_like '.lazy checks' + + context 'when the blob size limit is different' do + it 'fetches all blobs for the same repository and same blob size limit when one is accessed' do + expect(container.repository).to receive(:blobs_at) + .with([[commit_id, 'CHANGELOG']], blob_size_limit: 10) + .once.and_call_original - it_behaves_like '.lazy checks' + expect(same_container.repository).to receive(:blobs_at) + .with([[commit_id, 'CONTRIBUTING.md'], [commit_id, 'README.md']], blob_size_limit: 20) + .once.and_call_original + + expect(other_container.repository).not_to receive(:blobs_at) + + changelog = described_class.lazy(container.repository, commit_id, 'CHANGELOG', blob_size_limit: 10) + contributing = described_class.lazy(same_container.repository, commit_id, 'CONTRIBUTING.md', + blob_size_limit: 20) + described_class.lazy(same_container.repository, commit_id, 'README.md', + blob_size_limit: 20) + + described_class.lazy(other_container.repository, commit_id, 'CHANGELOG', blob_size_limit: 30) + + # Access property so the values are loaded + changelog.id + contributing.id + end + end + end + + context 'with personal snippet' do + let_it_be(:container) { create(:personal_snippet, :repository) } + let_it_be(:same_container) { PersonalSnippet.find(container.id) } + let_it_be(:other_container) { create(:personal_snippet, :repository) } + + it_behaves_like '.lazy checks' + end + + context 'with project snippet' do + let_it_be(:container) { create(:project_snippet, :repository) } + let_it_be(:same_container) { ProjectSnippet.find(container.id) } + let_it_be(:other_container) { create(:project_snippet, :repository) } + + it_behaves_like '.lazy checks' + end end end |