1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe MergeRequest::MetricsFinder do 6 let_it_be(:current_user) { create(:user) } 7 let_it_be(:project) { create(:project, :repository) } 8 let_it_be(:merge_request_not_merged) { create(:merge_request, :unique_branches, source_project: project) } 9 let_it_be(:merged_at) { Time.new(2020, 5, 1) } 10 let_it_be(:merge_request_merged) do 11 create(:merge_request, :unique_branches, :merged, source_project: project).tap do |mr| 12 mr.metrics.update!(merged_at: merged_at) 13 end 14 end 15 16 let(:params) do 17 { 18 target_project: project, 19 merged_after: merged_at - 10.days, 20 merged_before: merged_at + 10.days 21 } 22 end 23 24 subject { described_class.new(current_user, params).execute.to_a } 25 26 context 'when target project is missing' do 27 before do 28 params.delete(:target_project) 29 end 30 31 it { is_expected.to be_empty } 32 end 33 34 context 'when the user is not part of the project' do 35 it { is_expected.to be_empty } 36 end 37 38 context 'when user is part of the project' do 39 before do 40 project.add_developer(current_user) 41 end 42 43 it 'returns merge request records' do 44 is_expected.to eq([merge_request_merged.metrics]) 45 end 46 47 it 'excludes not merged records' do 48 is_expected.not_to eq([merge_request_not_merged.metrics]) 49 end 50 51 context 'when only merged_before is given' do 52 before do 53 params.delete(:merged_after) 54 end 55 56 it { is_expected.to eq([merge_request_merged.metrics]) } 57 end 58 59 context 'when only merged_after is given' do 60 before do 61 params.delete(:merged_before) 62 end 63 64 it { is_expected.to eq([merge_request_merged.metrics]) } 65 end 66 67 context 'when no records matching the date range' do 68 before do 69 params[:merged_before] = merged_at - 1.year 70 params[:merged_after] = merged_at - 2.years 71 end 72 73 it { is_expected.to be_empty } 74 end 75 end 76end 77