From 6b4da27e97a39448d363d453dce81cce574af9b5 Mon Sep 17 00:00:00 2001
From: Nick Thomas <nick@gitlab.com>
Date: Fri, 7 Jul 2017 13:54:49 +0100
Subject: [PATCH] Fix dashboard labels dropdown

---
 .../dashboard/labels_controller.rb            |  9 +++++--
 app/models/global_label.rb                    |  2 +-
 app/serializers/label_entity.rb               |  3 ++-
 .../34590-fix-dashboard-labels-dropdown.yml   |  4 +++
 .../dashboard/labels_controller_spec.rb       | 25 +++++++++++++++++++
 5 files changed, 39 insertions(+), 4 deletions(-)
 create mode 100644 changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml
 create mode 100644 spec/controllers/dashboard/labels_controller_spec.rb

diff --git a/app/controllers/dashboard/labels_controller.rb b/app/controllers/dashboard/labels_controller.rb
index dd1d46a68c7..9dcb3a0eb6d 100644
--- a/app/controllers/dashboard/labels_controller.rb
+++ b/app/controllers/dashboard/labels_controller.rb
@@ -1,9 +1,14 @@
 class Dashboard::LabelsController < Dashboard::ApplicationController
   def index
-    labels = LabelsFinder.new(current_user).execute
-
     respond_to do |format|
       format.json { render json: LabelSerializer.new.represent_appearance(labels) }
     end
   end
+
+  def labels
+    finder_params = { project_ids: projects.select(:id) }
+    labels = LabelsFinder.new(current_user, finder_params).execute
+
+    GlobalLabel.build_collection(labels)
+  end
 end
diff --git a/app/models/global_label.rb b/app/models/global_label.rb
index 698a7bbd327..2a1b7564962 100644
--- a/app/models/global_label.rb
+++ b/app/models/global_label.rb
@@ -2,7 +2,7 @@ class GlobalLabel
   attr_accessor :title, :labels
   alias_attribute :name, :title
 
-  delegate :color, :description, to: :@first_label
+  delegate :color, :text_color, :description, to: :@first_label
 
   def for_display
     @first_label
diff --git a/app/serializers/label_entity.rb b/app/serializers/label_entity.rb
index ad565654342..4452161051e 100644
--- a/app/serializers/label_entity.rb
+++ b/app/serializers/label_entity.rb
@@ -1,5 +1,6 @@
 class LabelEntity < Grape::Entity
-  expose :id
+  expose :id, if: ->(label, _) { !label.is_a?(GlobalLabel) }
+
   expose :title
   expose :color
   expose :description
diff --git a/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml b/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml
new file mode 100644
index 00000000000..11c01d28dc2
--- /dev/null
+++ b/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml
@@ -0,0 +1,4 @@
+---
+title: Fix dashboard labels dropdown
+merge_request: 12708
+author:
diff --git a/spec/controllers/dashboard/labels_controller_spec.rb b/spec/controllers/dashboard/labels_controller_spec.rb
new file mode 100644
index 00000000000..2b63933008f
--- /dev/null
+++ b/spec/controllers/dashboard/labels_controller_spec.rb
@@ -0,0 +1,25 @@
+require 'spec_helper'
+
+describe Dashboard::LabelsController do
+  let(:project) { create(:empty_project) }
+  let(:user)    { create(:user) }
+  let!(:label)  { create(:label, project: project) }
+
+  before do
+    sign_in(user)
+    project.add_reporter(user)
+  end
+
+  describe "#index" do
+    let!(:unrelated_label) { create(:label, project: create(:empty_project, :public)) }
+
+    it 'returns global labels for projects the user has a relationship with' do
+      get :index, format: :json
+
+      expect(json_response).to be_kind_of(Array)
+      expect(json_response.size).to eq(1)
+      expect(json_response[0]["id"]).to be_nil
+      expect(json_response[0]["title"]).to eq(label.title)
+    end
+  end
+end
-- 
GitLab