Read about our upcoming Code of Conduct on this issue

labels_helper_spec.rb 2.57 KB
Newer Older
1
2
3
require 'spec_helper'

describe LabelsHelper do
Robert Speicher's avatar
Robert Speicher committed
4
5
  describe 'link_to_label' do
    let(:project) { create(:empty_project) }
6
    let(:label) { create(:label, project: project) }
Robert Speicher's avatar
Robert Speicher committed
7

8
9
    context 'without subject' do
      it "uses the label's project" do
10
        expect(link_to_label(label)).to match %r{<a href="/#{label.project.path_with_namespace}/issues\?label_name%5B%5D=#{label.name}">.*</a>}
Robert Speicher's avatar
Robert Speicher committed
11
12
13
      end
    end

14
15
16
17
18
19
    context 'with a project as subject' do
      let(:namespace) { build(:namespace, name: 'foo3') }
      let(:another_project) { build(:empty_project, namespace: namespace, name: 'bar3') }

      it 'links to project issues page' do
        expect(link_to_label(label, subject: another_project)).to match %r{<a href="/foo3/bar3/issues\?label_name%5B%5D=#{label.name}">.*</a>}
Robert Speicher's avatar
Robert Speicher committed
20
21
22
      end
    end

23
24
    context 'with a group as subject' do
      let(:group) { build(:group, name: 'bar') }
Robert Speicher's avatar
Robert Speicher committed
25

26
27
      it 'links to group issues page' do
        expect(link_to_label(label, subject: group)).to match %r{<a href="/groups/bar/issues\?label_name%5B%5D=#{label.name}">.*</a>}
Robert Speicher's avatar
Robert Speicher committed
28
      end
29
    end
Robert Speicher's avatar
Robert Speicher committed
30

31
32
33
34
    context 'with a type argument' do
      ['issue', :issue, 'merge_request', :merge_request].each do |type|
        context "set to #{type}" do
          it 'links to correct page' do
35
            expect(link_to_label(label, type: type)).to match %r{<a href="/#{label.project.path_with_namespace}/#{type.to_s.pluralize}\?label_name%5B%5D=#{label.name}">.*</a>}
36
37
          end
        end
Robert Speicher's avatar
Robert Speicher committed
38
39
40
      end
    end

Rémy Coutable's avatar
Rémy Coutable committed
41
42
    context 'with a tooltip argument' do
      context 'set to false' do
43
44
        it 'does not include the has-tooltip class' do
          expect(link_to_label(label, tooltip: false)).not_to match %r{has-tooltip}
Rémy Coutable's avatar
Rémy Coutable committed
45
46
47
48
        end
      end
    end

Robert Speicher's avatar
Robert Speicher committed
49
50
51
52
53
54
55
56
57
58
    context 'with block' do
      it 'passes the block to link_to' do
        link = link_to_label(label) { 'Foo' }
        expect(link).to match('Foo')
      end
    end

    context 'without block' do
      it 'uses render_colored_label as the link content' do
        expect(self).to receive(:render_colored_label).
Rémy Coutable's avatar
Rémy Coutable committed
59
          with(label, tooltip: true).and_return('Foo')
Robert Speicher's avatar
Robert Speicher committed
60
61
62
63
64
65
66
67
68
69
70
71
72
        expect(link_to_label(label)).to match('Foo')
      end
    end
  end

  describe 'text_color_for_bg' do
    it 'uses light text on dark backgrounds' do
      expect(text_color_for_bg('#222E2E')).to eq('#FFFFFF')
    end

    it 'uses dark text on light backgrounds' do
      expect(text_color_for_bg('#EEEEEE')).to eq('#333333')
    end
73
74
75
76
77

    it 'supports RGB triplets' do
      expect(text_color_for_bg('#FFF')).to eq '#333333'
      expect(text_color_for_bg('#000')).to eq '#FFFFFF'
    end
Robert Speicher's avatar
Robert Speicher committed
78
  end
79
end