summaryrefslogtreecommitdiff
path: root/spec/models/merge_request_diff_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/merge_request_diff_spec.rb')
-rw-r--r--spec/models/merge_request_diff_spec.rb36
1 files changed, 34 insertions, 2 deletions
diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb
index e02c71a1c6f..2c64201e84d 100644
--- a/spec/models/merge_request_diff_spec.rb
+++ b/spec/models/merge_request_diff_spec.rb
@@ -293,6 +293,7 @@ RSpec.describe MergeRequestDiff do
it 'does nothing with an empty diff' do
stub_external_diffs_setting(enabled: true)
MergeRequestDiffFile.where(merge_request_diff_id: diff.id).delete_all
+ diff.save! # update files_count
expect(diff).not_to receive(:update!)
@@ -675,8 +676,39 @@ RSpec.describe MergeRequestDiff do
end
describe '#files_count' do
- it 'returns number of diff files' do
- expect(diff_with_commits.files_count).to eq(diff_with_commits.merge_request_diff_files.count)
+ let_it_be(:merge_request) { create(:merge_request) }
+
+ let(:diff) { merge_request.merge_request_diff }
+ let(:actual_count) { diff.merge_request_diff_files.count }
+
+ it 'is set by default' do
+ expect(diff.read_attribute(:files_count)).to eq(actual_count)
+ end
+
+ it 'is set to the sentinel value if the actual value exceeds it' do
+ stub_const("#{described_class}::FILES_COUNT_SENTINEL", actual_count - 1)
+
+ diff.save! # update the files_count column with the stub in place
+
+ expect(diff.read_attribute(:files_count)).to eq(described_class::FILES_COUNT_SENTINEL)
+ end
+
+ it 'uses the cached count if present' do
+ diff.update_columns(files_count: actual_count + 1)
+
+ expect(diff.files_count).to eq(actual_count + 1)
+ end
+
+ it 'uses the actual count if nil' do
+ diff.update_columns(files_count: nil)
+
+ expect(diff.files_count).to eq(actual_count)
+ end
+
+ it 'uses the actual count if overflown' do
+ diff.update_columns(files_count: described_class::FILES_COUNT_SENTINEL)
+
+ expect(diff.files_count).to eq(actual_count)
end
end