diff options
author | Mario de la Ossa <mariodelaossa@gmail.com> | 2019-01-06 18:00:48 -0600 |
---|---|---|
committer | Mario de la Ossa <mariodelaossa@gmail.com> | 2019-01-28 12:48:05 -0600 |
commit | 49c74068ae7f0017ebeb8e7daa2c556fef3124e3 (patch) | |
tree | 76200baeb51199910ce81b77736da2491bcd33f5 /spec | |
parent | 958a819fce709419c0be76cec8a20c8e8417ab84 (diff) | |
download | gitlab-ce-49c74068ae7f0017ebeb8e7daa2c556fef3124e3.tar.gz |
Save sorting preference for Issues/MRs in BE
In order to let users' sorting preferences transfer between devices, we
save the preference for issues and MRs (one preference for issues, one
for MRs) in the backend inside the UserPreference object
Diffstat (limited to 'spec')
5 files changed, 77 insertions, 11 deletions
diff --git a/spec/controllers/concerns/issuable_collections_spec.rb b/spec/controllers/concerns/issuable_collections_spec.rb index 5a3a7a15f5a..307c5d60c57 100644 --- a/spec/controllers/concerns/issuable_collections_spec.rb +++ b/spec/controllers/concerns/issuable_collections_spec.rb @@ -17,10 +17,55 @@ describe IssuableCollections do controller = klass.new allow(controller).to receive(:params).and_return(ActionController::Parameters.new(params)) + allow(controller).to receive(:current_user).and_return(user) controller end + describe '#set_sort_order_from_user_preference' do + describe 'when sort param given' do + let(:params) { { sort: 'updated_desc' } } + + context 'when issuable_sorting_field is defined' do + before do + controller.class.define_method(:issuable_sorting_field) { :issues_sort} + end + + it 'sets user_preference with the right value' do + controller.send(:set_sort_order_from_user_preference) + + expect(user.user_preference.reload.issues_sort).to eq('updated_desc') + end + end + + context 'when no issuable_sorting_field is defined on the controller' do + it 'does not touch user_preference' do + allow(user).to receive(:user_preference) + + controller.send(:set_sort_order_from_user_preference) + + expect(user).not_to have_received(:user_preference) + end + end + end + + context 'when a user sorting preference exists' do + let(:params) { {} } + + before do + controller.class.define_method(:issuable_sorting_field) { :issues_sort } + end + + it 'returns the set preference' do + user.user_preference.update(issues_sort: 'updated_asc') + + sort_preference = controller.send(:set_sort_order_from_user_preference) + + expect(sort_preference).to eq('updated_asc') + end + end + end + describe '#set_set_order_from_cookie' do describe 'when sort param given' do let(:cookies) { {} } diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb index a2c3bb2919d..8ea5b4ea09c 100644 --- a/spec/controllers/projects/issues_controller_spec.rb +++ b/spec/controllers/projects/issues_controller_spec.rb @@ -42,7 +42,9 @@ describe Projects::IssuesController do it_behaves_like "issuables list meta-data", :issue - it_behaves_like 'set sort order from user preference' + it_behaves_like 'set sort order from user preference' do + let(:sorting_param) { 'updated_asc' } + end it "returns index" do get :index, params: { namespace_id: project.namespace, project_id: project } diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index 53d5bf752ef..01a27f0429b 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -153,7 +153,9 @@ describe Projects::MergeRequestsController do it_behaves_like "issuables list meta-data", :merge_request - it_behaves_like 'set sort order from user preference' + it_behaves_like 'set sort order from user preference' do + let(:sorting_param) { 'updated_asc' } + end context 'when page param' do let(:last_page) { project.merge_requests.page().total_pages } diff --git a/spec/models/user_preference_spec.rb b/spec/models/user_preference_spec.rb index 2898613545c..b2ef17a81d4 100644 --- a/spec/models/user_preference_spec.rb +++ b/spec/models/user_preference_spec.rb @@ -3,9 +3,10 @@ require 'spec_helper' describe UserPreference do + let(:user_preference) { create(:user_preference) } + describe '#set_notes_filter' do let(:issuable) { build_stubbed(:issue) } - let(:user_preference) { create(:user_preference) } shared_examples 'setting system notes' do it 'returns updated discussion filter' do @@ -50,4 +51,26 @@ describe UserPreference do end end end + + describe 'sort_by preferences' do + shared_examples_for 'a sort_by preference' do + it 'allows nil sort fields' do + user_preference.update(attribute => nil) + + expect(user_preference).to be_valid + end + end + + context 'merge_requests_sort attribute' do + let(:attribute) { :merge_requests_sort } + + it_behaves_like 'a sort_by preference' + end + + context 'issues_sort attribute' do + let(:attribute) { :issues_sort } + + it_behaves_like 'a sort_by preference' + end + end end diff --git a/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb b/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb index d86838719d4..98ab04c5636 100644 --- a/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb +++ b/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb @@ -2,18 +2,12 @@ shared_examples 'set sort order from user preference' do describe '#set_sort_order_from_user_preference' do # There is no issuable_sorting_field defined in any CE controllers yet, # however any other field present in user_preferences table can be used for testing. - let(:sorting_field) { :issue_notes_filter } - let(:sorting_param) { 'any' } - - before do - allow(controller).to receive(:issuable_sorting_field).and_return(sorting_field) - end context 'when database is in read-only mode' do it 'it does not update user preference' do allow(Gitlab::Database).to receive(:read_only?).and_return(true) - expect_any_instance_of(UserPreference).not_to receive(:update_attribute).with(sorting_field, sorting_param) + expect_any_instance_of(UserPreference).not_to receive(:update).with({ controller.send(:issuable_sorting_field) => sorting_param }) get :index, params: { namespace_id: project.namespace, project_id: project, sort: sorting_param } end @@ -23,7 +17,7 @@ shared_examples 'set sort order from user preference' do it 'updates user preference' do allow(Gitlab::Database).to receive(:read_only?).and_return(false) - expect_any_instance_of(UserPreference).to receive(:update_attribute).with(sorting_field, sorting_param) + expect_any_instance_of(UserPreference).to receive(:update).with({ controller.send(:issuable_sorting_field) => sorting_param }) get :index, params: { namespace_id: project.namespace, project_id: project, sort: sorting_param } end |