BigW Consortium Gitlab

issuables_helper_spec.rb 4.92 KB
Newer Older
1 2
require 'spec_helper'

3
describe IssuablesHelper do
4 5 6
  let(:label)  { build_stubbed(:label) }
  let(:label2) { build_stubbed(:label) }

7
  describe '#issuable_labels_tooltip' do
8 9 10 11 12 13 14 15
    it 'returns label text' do
      expect(issuable_labels_tooltip([label])).to eq(label.title)
    end

    it 'returns label text' do
      expect(issuable_labels_tooltip([label, label2], limit: 1)).to eq("#{label.title}, and 1 more")
    end
  end
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

  describe '#issuables_state_counter_text' do
    let(:user) { create(:user) }

    describe 'state text' do
      before do
        allow(helper).to receive(:issuables_count_for_state).and_return(42)
      end

      it 'returns "Open" when state is :opened' do
        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')
      end

      it 'returns "Closed" when state is :closed' do
        expect(helper.issuables_state_counter_text(:issues, :closed)).
          to eq('<span>Closed</span> <span class="badge">42</span>')
      end

      it 'returns "Merged" when state is :merged' do
        expect(helper.issuables_state_counter_text(:merge_requests, :merged)).
          to eq('<span>Merged</span> <span class="badge">42</span>')
      end

      it 'returns "All" when state is :all' do
        expect(helper.issuables_state_counter_text(:merge_requests, :all)).
          to eq('<span>All</span> <span class="badge">42</span>')
      end
    end

    describe 'counter caching based on issuable type and params', :caching do
      let(:params) do
        {
49 50 51 52 53 54 55 56 57 58 59 60
          scope: 'created-by-me',
          state: 'opened',
          utf8: '✓',
          author_id: '11',
          assignee_id: '18',
          label_name: ['bug', 'discussion', 'documentation'],
          milestone_title: 'v4.0',
          sort: 'due_date_asc',
          namespace_id: 'gitlab-org',
          project_id: 'gitlab-ce',
          page: 2
        }.with_indifferent_access
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
      end

      it 'returns the cached value when called for the same issuable type & with the same params' do
        expect(helper).to receive(:params).twice.and_return(params)
        expect(helper).to receive(:issuables_count_for_state).with(:issues, :opened).and_return(42)

        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')

        expect(helper).not_to receive(:issuables_count_for_state)

        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')
      end

76 77 78 79 80 81 82 83 84
      it 'does not take some keys into account in the cache key' do
        expect(helper).to receive(:params).and_return({
          author_id: '11',
          state: 'foo',
          sort: 'foo',
          utf8: 'foo',
          page: 'foo'
        }.with_indifferent_access)
        expect(helper).to receive(:issuables_count_for_state).with(:issues, :opened).and_return(42)
85

86 87
        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')
88

89 90 91 92 93 94 95 96
        expect(helper).to receive(:params).and_return({
          author_id: '11',
          state: 'bar',
          sort: 'bar',
          utf8: 'bar',
          page: 'bar'
        }.with_indifferent_access)
        expect(helper).not_to receive(:issuables_count_for_state)
97

98 99
        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')
100 101
      end

102
      it 'does not take params order into account in the cache key' do
103 104 105 106 107 108 109 110 111 112 113 114 115 116
        expect(helper).to receive(:params).and_return('author_id' => '11', 'state' => 'opened')
        expect(helper).to receive(:issuables_count_for_state).with(:issues, :opened).and_return(42)

        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')

        expect(helper).to receive(:params).and_return('state' => 'opened', 'author_id' => '11')
        expect(helper).not_to receive(:issuables_count_for_state)

        expect(helper.issuables_state_counter_text(:issues, :opened)).
          to eq('<span>Open</span> <span class="badge">42</span>')
      end
    end
  end
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

  describe '#issuable_filter_present?' do
    it 'returns true when any key is present' do
      allow(helper).to receive(:params).and_return(
        ActionController::Parameters.new(milestone_title: 'Velit consectetur asperiores natus delectus.',
                                         project_id: 'gitlabhq',
                                         scope: 'all')
      )

      expect(helper.issuable_filter_present?).to be_truthy
    end

    it 'returns false when no key is present' do
      allow(helper).to receive(:params).and_return(
        ActionController::Parameters.new(project_id: 'gitlabhq',
                                         scope: 'all')
      )

      expect(helper.issuable_filter_present?).to be_falsey
    end
  end
138
end