Commit d4d00e65 authored by Douwe Maan's avatar Douwe Maan Committed by Alejandro Rodríguez

Merge branch 'fix/ca-no-date' into 'master'

fix for builds with no start date throwing an error in cycle analytics events

Instead of the error, we should inform that there is no start date

- [x] [Changelog entry](https://docs.gitlab.com/ce/development/changelog.html) added
- Tests
  - [x] Added for this feature/bug
  - [x] All builds are passing
- [x] Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html)
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if it does - rebase it please)
- [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

## What are the relevant issue numbers?

Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/24925

See merge request !7738
parent 35b950ef
...@@ -10,10 +10,15 @@ ...@@ -10,10 +10,15 @@
}, },
template: ` template: `
<span class="total-time"> <span class="total-time">
<template v-if="time.days">{{ time.days }} <span>{{ time.days === 1 ? 'day' : 'days' }}</span></template> <template v-if="Object.keys(time).length">
<template v-if="time.hours">{{ time.hours }} <span>hr</span></template> <template v-if="time.days">{{ time.days }} <span>{{ time.days === 1 ? 'day' : 'days' }}</span></template>
<template v-if="time.mins && !time.days">{{ time.mins }} <span>mins</span></template> <template v-if="time.hours">{{ time.hours }} <span>hr</span></template>
<template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>s</span></template> <template v-if="time.mins && !time.days">{{ time.mins }} <span>mins</span></template>
<template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>s</span></template>
</template>
<template v-else>
--
</template>
</span> </span>
`, `,
}); });
......
...@@ -13,7 +13,7 @@ class AnalyticsBuildEntity < Grape::Entity ...@@ -13,7 +13,7 @@ class AnalyticsBuildEntity < Grape::Entity
end end
expose :duration, as: :total_time do |build| expose :duration, as: :total_time do |build|
distance_of_time_as_hash(build.duration.to_f) build.duration ? distance_of_time_as_hash(build.duration.to_f) : {}
end end
expose :branch do expose :branch do
......
...@@ -2,6 +2,8 @@ module EntityDateHelper ...@@ -2,6 +2,8 @@ module EntityDateHelper
include ActionView::Helpers::DateHelper include ActionView::Helpers::DateHelper
def interval_in_words(diff) def interval_in_words(diff)
return 'Not started' unless diff
"#{distance_of_time_in_words(Time.now, diff)} ago" "#{distance_of_time_in_words(Time.now, diff)} ago"
end end
......
---
title: Fix for error thrown in cycle analytics events if build has not started
merge_request:
author:
...@@ -7,7 +7,9 @@ describe AnalyticsBuildEntity do ...@@ -7,7 +7,9 @@ describe AnalyticsBuildEntity do
context 'build with an author' do context 'build with an author' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:build) { create(:ci_build, author: user, started_at: 2.hours.ago, finished_at: 1.hour.ago) } let(:started_at) { 2.hours.ago }
let(:finished_at) { 1.hour.ago }
let(:build) { create(:ci_build, author: user, started_at: started_at, finished_at: finished_at) }
subject { entity.as_json } subject { entity.as_json }
...@@ -31,5 +33,54 @@ describe AnalyticsBuildEntity do ...@@ -31,5 +33,54 @@ describe AnalyticsBuildEntity do
it 'contains the duration' do it 'contains the duration' do
expect(subject[:total_time]).to eq(hours: 1 ) expect(subject[:total_time]).to eq(hours: 1 )
end end
context 'no started at or finished at date' do
let(:started_at) { nil }
let(:finished_at) { nil }
it 'does not blow up' do
expect{ subject[:date] }.not_to raise_error
end
it 'shows the right message' do
expect(subject[:date]).to eq('Not started')
end
it 'shows the right total time' do
expect(subject[:total_time]).to eq({})
end
end
context 'no started at date' do
let(:started_at) { nil }
it 'does not blow up' do
expect{ subject[:date] }.not_to raise_error
end
it 'shows the right message' do
expect(subject[:date]).to eq('Not started')
end
it 'shows the right total time' do
expect(subject[:total_time]).to eq({})
end
end
context 'no finished at date' do
let(:finished_at) { nil }
it 'does not blow up' do
expect{ subject[:date] }.not_to raise_error
end
it 'shows the right message' do
expect(subject[:date]).to eq('about 2 hours ago')
end
it 'shows the right total time' do
expect(subject[:total_time]).to eq({ hours: 2 })
end
end
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