From e8d2c2579383897a1dd7f9debd359abe8ae8373d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Jul 2021 09:55:51 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-1-stable-ee --- spec/finders/milestones_finder_spec.rb | 93 +++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 42 deletions(-) (limited to 'spec/finders/milestones_finder_spec.rb') diff --git a/spec/finders/milestones_finder_spec.rb b/spec/finders/milestones_finder_spec.rb index 6e486671132..8b26599cbfa 100644 --- a/spec/finders/milestones_finder_spec.rb +++ b/spec/finders/milestones_finder_spec.rb @@ -3,46 +3,68 @@ require 'spec_helper' RSpec.describe MilestonesFinder do - let(:now) { Time.now } - let(:group) { create(:group) } - let(:project_1) { create(:project, namespace: group) } - let(:project_2) { create(:project, namespace: group) } - let!(:milestone_1) { create(:milestone, group: group, title: 'one test', start_date: now - 1.day, due_date: now) } - let!(:milestone_2) { create(:milestone, group: group, start_date: now + 1.day, due_date: now + 2.days) } - let!(:milestone_3) { create(:milestone, project: project_1, state: 'active', start_date: now + 2.days, due_date: now + 3.days) } - let!(:milestone_4) { create(:milestone, project: project_2, state: 'active', start_date: now + 4.days, due_date: now + 5.days) } - - it 'returns milestones for projects' do - result = described_class.new(project_ids: [project_1.id, project_2.id], state: 'all').execute - - expect(result).to contain_exactly(milestone_3, milestone_4) - end + let_it_be(:now) { Date.current } + let_it_be(:group) { create(:group) } + let_it_be(:project_1) { create(:project, namespace: group) } + let_it_be(:project_2) { create(:project, namespace: group) } + let_it_be(:milestone_2) { create(:milestone, group: group, start_date: now + 1.day, due_date: now + 2.days) } + let_it_be(:milestone_4) { create(:milestone, project: project_2, state: 'active', start_date: now + 4.days, due_date: now + 5.days) } + + context 'without filters' do + let_it_be(:milestone_1) { create(:milestone, group: group, start_date: now - 1.day, due_date: now) } + let_it_be(:milestone_3) { create(:milestone, project: project_1, state: 'active', start_date: now + 2.days) } + let_it_be(:milestone_5) { create(:milestone, group: group, due_date: now - 2.days) } + + it 'returns milestones for projects' do + result = described_class.new(project_ids: [project_1.id, project_2.id], state: 'all').execute + + expect(result).to contain_exactly(milestone_3, milestone_4) + end - it 'returns milestones for groups' do - result = described_class.new(group_ids: group.id, state: 'all').execute + it 'returns milestones for groups' do + result = described_class.new(group_ids: group.id, state: 'all').execute - expect(result).to contain_exactly(milestone_1, milestone_2) - end - - context 'milestones for groups and project' do - let(:result) do - described_class.new(project_ids: [project_1.id, project_2.id], group_ids: group.id, state: 'all').execute + expect(result).to contain_exactly(milestone_5, milestone_1, milestone_2) end - it 'returns milestones for groups and projects' do - expect(result).to contain_exactly(milestone_1, milestone_2, milestone_3, milestone_4) + context 'milestones for groups and project' do + let(:extra_params) {{}} + let(:result) do + described_class.new({ project_ids: [project_1.id, project_2.id], group_ids: group.id, state: 'all' }.merge(extra_params)).execute + end + + it 'returns milestones for groups and projects' do + expect(result).to contain_exactly(milestone_5, milestone_1, milestone_2, milestone_3, milestone_4) + end + + it 'orders milestones by due date', :aggregate_failures do + expect(result.first).to eq(milestone_5) + expect(result.second).to eq(milestone_1) + expect(result.third).to eq(milestone_2) + end + + context 'when grouping and sorting by expired_last' do + let(:extra_params) { { sort: :expired_last_due_date_asc } } + + it 'current milestones are returned first, then milestones without due date followed by expired milestones, sorted by due date in ascending order' do + expect(result).to eq([milestone_1, milestone_2, milestone_4, milestone_3, milestone_5]) + end + end end - it 'orders milestones by due date' do - milestone = create(:milestone, group: group, due_date: now - 2.days) + describe '#find_by' do + it 'finds a single milestone' do + finder = described_class.new(project_ids: [project_1.id], state: 'all') - expect(result.first).to eq(milestone) - expect(result.second).to eq(milestone_1) - expect(result.third).to eq(milestone_2) + expect(finder.find_by(iid: milestone_3.iid)).to eq(milestone_3) + end end end context 'with filters' do + let_it_be(:milestone_1) { create(:milestone, group: group, state: 'closed', title: 'one test', start_date: now - 1.day, due_date: now) } + let_it_be(:milestone_3) { create(:milestone, project: project_1, state: 'closed', start_date: now + 2.days, due_date: now + 3.days) } + let(:params) do { project_ids: [project_1.id, project_2.id], @@ -51,11 +73,6 @@ RSpec.describe MilestonesFinder do } end - before do - milestone_1.close - milestone_3.close - end - it 'filters by id' do params[:ids] = [milestone_1.id, milestone_2.id] @@ -118,12 +135,4 @@ RSpec.describe MilestonesFinder do end end end - - describe '#find_by' do - it 'finds a single milestone' do - finder = described_class.new(project_ids: [project_1.id], state: 'all') - - expect(finder.find_by(iid: milestone_3.iid)).to eq(milestone_3) - end - end end -- cgit v1.2.3