diff options
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/hooks/web_hook_spec.rb | 4 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 53 |
2 files changed, 55 insertions, 2 deletions
diff --git a/spec/models/hooks/web_hook_spec.rb b/spec/models/hooks/web_hook_spec.rb index dd954e08156..290cf500852 100644 --- a/spec/models/hooks/web_hook_spec.rb +++ b/spec/models/hooks/web_hook_spec.rb @@ -130,11 +130,11 @@ RSpec.describe WebHook do end describe '#destroy' do - it 'cascades to web_hook_logs' do + it 'does not cascade to web_hook_logs' do web_hook = create(:project_hook) create_list(:web_hook_log, 3, web_hook: web_hook) - expect { web_hook.destroy! }.to change(web_hook.web_hook_logs, :count).by(-3) + expect { web_hook.destroy! }.not_to change(web_hook.web_hook_logs, :count) end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index d40c78b5b60..32639b3e7d2 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -5077,4 +5077,57 @@ RSpec.describe MergeRequest, factory_default: :keep do expect(assignees).to match_array([subject.merge_request_assignees[0]]) end end + + describe '#recent_diff_head_shas' do + let_it_be(:merge_request_with_diffs) do + params = { + target_project: project, + source_project: project, + target_branch: 'master', + source_branch: 'feature' + } + + create(:merge_request, params).tap do |mr| + 4.times { mr.merge_request_diffs.create! } + mr.create_merge_head_diff + end + end + + let(:shas) do + # re-find to avoid caching the association + described_class.find(merge_request_with_diffs.id).merge_request_diffs.order(id: :desc).pluck(:head_commit_sha) + end + + shared_examples 'correctly sorted and limited diff_head_shas' do + it 'has up to MAX_RECENT_DIFF_HEAD_SHAS, ordered most recent first' do + stub_const('MergeRequest::MAX_RECENT_DIFF_HEAD_SHAS', 3) + + expect(subject.recent_diff_head_shas).to eq(shas.first(3)) + end + + it 'supports limits' do + expect(subject.recent_diff_head_shas(2)).to eq(shas.first(2)) + end + end + + context 'when the association is not loaded' do + subject(:mr) { merge_request_with_diffs } + + include_examples 'correctly sorted and limited diff_head_shas' + end + + context 'when the association is loaded' do + subject(:mr) do + described_class.where(id: merge_request_with_diffs.id).preload(:merge_request_diffs).first + end + + include_examples 'correctly sorted and limited diff_head_shas' + + it 'does not issue any queries' do + expect(subject).to be_a(described_class) # preload here + + expect { subject.recent_diff_head_shas }.not_to exceed_query_limit(0) + end + end + end end |