merge_requests_finder_spec.rb 6.8 KB
Newer Older
1 2 3
require 'spec_helper'

describe MergeRequestsFinder do
B
Bob Van Landuyt 已提交
4 5
  include ProjectForksHelper

6
  let(:user)  { create :user }
7
  let(:user2) { create :user }
8

9 10 11
  let(:group) { create(:group) }
  let(:subgroup) { create(:group, parent: group) }
  let(:project1) { create(:project, :public, group: group) }
B
Bob Van Landuyt 已提交
12 13 14 15 16 17
  let(:project2) { fork_project(project1, user) }
  let(:project3) do
    p = fork_project(project1, user)
    p.update!(archived: true)
    p
  end
18
  let(:project4) { create(:project, :public, group: subgroup) }
19

20
  let!(:merge_request1) { create(:merge_request, :simple, author: user, source_project: project2, target_project: project1) }
21
  let!(:merge_request2) { create(:merge_request, :conflict, author: user, source_project: project2, target_project: project1, state: 'closed') }
22
  let!(:merge_request3) { create(:merge_request, :simple, author: user, source_project: project2, target_project: project2) }
23
  let!(:merge_request4) { create(:merge_request, :simple, author: user, source_project: project3, target_project: project3) }
24
  let!(:merge_request5) { create(:merge_request, :simple, author: user, source_project: project4, target_project: project4) }
25 26

  before do
27 28 29 30
    project1.add_master(user)
    project2.add_developer(user)
    project3.add_developer(user)
    project2.add_developer(user2)
31
    project4.add_developer(user)
32 33
  end

34
  describe "#execute" do
35
    it 'filters by scope' do
36
      params = { scope: 'authored', state: 'opened' }
37
      merge_requests = described_class.new(user, params).execute
38
      expect(merge_requests.size).to eq(4)
39 40
    end

41
    it 'filters by project' do
42
      params = { project_id: project1.id, scope: 'authored', state: 'opened' }
43
      merge_requests = described_class.new(user, params).execute
44
      expect(merge_requests.size).to eq(1)
45
    end
46

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
    it 'filters by group' do
      params = { group_id: group.id }

      merge_requests = described_class.new(user, params).execute

      expect(merge_requests.size).to eq(2)
    end

    it 'filters by group including subgroups', :nested_groups do
      params = { group_id: group.id, include_subgroups: true }

      merge_requests = described_class.new(user, params).execute

      expect(merge_requests.size).to eq(3)
    end

63 64
    it 'filters by non_archived' do
      params = { non_archived: true }
65
      merge_requests = described_class.new(user, params).execute
66
      expect(merge_requests.size).to eq(4)
67
    end
M
mhasbini 已提交
68 69 70 71

    it 'filters by iid' do
      params = { project_id: project1.id, iids: merge_request1.iid }

72
      merge_requests = described_class.new(user, params).execute
M
mhasbini 已提交
73 74 75

      expect(merge_requests).to contain_exactly(merge_request1)
    end
76

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
    it 'filters by source branch' do
      params = { source_branch: merge_request2.source_branch }

      merge_requests = described_class.new(user, params).execute

      expect(merge_requests).to contain_exactly(merge_request2)
    end

    it 'filters by target branch' do
      params = { target_branch: merge_request2.target_branch }

      merge_requests = described_class.new(user, params).execute

      expect(merge_requests).to contain_exactly(merge_request2)
    end

F
Felipe Artur 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
    context 'filtering by group milestone' do
      let!(:group) { create(:group, :public) }
      let(:group_milestone) { create(:milestone, group: group) }
      let!(:group_member) { create(:group_member, group: group, user: user) }
      let(:params) { { milestone_title: group_milestone.title } }

      before do
        project2.update(namespace: group)
        merge_request2.update(milestone: group_milestone)
        merge_request3.update(milestone: group_milestone)
      end

      it 'returns issues assigned to that group milestone' do
        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(merge_request2, merge_request3)
      end
    end

112
    context 'filtering by created_at/updated_at' do
113
      let(:new_project) { create(:project, forked_from_project: project1) }
114 115 116 117 118 119

      let!(:new_merge_request) do
        create(:merge_request,
               :simple,
               author: user,
               created_at: 1.week.from_now,
120
               updated_at: 1.week.from_now,
121
               source_project: new_project,
122
               target_project: new_project)
123 124 125 126 127 128
      end

      let!(:old_merge_request) do
        create(:merge_request,
               :simple,
               author: user,
129
               source_branch: 'feature_1',
130
               created_at: 1.week.ago,
131
               updated_at: 1.week.ago,
132 133
               source_project: new_project,
               target_project: new_project)
134 135 136
      end

      before do
137
        new_project.add_master(user)
138 139 140
      end

      it 'filters by created_after' do
141
        params = { project_id: new_project.id, created_after: new_merge_request.created_at }
142 143 144 145 146 147 148

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(new_merge_request)
      end

      it 'filters by created_before' do
149
        params = { project_id: new_project.id, created_before: old_merge_request.created_at }
150 151 152 153 154

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(old_merge_request)
      end
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194

      it 'filters by created_after and created_before' do
        params = {
          project_id: new_project.id,
          created_after: old_merge_request.created_at,
          created_before: new_merge_request.created_at
        }

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(old_merge_request, new_merge_request)
      end

      it 'filters by updated_after' do
        params = { project_id: new_project.id, updated_after: new_merge_request.updated_at }

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(new_merge_request)
      end

      it 'filters by updated_before' do
        params = { project_id: new_project.id, updated_before: old_merge_request.updated_at }

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(old_merge_request)
      end

      it 'filters by updated_after and updated_before' do
        params = {
          project_id: new_project.id,
          updated_after: old_merge_request.updated_at,
          updated_before: new_merge_request.updated_at
        }

        merge_requests = described_class.new(user, params).execute

        expect(merge_requests).to contain_exactly(old_merge_request, new_merge_request)
      end
195
    end
196
  end
197 198 199 200 201

  describe '#row_count', :request_store do
    it 'returns the number of rows for the default state' do
      finder = described_class.new(user)

202
      expect(finder.row_count).to eq(4)
203 204 205 206 207 208 209 210
    end

    it 'returns the number of rows for a given state' do
      finder = described_class.new(user, state: 'closed')

      expect(finder.row_count).to eq(1)
    end
  end
211
end