summaryrefslogtreecommitdiff
path: root/spec/lib/sidebars/projects/menus/merge_requests_menu_spec.rb
blob: 697f8a6d7c7b62a7d6cfa5fd093d9118d5f7235a (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
73
74
75
76
77
78
79
80
81
82
83
84
85
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Sidebars::Projects::Menus::MergeRequestsMenu, feature_category: :navigation do
  let_it_be(:project) { create(:project, :repository) }

  let(:user) { project.first_owner }
  let(:context) { Sidebars::Projects::Context.new(current_user: user, container: project) }

  subject { described_class.new(context) }

  it_behaves_like 'serializable as super_sidebar_menu_args' do
    let(:menu) { subject }
    let(:extra_attrs) do
      {
        item_id: :project_merge_request_list,
        sprite_icon: 'git-merge',
        pill_count: menu.pill_count,
        has_pill: menu.has_pill?,
        super_sidebar_parent: ::Sidebars::StaticMenu
      }
    end
  end

  describe '#render?' do
    context 'when repository is not present' do
      let(:project) { build(:project) }

      it 'returns false' do
        expect(subject.render?).to eq false
      end
    end

    context 'when repository is present' do
      context 'when user can read merge requests' do
        it 'returns true' do
          expect(subject.render?).to eq true
        end
      end

      context 'when user cannot read merge requests' do
        let(:user) { nil }

        it 'returns false' do
          expect(subject.render?).to eq false
        end
      end
    end
  end

  describe '#pill_count' do
    it 'returns zero when there are no open merge requests' do
      expect(subject.pill_count).to eq '0'
    end

    it 'memoizes the query' do
      subject.pill_count

      control = ActiveRecord::QueryRecorder.new do
        subject.pill_count
      end

      expect(control.count).to eq 0
    end

    context 'when there are open merge requests' do
      it 'returns the number of open merge requests' do
        create_list(:merge_request, 2, :unique_branches, source_project: project, author: user, state: :opened)
        create(:merge_request, source_project: project, state: :merged)

        expect(subject.pill_count).to eq '2'
      end
    end

    describe 'formatting' do
      it 'returns truncated digits for count value over 1000' do
        create_list(:merge_request, 1001, :unique_branches, source_project: project, author: user, state: :opened)
        create(:merge_request, source_project: project, state: :merged)

        expect(subject.pill_count).to eq('1k')
      end
    end
  end
end