debian-mirror-gitlab/spec/lib/gitlab/analytics/date_filler_spec.rb
2022-10-11 01:57:18 +05:30

136 lines
3.4 KiB
Ruby

# frozen_string_literal: true
require 'fast_spec_helper'
RSpec.describe Gitlab::Analytics::DateFiller do
let(:default_value) { 0 }
let(:formatter) { Gitlab::Analytics::DateFiller::DEFAULT_DATE_FORMATTER }
subject(:filler_result) do
described_class.new(data,
from: from,
to: to,
period: period,
default_value: default_value,
date_formatter: formatter).fill.to_a
end
context 'when unknown period is given' do
it 'raises error' do
input = { 3.days.ago.to_date => 10, Date.today => 5 }
expect do
described_class.new(input, from: 4.days.ago, to: Date.today, period: :unknown).fill
end.to raise_error(/Unknown period given/)
end
end
context 'when period=:day' do
let(:from) { Date.new(2021, 5, 25) }
let(:to) { Date.new(2021, 6, 5) }
let(:period) { :day }
let(:expected_result) do
{
Date.new(2021, 5, 25) => 1,
Date.new(2021, 5, 26) => default_value,
Date.new(2021, 5, 27) => default_value,
Date.new(2021, 5, 28) => default_value,
Date.new(2021, 5, 29) => default_value,
Date.new(2021, 5, 30) => default_value,
Date.new(2021, 5, 31) => default_value,
Date.new(2021, 6, 1) => default_value,
Date.new(2021, 6, 2) => default_value,
Date.new(2021, 6, 3) => 10,
Date.new(2021, 6, 4) => default_value,
Date.new(2021, 6, 5) => default_value
}
end
let(:data) do
{
Date.new(2021, 6, 3) => 10, # deliberatly not sorted
Date.new(2021, 5, 27) => nil,
Date.new(2021, 5, 25) => 1
}
end
it { is_expected.to eq(expected_result.to_a) }
context 'when a custom default value is given' do
let(:default_value) { 'MISSING' }
it do
is_expected.to eq(expected_result.to_a)
end
end
context 'when a custom date formatter is given' do
let(:formatter) { -> (date) { date.to_s } }
it do
expected_result.transform_keys!(&:to_s)
is_expected.to eq(expected_result.to_a)
end
end
context 'when the data contains dates outside of the requested period' do
before do
data[Date.new(2022, 6, 1)] = 5
end
it 'raises error' do
expect { filler_result }.to raise_error(/Input contains values which doesn't/)
end
end
end
context 'when period=:week' do
let(:from) { Date.new(2021, 5, 16) }
let(:to) { Date.new(2021, 6, 7) }
let(:period) { :week }
let(:data) do
{
Date.new(2021, 5, 24) => nil,
Date.new(2021, 6, 7) => 10
}
end
let(:expected_result) do
{
Date.new(2021, 5, 10) => 0,
Date.new(2021, 5, 17) => 0,
Date.new(2021, 5, 24) => 0,
Date.new(2021, 5, 31) => 0,
Date.new(2021, 6, 7) => 10
}
end
it do
is_expected.to eq(expected_result.to_a)
end
end
context 'when period=:month' do
let(:from) { Date.new(2021, 5, 1) }
let(:to) { Date.new(2021, 7, 1) }
let(:period) { :month }
let(:data) do
{
Date.new(2021, 5, 1) => 100
}
end
let(:expected_result) do
{
Date.new(2021, 5, 1) => 100,
Date.new(2021, 6, 1) => 0,
Date.new(2021, 7, 1) => 0
}
end
it do
is_expected.to eq(expected_result.to_a)
end
end
end