From cf1349adb7cba2e791a1f8d59e3a6a976b54e071 Mon Sep 17 00:00:00 2001 From: kkm Date: Thu, 22 Oct 2015 18:52:17 -0700 Subject: Remember user's inline/tabular diff view preference in a cookie --- CHANGELOG | 1 + app/controllers/projects/application_controller.rb | 7 +++++++ app/controllers/projects/commit_controller.rb | 2 ++ app/controllers/projects/merge_requests_controller.rb | 2 ++ 4 files changed, 12 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index d43b8f69063..e1ef5b8d45d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -22,6 +22,7 @@ v 8.5.0 (unreleased) - Fix visibility level text in admin area (Zeger-Jan van de Weg) - Warn admin during OAuth of granting admin rights (Zeger-Jan van de Weg) - Update the ExternalIssue regex pattern (Blake Hitchcock) + - Remember user's inline/tabular diff view preference in a cookie (Kirill Katsnelson) - Optimized performance of finding issues to be closed by a merge request - Revert "Add IP check against DNSBLs at account sign-up" - Fix API to keep request parameters in Link header (Michael Potthoff) diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index dd32d509191..9096910b82c 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -26,6 +26,13 @@ class Projects::ApplicationController < ApplicationController end end + protected + + def apply_diff_view_cookie! + view = params[:view] || cookies[:diff_view] + cookies.permanent[:diff_view] = params[:view] = view if view + end + private def builds_enabled diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb index f5a169e5aa9..5a084e123a1 100644 --- a/app/controllers/projects/commit_controller.rb +++ b/app/controllers/projects/commit_controller.rb @@ -13,6 +13,8 @@ class Projects::CommitController < Projects::ApplicationController def show return git_not_found! unless @commit + apply_diff_view_cookie! + @line_notes = commit.notes.inline @note = @project.build_commit_note(commit) @notes = commit.notes.not_inline.fresh diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index ed3050d59aa..9d588c370aa 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -57,6 +57,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController end def diffs + apply_diff_view_cookie! + @commit = @merge_request.last_commit @base_commit = @merge_request.diff_base_commit -- cgit v1.2.1 From f6d816f9fe5dae55ed980b48aac7366c46f95461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Fri, 5 Feb 2016 12:34:51 +0100 Subject: Add a controller test for the new 'diff_view' cookie --- app/controllers/projects/application_controller.rb | 4 +--- .../controllers/projects/merge_requests_controller_spec.rb | 14 +++++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 9096910b82c..a326bc58215 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -26,15 +26,13 @@ class Projects::ApplicationController < ApplicationController end end - protected + private def apply_diff_view_cookie! view = params[:view] || cookies[:diff_view] cookies.permanent[:diff_view] = params[:view] = view if view end - private - def builds_enabled return render_404 unless @project.builds_enabled? end diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index 6aaec224f6e..183cfef3611 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -188,7 +188,7 @@ describe Projects::MergeRequestsController do expect(response).to render_template('diffs') end end - + context 'as json' do it 'renders the diffs template to a string' do go format: 'json' @@ -199,6 +199,18 @@ describe Projects::MergeRequestsController do end end + describe 'GET diffs with view' do + it 'saves the preferred diff view in a cookie' do + get :diffs, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: merge_request.iid, + view: 'parallel' + + expect(response.cookies['diff_view']).to eq('parallel') + end + end + describe 'GET commits' do def go(format: 'html') get :commits, -- cgit v1.2.1 From 24f048be72e6179c36b8f986017b7ba52e97b47d Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 5 Feb 2016 16:02:11 -0500 Subject: Update CHANGELOG [ci skip] --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index e1ef5b8d45d..fb21ae94524 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -22,7 +22,7 @@ v 8.5.0 (unreleased) - Fix visibility level text in admin area (Zeger-Jan van de Weg) - Warn admin during OAuth of granting admin rights (Zeger-Jan van de Weg) - Update the ExternalIssue regex pattern (Blake Hitchcock) - - Remember user's inline/tabular diff view preference in a cookie (Kirill Katsnelson) + - Remember user's inline/side-by-side diff view preference in a cookie (Kirill Katsnelson) - Optimized performance of finding issues to be closed by a merge request - Revert "Add IP check against DNSBLs at account sign-up" - Fix API to keep request parameters in Link header (Michael Potthoff) -- cgit v1.2.1 From 551ce0f245d92245c1365754d1a60818a5a6ca36 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 5 Feb 2016 16:03:20 -0500 Subject: Add spec for assigning view param from cookie --- .../projects/merge_requests_controller_spec.rb | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index 183cfef3611..9450a389d81 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -200,15 +200,29 @@ describe Projects::MergeRequestsController do end describe 'GET diffs with view' do + def go(extra_params = {}) + params = { + namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: merge_request.iid + } + + get :diffs, params.merge(extra_params) + end + it 'saves the preferred diff view in a cookie' do - get :diffs, - namespace_id: project.namespace.to_param, - project_id: project.to_param, - id: merge_request.iid, - view: 'parallel' + go view: 'parallel' expect(response.cookies['diff_view']).to eq('parallel') end + + it 'assigns :view param based on cookie' do + request.cookies['diff_view'] = 'parallel' + + go + + expect(controller.params[:view]).to eq 'parallel' + end end describe 'GET commits' do -- cgit v1.2.1