summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/services/boards/issues_list_service.rb
blob: 75733c774ef06c1337fdda50d0ba7918ef841d61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# frozen_string_literal: true

shared_examples 'issues list service' do
  it 'delegates search to IssuesFinder' do
    params = { board_id: board.id, id: list1.id }

    expect_any_instance_of(IssuesFinder).to receive(:execute).once.and_call_original

    described_class.new(parent, user, params).execute
  end

  context '#metadata' do
    it 'returns issues count for list' do
      params = { board_id: board.id, id: list1.id }

      metadata = described_class.new(parent, user, params).metadata

      expect(metadata[:size]).to eq(3)
    end
  end

  context 'issues are ordered by priority' do
    it 'returns opened issues when list_id is missing' do
      params = { board_id: board.id }

      issues = described_class.new(parent, user, params).execute

      expect(issues).to eq [opened_issue2, reopened_issue1, opened_issue1]
    end

    it 'returns opened issues when listing issues from Backlog' do
      params = { board_id: board.id, id: backlog.id }

      issues = described_class.new(parent, user, params).execute

      expect(issues).to eq [opened_issue2, reopened_issue1, opened_issue1]
    end

    it 'returns closed issues when listing issues from Closed' do
      params = { board_id: board.id, id: closed.id }

      issues = described_class.new(parent, user, params).execute

      expect(issues).to eq [closed_issue4, closed_issue2, closed_issue5, closed_issue3, closed_issue1]
    end

    it 'returns opened issues that have label list applied when listing issues from a label list' do
      params = { board_id: board.id, id: list1.id }

      issues = described_class.new(parent, user, params).execute

      expect(issues).to eq [list1_issue3, list1_issue1, list1_issue2]
    end
  end

  context 'with list that does not belong to the board' do
    it 'raises an error' do
      list = create(:list)
      service = described_class.new(parent, user, board_id: board.id, id: list.id)

      expect { service.execute }.to raise_error(ActiveRecord::RecordNotFound)
    end
  end

  context 'with invalid list id' do
    it 'raises an error' do
      service = described_class.new(parent, user, board_id: board.id, id: nil)

      expect { service.execute }.to raise_error(ActiveRecord::RecordNotFound)
    end
  end
end