Commit 192918cd authored by James Lopez's avatar James Lopez

refactored duplicated code in controller, updated JSON array naming and fixed specs

parent b4bb33c5
module CycleAnalyticsParams
extend ActiveSupport::Concern
def start_date(params)
params[:start_date] == '30' ? 30.days.ago : 90.days.ago
end
end
class Projects::CycleAnalytics::EventsController < Projects::ApplicationController class Projects::CycleAnalytics::EventsController < Projects::ApplicationController
# TODO: fix authorization include CycleAnalyticsParams
# before_action :authorize_read_cycle_analytics!
# TODO: refactor +event_hash+ before_action :authorize_read_cycle_analytics!
def issue def issue
render_events(issues: events.issue_events) render_events(events.issue_events)
end end
def plan def plan
render_events(commits: events.plan_events) render_events(events.plan_events)
end end
def code def code
render_events(merge_requests: events.code_events) render_events(events.code_events)
end end
def test 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 end
def review def review
render_events(merge_requests: events.review_events) render_events(events.review_events)
end end
def staging def staging
render_events(builds: events.staging_events) render_events(events.staging_events)
end end
def production def production
render_events(issues: events.production_events) render_events(events.production_events)
end end
private private
def render_events(event_hash) def render_events(events)
respond_to do |format| respond_to do |format|
format.html format.html
format.json { render json: event_hash } format.json { render json: { items: events } }
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
end end
end end
...@@ -60,7 +47,7 @@ class Projects::CycleAnalytics::EventsController < Projects::ApplicationControll ...@@ -60,7 +47,7 @@ class Projects::CycleAnalytics::EventsController < Projects::ApplicationControll
end end
def options def options
@opts ||= { from: start_date } @opts ||= { from: start_date(events_params) }
end end
def events_params def events_params
......
class Projects::CycleAnalyticsController < Projects::ApplicationController class Projects::CycleAnalyticsController < Projects::ApplicationController
include ActionView::Helpers::DateHelper include ActionView::Helpers::DateHelper
include ActionView::Helpers::TextHelper include ActionView::Helpers::TextHelper
include CycleAnalyticsParams
before_action :authorize_read_cycle_analytics! before_action :authorize_read_cycle_analytics!
def show 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| respond_to do |format|
format.html format.html
...@@ -15,14 +16,6 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController ...@@ -15,14 +16,6 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
private 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 def cycle_analytics_params
return {} unless params[:cycle_analytics].present? return {} unless params[:cycle_analytics].present?
......
...@@ -17,17 +17,17 @@ describe 'cycle analytics events' do ...@@ -17,17 +17,17 @@ describe 'cycle analytics events' do
it 'lists the issue events' do it 'lists the issue events' do
get namespace_project_cycle_analytics_issue_path(project.namespace, project, format: :json) 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 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
it 'lists the plan events' do it 'lists the plan events' do
get namespace_project_cycle_analytics_plan_path(project.namespace, project, format: :json) 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 = [] commits = []
...@@ -39,53 +39,53 @@ describe 'cycle analytics events' do ...@@ -39,53 +39,53 @@ describe 'cycle analytics events' do
newest_sha = commits.sort_by { |k| k['date'] }.first[:sha][0...8] 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 end
it 'lists the code events' do it 'lists the code events' do
get namespace_project_cycle_analytics_code_path(project.namespace, project, format: :json) 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 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 end
it 'lists the test events' do it 'lists the test events' do
get namespace_project_cycle_analytics_test_path(project.namespace, project, format: :json) 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 end
it 'lists the review events' do it 'lists the review events' do
get namespace_project_cycle_analytics_review_path(project.namespace, project, format: :json) 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 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 end
it 'lists the staging events' do it 'lists the staging events' do
get namespace_project_cycle_analytics_staging_path(project.namespace, project, format: :json) 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 end
it 'lists the production events' do it 'lists the production events' do
get namespace_project_cycle_analytics_production_path(project.namespace, project, format: :json) 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 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
end end
......
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