From dde8fba524aa071d08121818a1e2c3d635664819 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Mon, 21 Nov 2016 15:39:43 +0100 Subject: [PATCH 1/3] Adds a flag to reflect whether or not there is data in cycle analytics --- .../projects/cycle_analytics_controller.rb | 24 ++++++++--- .../cycle_analytics_controller_spec.rb | 43 +++++++++++++++++++ 2 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 spec/controllers/projects/cycle_analytics_controller_spec.rb diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index 00ecdcbd1b9..b75b391b461 100644 --- a/app/controllers/projects/cycle_analytics_controller.rb +++ b/app/controllers/projects/cycle_analytics_controller.rb @@ -8,6 +8,10 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController def show @cycle_analytics = ::CycleAnalytics.new(@project, from: start_date(cycle_analytics_params)) + stats_values, cycle_analytics_json = generate_cycle_analytics_json + + @cycle_analytics_not_set_up = stats_with_no_data?(stats_values) + respond_to do |format| format.html format.json { render json: cycle_analytics_json } @@ -22,7 +26,9 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController { start_date: params[:cycle_analytics][:start_date] } end - def cycle_analytics_json + def generate_cycle_analytics_json + stats_values = [] + cycle_analytics_view_data = [[:issue, "Issue", "Time before an issue gets scheduled"], [:plan, "Plan", "Time before an issue starts implementation"], [:code, "Code", "Time until first merge request"], @@ -34,11 +40,14 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController stats = cycle_analytics_view_data.reduce([]) do |stats, (stage_method, stage_text, stage_description)| value = @cycle_analytics.send(stage_method).presence + stats_values << value.abs if value + stats << { title: stage_text, description: stage_description, value: value && !value.zero? ? distance_of_time_in_words(value) : nil } + stats end @@ -52,10 +61,15 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController { title: "Deploy".pluralize(deploys), value: deploys } ] - { - summary: summary, - stats: stats, - permissions: @cycle_analytics.permissions(user: current_user) + cycle_analytics_hash = { summary: summary, + stats: stats, + permissions: @cycle_analytics.permissions(user: current_user) } + + [stats_values, cycle_analytics_hash] + end + + def stats_with_no_data?(stats_values) + stats_values.blank? || stats_values.inject(:+).zero? end end diff --git a/spec/controllers/projects/cycle_analytics_controller_spec.rb b/spec/controllers/projects/cycle_analytics_controller_spec.rb new file mode 100644 index 00000000000..9131014a05d --- /dev/null +++ b/spec/controllers/projects/cycle_analytics_controller_spec.rb @@ -0,0 +1,43 @@ +require 'spec_helper' + +describe Projects::CycleAnalyticsController do + let(:project) { create(:project) } + let(:user) { create(:user) } + + before do + sign_in(user) + project.team << [user, :master] + end + + describe 'cycle analytics not set up flag' do + context 'with no data' do + it 'is true' do + get(:show, + namespace_id: project.namespace.to_param, + project_id: project.to_param) + + expect(response).to be_success + expect(assigns(:cycle_analytics_not_set_up)).to eq(true) + end + end + + context 'with data' do + before do + issue = create(:issue, project: project, created_at: 4.days.ago) + milestone = create(:milestone, project: project, created_at: 5.days.ago) + issue.update(milestone: milestone) + + create_merge_request_closing_issue(issue) + end + + it 'is false' do + get(:show, + namespace_id: project.namespace.to_param, + project_id: project.to_param) + + expect(response).to be_success + expect(assigns(:cycle_analytics_not_set_up)).to eq(false) + end + end + end +end From 7a63021ab3793ea64ead0d18cbd6ba1e62aa11bc Mon Sep 17 00:00:00 2001 From: James Lopez Date: Mon, 21 Nov 2016 15:45:15 +0100 Subject: [PATCH 2/3] rename method --- app/controllers/projects/cycle_analytics_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index b75b391b461..f1417ab29ef 100644 --- a/app/controllers/projects/cycle_analytics_controller.rb +++ b/app/controllers/projects/cycle_analytics_controller.rb @@ -8,7 +8,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController def show @cycle_analytics = ::CycleAnalytics.new(@project, from: start_date(cycle_analytics_params)) - stats_values, cycle_analytics_json = generate_cycle_analytics_json + stats_values, cycle_analytics_json = generate_cycle_analytics_data @cycle_analytics_not_set_up = stats_with_no_data?(stats_values) @@ -26,7 +26,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController { start_date: params[:cycle_analytics][:start_date] } end - def generate_cycle_analytics_json + def generate_cycle_analytics_data stats_values = [] cycle_analytics_view_data = [[:issue, "Issue", "Time before an issue gets scheduled"], From a3331eee91fdd2170865c37641a88af2b47f9839 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Mon, 21 Nov 2016 17:29:07 +0100 Subject: [PATCH 3/3] Updated code based on feedback --- app/controllers/projects/cycle_analytics_controller.rb | 6 +----- .../controllers/projects/cycle_analytics_controller_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index f1417ab29ef..4caec91efe7 100644 --- a/app/controllers/projects/cycle_analytics_controller.rb +++ b/app/controllers/projects/cycle_analytics_controller.rb @@ -10,7 +10,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController stats_values, cycle_analytics_json = generate_cycle_analytics_data - @cycle_analytics_not_set_up = stats_with_no_data?(stats_values) + @cycle_analytics_no_data = stats_values.blank? respond_to do |format| format.html @@ -68,8 +68,4 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController [stats_values, cycle_analytics_hash] end - - def stats_with_no_data?(stats_values) - stats_values.blank? || stats_values.inject(:+).zero? - end end diff --git a/spec/controllers/projects/cycle_analytics_controller_spec.rb b/spec/controllers/projects/cycle_analytics_controller_spec.rb index 9131014a05d..a971adf0539 100644 --- a/spec/controllers/projects/cycle_analytics_controller_spec.rb +++ b/spec/controllers/projects/cycle_analytics_controller_spec.rb @@ -17,7 +17,7 @@ describe Projects::CycleAnalyticsController do project_id: project.to_param) expect(response).to be_success - expect(assigns(:cycle_analytics_not_set_up)).to eq(true) + expect(assigns(:cycle_analytics_no_data)).to eq(true) end end @@ -36,7 +36,7 @@ describe Projects::CycleAnalyticsController do project_id: project.to_param) expect(response).to be_success - expect(assigns(:cycle_analytics_not_set_up)).to eq(false) + expect(assigns(:cycle_analytics_no_data)).to eq(false) end end end