require "spec_helper" describe LabelsHelper do describe "#show_label_issuables_link?" do shared_examples "a valid response to show_label_issuables_link?" do |issuables_type, when_enabled = true, when_disabled = false| let(:context_project) { project } context "when asking for a #{issuables_type} link" do subject { show_label_issuables_link?(label, issuables_type, project: context_project) } context "when #{issuables_type} are enabled for the project" do let(:project) { create(:project, :"#{issuables_type}_access_level" => ProjectFeature::ENABLED) } it { is_expected.to be(when_enabled) } end context "when #{issuables_type} are disabled for the project" do let(:project) { create(:project, :public, :"#{issuables_type}_access_level" => ProjectFeature::DISABLED) } it { is_expected.to be(when_disabled) } end end end context "with a project label" do let(:label) { create(:label, project: project, title: "bug") } context "when asking for an issue link" do it_behaves_like "a valid response to show_label_issuables_link?", :issues end context "when asking for a merge requests link" do it_behaves_like "a valid response to show_label_issuables_link?", :merge_requests end end context "with a group label" do set(:group) { create(:group) } let(:label) { create(:group_label, group: group, title: "bug") } context "when asking for an issue link" do context "in the context of a project" do it_behaves_like "a valid response to show_label_issuables_link?", :issues, true, true end context "in the context of a group" do let(:context_project) { nil } it_behaves_like "a valid response to show_label_issuables_link?", :issues, true, true end end context "when asking for a merge requests link" do context "in the context of a project" do it_behaves_like "a valid response to show_label_issuables_link?", :merge_requests, true, true end context "in the context of a group" do let(:context_project) { nil } it_behaves_like "a valid response to show_label_issuables_link?", :merge_requests, true, true end end end end describe "link_to_label" do let(:project) { create(:project) } let(:label) { create(:label, project: project) } context "without subject" do it "uses the label's project" do expect(link_to_label(label)).to match %r{.*} end end context "with a project as subject" do let(:namespace) { build(:namespace, name: "foo3") } let(:another_project) { build(:project, namespace: namespace, name: "bar3") } it "links to project issues page" do expect(link_to_label(label, subject: another_project)).to match %r{.*} end end context "with a group as subject" do let(:group) { build(:group, name: "bar") } it "links to group issues page" do expect(link_to_label(label, subject: group)).to match %r{.*} end end 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 expect(link_to_label(label, type: type)).to match %r{.*} end end end end context "with a tooltip argument" do context "set to false" do it "does not include the has-tooltip class" do expect(link_to_label(label, tooltip: false)).not_to match /has-tooltip/ end end end 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) .with(label, tooltip: true).and_return("Foo") 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 it "supports RGB triplets" do expect(text_color_for_bg("#FFF")).to eq "#333333" expect(text_color_for_bg("#000")).to eq "#FFFFFF" end end describe "create_label_title" do set(:group) { create(:group) } context "with a group as subject" do it 'returns "Create group label"' do expect(create_label_title(group)).to eq "Create group label" end end context "with a project as subject" do set(:project) { create(:project, namespace: group) } it 'returns "Create project label"' do expect(create_label_title(project)).to eq "Create project label" end end context "with no subject" do it 'returns "Create new label"' do expect(create_label_title(nil)).to eq "Create new label" end end end describe "manage_labels_title" do set(:group) { create(:group) } context "with a group as subject" do it 'returns "Manage group labels"' do expect(manage_labels_title(group)).to eq "Manage group labels" end end context "with a project as subject" do set(:project) { create(:project, namespace: group) } it 'returns "Manage project labels"' do expect(manage_labels_title(project)).to eq "Manage project labels" end end context "with no subject" do it 'returns "Manage labels"' do expect(manage_labels_title(nil)).to eq "Manage labels" end end end describe "view_labels_title" do set(:group) { create(:group) } context "with a group as subject" do it 'returns "View group labels"' do expect(view_labels_title(group)).to eq "View group labels" end end context "with a project as subject" do set(:project) { create(:project, namespace: group) } it 'returns "View project labels"' do expect(view_labels_title(project)).to eq "View project labels" end end context "with no subject" do it 'returns "View labels"' do expect(view_labels_title(nil)).to eq "View labels" end end end describe "labels_filter_path" do let(:group) { create(:group) } let(:project) { create(:project) } it "links to the dashboard labels page" do expect(labels_filter_path).to eq(dashboard_labels_path) end it "links to the group labels page" do assign(:group, group) expect(helper.labels_filter_path).to eq(group_labels_path(group)) end it "links to the project labels page" do assign(:project, project) expect(helper.labels_filter_path).to eq(project_labels_path(project)) end it "supports json format" do expect(labels_filter_path(format: :json)).to eq(dashboard_labels_path(format: :json)) end end describe "labels_sorted_by_title" do it "sorts labels alphabetically" do label1 = double(:label, title: "a") label2 = double(:label, title: "B") label3 = double(:label, title: "c") label4 = double(:label, title: "D") labels = [label1, label2, label3, label4] expect(labels_sorted_by_title(labels)) .to match_array([label2, label4, label1, label3]) end end end