Commit 7a8d2164 authored by Heinrich Lee Yu's avatar Heinrich Lee Yu

Fix time tracking parsing of months

Patches ChronicDuration to use our custom conversions
when parsing months
parent dd80d622
---
title: Fix parsing of months in time tracking commands
merge_request: 32165
author:
type: fixed
# frozen_string_literal: true
ChronicDuration.raise_exceptions = true
ChronicDuration.prepend Gitlab::Patch::ChronicDuration
# frozen_string_literal: true
# Fixes a bug where parsing months doesn't take into account
# the ChronicDuration.days_per_week setting
#
# We can remove this when we do a refactor and push upstream in
# https://gitlab.com/gitlab-org/gitlab-ce/issues/66637
module Gitlab
module Patch
module ChronicDuration
extend ActiveSupport::Concern
class_methods do
def duration_units_seconds_multiplier(unit)
return 0 unless duration_units_list.include?(unit)
case unit
when 'months'
3600 * ::ChronicDuration.hours_per_day * ::ChronicDuration.days_per_month
else
super
end
end
# ChronicDuration#output uses 1mo = 4w as the conversion so we do the same here.
# We do need to add a special case for the default days_per_week value because
# we want to retain existing behavior for the default case
def days_per_month
::ChronicDuration.days_per_week == 7 ? 30 : ::ChronicDuration.days_per_week * 4
end
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::Patch::ChronicDuration do
subject { ChronicDuration.parse('1mo') }
it 'uses default conversions' do
expect(subject).to eq(2_592_000)
end
context 'with custom conversions' do
before do
ChronicDuration.hours_per_day = 8
ChronicDuration.days_per_week = 5
end
after do
ChronicDuration.hours_per_day = 24
ChronicDuration.days_per_week = 7
end
it 'uses custom conversions' do
expect(subject).to eq(576_000)
end
end
end
......@@ -17,6 +17,14 @@ describe Gitlab::TimeTrackingFormatter do
it { expect(subject).to eq(-12_000) }
end
context 'durations with months' do
let(:duration_string) { '1mo' }
it 'uses our custom conversions' do
expect(subject).to eq(576_000)
end
end
end
describe '#output' do
......
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