Commit 7c520c78 authored by Rubén Dávila's avatar Rubén Dávila

Make sorting preference reusable for all projects.

parent eccaa099
......@@ -409,13 +409,22 @@ class ApplicationController < ActionController::Base
private
def set_default_sort
# Use the controller name so we have a distinct cookie for Issues, MRs and Dashboard
cookie_suffix = "_sort_#{params[:controller].underscore}"
key = if is_a_listing_page_for?('issues')
'issues_sort'
elsif is_a_listing_page_for?('merge_requests')
'merge_requests_sort'
end
key = "#{(@project || @group || current_user).cookie_key}#{cookie_suffix}"
cookies[key] = params[:sort] if key && params[:sort].present?
params[:sort] = cookies[key] if key
params[:sort] ||= 'id_desc'
end
def is_a_listing_page_for?(page_type)
controller_name, action_name = params.values_at(:controller, :action)
cookies[key] ||= 'id_desc'
cookies[key] = params[:sort] if params[:sort].present?
params[:sort] = cookies[key]
(controller_name == "projects/#{page_type}" && action_name == 'index') ||
(controller_name == 'groups' && action_name == page_type) ||
(controller_name == 'dashboard' && action_name == page_type)
end
end
module CookieHelpers
def cookie_key
"#{model_name.singular}_#{id}"
end
end
......@@ -19,7 +19,6 @@ require 'file_size_validator'
class Group < Namespace
include Gitlab::ConfigHelper
include Referable
include CookieHelpers
has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember'
alias_method :members, :group_members
......
......@@ -51,7 +51,6 @@ class Project < ActiveRecord::Base
include AfterCommitQueue
include CaseSensitivity
include TokenAuthenticatable
include CookieHelpers
extend Gitlab::ConfigHelper
......
......@@ -73,7 +73,6 @@ class User < ActiveRecord::Base
include Sortable
include CaseSensitivity
include TokenAuthenticatable
include CookieHelpers
add_authentication_token_field :authentication_token
......
......@@ -50,6 +50,13 @@ Feature: Dashboard
And I visit dashboard issues page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Visiting Project's issues after sorting
Given I visit dashboard issues page
And I sort the list by "Oldest updated"
And I visit project "Shop" issues page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Sorting Merge Requests
Given I visit dashboard merge requests page
......@@ -57,3 +64,10 @@ Feature: Dashboard
And I visit dashboard activity page
And I visit dashboard merge requests page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Visiting Project's merge requests after sorting
Given I visit dashboard merge requests page
And I sort the list by "Oldest updated"
And I visit project "Shop" merge requests page
Then The list should be sorted by "Oldest updated"
......@@ -67,6 +67,13 @@ Feature: Project Issues
And I visit project "Shop" issues page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Visiting Merge Requests from a differente Project after sorting
Given I visit project "Shop" merge requests page
And I sort the list by "Oldest updated"
And I visit dashboard merge requests page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: I search issue
Given I fill in issue search with "Re"
......
......@@ -92,6 +92,13 @@ Feature: Project Merge Requests
And I visit project "Shop" merge requests page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Visiting Merge Requests from a differente Project after sorting
Given I visit project "Shop" merge requests page
And I sort the list by "Oldest updated"
And I visit dashboard merge requests page
Then The list should be sorted by "Oldest updated"
@javascript
Scenario: Visiting Merge Requests after commenting on diffs
Given project "Shop" have "Bug NS-05" open merge request with diffs inside
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment