summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/diff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-10-09 21:06:24 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-10-09 21:06:24 +0000
commit4b28d5ae770c6bd332283a3f13ceae06329c409b (patch)
treeae4d46e1d017002935fe75dc14cb3c108be12fae /spec/lib/gitlab/diff
parent41efffa17c67405ca5f5dac49d72be7872cee339 (diff)
downloadgitlab-ce-4b28d5ae770c6bd332283a3f13ceae06329c409b.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/diff')
-rw-r--r--spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb126
1 files changed, 126 insertions, 0 deletions
diff --git a/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb b/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb
new file mode 100644
index 00000000000..265c6260ca9
--- /dev/null
+++ b/spec/lib/gitlab/diff/file_collection/merge_request_diff_batch_spec.rb
@@ -0,0 +1,126 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Diff::FileCollection::MergeRequestDiffBatch do
+ let(:merge_request) { create(:merge_request) }
+ let(:batch_page) { 1 }
+ let(:batch_size) { 10 }
+ let(:diffable) { merge_request.merge_request_diff }
+ let(:diff_files_relation) { diffable.merge_request_diff_files }
+
+ subject do
+ described_class.new(diffable,
+ batch_page,
+ batch_size,
+ diff_options: nil)
+ end
+
+ let(:diff_files) { subject.diff_files }
+
+ describe 'initialize' do
+ it 'memoizes pagination_data' do
+ expect(subject.pagination_data).to eq(current_page: 1, next_page: 2, total_pages: 2)
+ end
+ end
+
+ describe '#diff_files' do
+ let(:batch_size) { 3 }
+ let(:paginated_rel) { diff_files_relation.page(batch_page).per(batch_size) }
+
+ let(:expected_batch_files) do
+ paginated_rel.map(&:new_path)
+ end
+
+ it 'returns paginated diff files' do
+ expect(diff_files.size).to eq(3)
+ end
+
+ it 'returns a valid instance of a DiffCollection' do
+ expect(diff_files).to be_a(Gitlab::Git::DiffCollection)
+ end
+
+ context 'first page' do
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'another page' do
+ let(:batch_page) { 2 }
+
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'nil batch_page' do
+ let(:batch_page) { nil }
+
+ it 'returns correct diff files' do
+ expected_batch_files =
+ diff_files_relation.page(described_class::DEFAULT_BATCH_PAGE).per(batch_size).map(&:new_path)
+
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'nil batch_size' do
+ let(:batch_size) { nil }
+
+ it 'returns correct diff files' do
+ expected_batch_files =
+ diff_files_relation.page(batch_page).per(described_class::DEFAULT_BATCH_SIZE).map(&:new_path)
+
+ expect(diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+
+ context 'invalid page' do
+ let(:batch_page) { 999 }
+
+ it 'returns correct diff files' do
+ expect(diff_files.map(&:new_path)).to be_empty
+ end
+ end
+
+ context 'last page' do
+ it 'returns correct diff files' do
+ last_page = paginated_rel.total_pages
+ collection = described_class.new(diffable,
+ last_page,
+ batch_size,
+ diff_options: nil)
+
+ expected_batch_files = diff_files_relation.page(last_page).per(batch_size).map(&:new_path)
+
+ expect(collection.diff_files.map(&:new_path)).to eq(expected_batch_files)
+ end
+ end
+ end
+
+ it_behaves_like 'unfoldable diff' do
+ subject do
+ described_class.new(merge_request.merge_request_diff,
+ batch_page,
+ batch_size,
+ diff_options: nil)
+ end
+ end
+
+ it_behaves_like 'diff statistics' do
+ let(:collection_default_args) do
+ { diff_options: {} }
+ end
+
+ let(:diffable) { merge_request.merge_request_diff }
+ let(:stub_path) { '.gitignore' }
+
+ subject do
+ described_class.new(merge_request.merge_request_diff,
+ batch_page,
+ batch_size,
+ collection_default_args)
+ end
+ end
+end