summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2016-06-07 11:57:09 +0100
committerSean McGivern <sean@gitlab.com>2016-06-07 14:01:30 +0100
commitee26c3cab4651c8876efc45b6a63539727e6a42e (patch)
treeda7df699ab6f78c39a562abe2307568f7c8dd7eb
parenta04897b76b00e4a099faf55e30443378928e28e1 (diff)
downloadgitlab-ce-ee26c3cab4651c8876efc45b6a63539727e6a42e.tar.gz
Fix label order by priority on labels pageissue_14189
-rw-r--r--app/models/label.rb4
-rw-r--r--spec/controllers/projects/labels_controller_spec.rb53
-rw-r--r--spec/features/projects/labels/update_prioritization_spec.rb9
3 files changed, 63 insertions, 3 deletions
diff --git a/app/models/label.rb b/app/models/label.rb
index 9760f1aefa9..49c352cc239 100644
--- a/app/models/label.rb
+++ b/app/models/label.rb
@@ -33,11 +33,11 @@ class Label < ActiveRecord::Base
scope :templates, -> { where(template: true) }
def self.prioritized
- where.not(priority: nil).reorder(:title)
+ where.not(priority: nil).reorder(:priority, :title)
end
def self.unprioritized
- where(priority: nil).reorder(:title)
+ where(priority: nil)
end
alias_attribute :name, :title
diff --git a/spec/controllers/projects/labels_controller_spec.rb b/spec/controllers/projects/labels_controller_spec.rb
new file mode 100644
index 00000000000..ab1dd34ed57
--- /dev/null
+++ b/spec/controllers/projects/labels_controller_spec.rb
@@ -0,0 +1,53 @@
+require 'spec_helper'
+
+describe Projects::LabelsController do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ before do
+ project.team << [user, :master]
+ sign_in(user)
+ end
+
+ describe 'GET #index' do
+ def create_label(attributes)
+ create(:label, attributes.merge(project: project))
+ end
+
+ before do
+ 15.times { |i| create_label(priority: (i % 3) + 1, title: "label #{15 - i}") }
+ 5.times { |i| create_label(title: "label #{100 - i}") }
+
+
+ get :index, namespace_id: project.namespace.to_param, project_id: project.to_param
+ end
+
+ context '@prioritized_labels' do
+ let(:prioritized_labels) { assigns(:prioritized_labels) }
+
+ it 'contains only prioritized labels' do
+ expect(prioritized_labels).to all(have_attributes(priority: a_value > 0))
+ end
+
+ it 'is sorted by priority, then label title' do
+ priorities_and_titles = prioritized_labels.pluck(:priority, :title)
+
+ expect(priorities_and_titles.sort).to eq(priorities_and_titles)
+ end
+ end
+
+ context '@labels' do
+ let(:labels) { assigns(:labels) }
+
+ it 'contains only unprioritized labels' do
+ expect(labels).to all(have_attributes(priority: nil))
+ end
+
+ it 'is sorted by label title' do
+ titles = labels.pluck(:title)
+
+ expect(titles.sort).to eq(titles)
+ end
+ end
+ end
+end
diff --git a/spec/features/projects/labels/update_prioritization_spec.rb b/spec/features/projects/labels/update_prioritization_spec.rb
index 2a0bf6548db..8550d279d09 100644
--- a/spec/features/projects/labels/update_prioritization_spec.rb
+++ b/spec/features/projects/labels/update_prioritization_spec.rb
@@ -55,7 +55,7 @@ feature 'Prioritize labels', feature: true do
end
end
- scenario 'user can sort prioritized labels', js: true do
+ scenario 'user can sort prioritized labels and persist across reloads', js: true do
bug = create(:label, title: 'bug', priority: 1)
wontfix = create(:label, title: 'wontfix', priority: 2)
@@ -75,6 +75,13 @@ feature 'Prioritize labels', feature: true do
expect(first('li')).to have_content('wontfix')
expect(page.all('li').last).to have_content('bug')
end
+
+ visit current_url
+
+ page.within('.prioritized-labels') do
+ expect(first('li')).to have_content('wontfix')
+ expect(page.all('li').last).to have_content('bug')
+ end
end
end