From 192918cde949c8399d7d526a638f6e09f9fb7a5a Mon Sep 17 00:00:00 2001 From: James Lopez Date: Mon, 7 Nov 2016 10:08:18 +0100 Subject: [PATCH] refactored duplicated code in controller, updated JSON array naming and fixed specs --- .../concerns/cycle_analytics_params.rb | 7 ++++ .../cycle_analytics/events_controller.rb | 39 +++++++------------ .../projects/cycle_analytics_controller.rb | 11 +----- .../projects/cycle_analytics_events_spec.rb | 28 ++++++------- 4 files changed, 36 insertions(+), 49 deletions(-) create mode 100644 app/controllers/concerns/cycle_analytics_params.rb diff --git a/app/controllers/concerns/cycle_analytics_params.rb b/app/controllers/concerns/cycle_analytics_params.rb new file mode 100644 index 00000000000..2aaf8f2b451 --- /dev/null +++ b/app/controllers/concerns/cycle_analytics_params.rb @@ -0,0 +1,7 @@ +module CycleAnalyticsParams + extend ActiveSupport::Concern + + def start_date(params) + params[:start_date] == '30' ? 30.days.ago : 90.days.ago + end +end diff --git a/app/controllers/projects/cycle_analytics/events_controller.rb b/app/controllers/projects/cycle_analytics/events_controller.rb index 0f0fd17c8a7..5ef1f911fc5 100644 --- a/app/controllers/projects/cycle_analytics/events_controller.rb +++ b/app/controllers/projects/cycle_analytics/events_controller.rb @@ -1,57 +1,44 @@ class Projects::CycleAnalytics::EventsController < Projects::ApplicationController - # TODO: fix authorization - # before_action :authorize_read_cycle_analytics! + include CycleAnalyticsParams - # TODO: refactor +event_hash+ + before_action :authorize_read_cycle_analytics! def issue - render_events(issues: events.issue_events) + render_events(events.issue_events) end def plan - render_events(commits: events.plan_events) + render_events(events.plan_events) end def code - render_events(merge_requests: events.code_events) + render_events(events.code_events) end def test - @opts = { from: start_date, branch: events_params[:branch_name] } + @opts = { from: start_date(events_params), branch: events_params[:branch_name] } - render_events(builds: events.test_events) + render_events(events.test_events) end def review - render_events(merge_requests: events.review_events) + render_events(events.review_events) end def staging - render_events(builds: events.staging_events) + render_events(events.staging_events) end def production - render_events(issues: events.production_events) + render_events(events.production_events) end private - def render_events(event_hash) + def render_events(events) respond_to do |format| format.html - format.json { render json: event_hash } - end - end - - # TODO refactor this - def start_date - case events_params[:start_date] - when '30' then - 30.days.ago - when '90' then - 90.days.ago - else - 90.days.ago + format.json { render json: { items: events } } end end @@ -60,7 +47,7 @@ class Projects::CycleAnalytics::EventsController < Projects::ApplicationControll end def options - @opts ||= { from: start_date } + @opts ||= { from: start_date(events_params) } end def events_params diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index 04f4cc7000e..96eb75a0547 100644 --- a/app/controllers/projects/cycle_analytics_controller.rb +++ b/app/controllers/projects/cycle_analytics_controller.rb @@ -1,11 +1,12 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController include ActionView::Helpers::DateHelper include ActionView::Helpers::TextHelper + include CycleAnalyticsParams before_action :authorize_read_cycle_analytics! def show - @cycle_analytics = ::CycleAnalytics.new(@project, from: parse_start_date) + @cycle_analytics = ::CycleAnalytics.new(@project, from: start_date(cycle_analytics_params)) respond_to do |format| format.html @@ -15,14 +16,6 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController private - def parse_start_date - case cycle_analytics_params[:start_date] - when '30' then 30.days.ago - when '90' then 90.days.ago - else 90.days.ago - end - end - def cycle_analytics_params return {} unless params[:cycle_analytics].present? diff --git a/spec/requests/projects/cycle_analytics_events_spec.rb b/spec/requests/projects/cycle_analytics_events_spec.rb index c0b6a97c202..d57e0342544 100644 --- a/spec/requests/projects/cycle_analytics_events_spec.rb +++ b/spec/requests/projects/cycle_analytics_events_spec.rb @@ -17,17 +17,17 @@ describe 'cycle analytics events' do it 'lists the issue events' do get namespace_project_cycle_analytics_issue_path(project.namespace, project, format: :json) - expect(json_response['issues']).not_to be_empty + expect(json_response['items']).not_to be_empty first_issue_iid = Issue.order(created_at: :desc).pluck(:iid).first.to_s - expect(json_response['issues'].first['iid']).to eq(first_issue_iid) + expect(json_response['items'].first['iid']).to eq(first_issue_iid) end it 'lists the plan events' do get namespace_project_cycle_analytics_plan_path(project.namespace, project, format: :json) - expect(json_response['commits']).not_to be_empty + expect(json_response['items']).not_to be_empty commits = [] @@ -39,53 +39,53 @@ describe 'cycle analytics events' do newest_sha = commits.sort_by { |k| k['date'] }.first[:sha][0...8] - expect(json_response['commits'].first['sha']).to eq(newest_sha) + expect(json_response['items'].first['sha']).to eq(newest_sha) end it 'lists the code events' do get namespace_project_cycle_analytics_code_path(project.namespace, project, format: :json) - expect(json_response['merge_requests']).not_to be_empty + expect(json_response['items']).not_to be_empty first_mr_iid = Issue.order(created_at: :desc).pluck(:iid).first.to_s - expect(json_response['merge_requests'].first['iid']).to eq(first_mr_iid) + expect(json_response['items'].first['iid']).to eq(first_mr_iid) end it 'lists the test events' do get namespace_project_cycle_analytics_test_path(project.namespace, project, format: :json) - expect(json_response['builds']).not_to be_empty + expect(json_response['items']).not_to be_empty - expect(json_response['builds'].first['date']).not_to be_empty + expect(json_response['items'].first['date']).not_to be_empty end it 'lists the review events' do get namespace_project_cycle_analytics_review_path(project.namespace, project, format: :json) - expect(json_response['merge_requests']).not_to be_empty + expect(json_response['items']).not_to be_empty first_mr_iid = Issue.order(created_at: :desc).pluck(:iid).first.to_s - expect(json_response['merge_requests'].first['iid']).to eq(first_mr_iid) + expect(json_response['items'].first['iid']).to eq(first_mr_iid) end it 'lists the staging events' do get namespace_project_cycle_analytics_staging_path(project.namespace, project, format: :json) - expect(json_response['builds']).not_to be_empty + expect(json_response['items']).not_to be_empty - expect(json_response['builds'].first['date']).not_to be_empty + expect(json_response['items'].first['date']).not_to be_empty end it 'lists the production events' do get namespace_project_cycle_analytics_production_path(project.namespace, project, format: :json) - expect(json_response['issues']).not_to be_empty + expect(json_response['items']).not_to be_empty first_issue_iid = Issue.order(created_at: :desc).pluck(:iid).first.to_s - expect(json_response['issues'].first['iid']).to eq(first_issue_iid) + expect(json_response['items'].first['iid']).to eq(first_issue_iid) end end