81 lines
2.6 KiB
Ruby
81 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rake_helper'
|
|
|
|
RSpec.describe 'gitlab:product_intelligence:activate_metrics', :silence_stdout do
|
|
def fake_metric(key_path, milestone: 'test_milestone', status: 'implemented')
|
|
Gitlab::Usage::MetricDefinition.new(key_path, { key_path: key_path, milestone: milestone, status: status })
|
|
end
|
|
|
|
before do
|
|
Rake.application.rake_require 'tasks/gitlab/product_intelligence'
|
|
stub_warn_user_is_not_gitlab
|
|
end
|
|
|
|
describe 'activate_metrics' do
|
|
it 'fails if the MILESTONE env var is not set' do
|
|
stub_env('MILESTONE' => nil)
|
|
|
|
expect { run_rake_task('gitlab:product_intelligence:activate_metrics') }.to raise_error(RuntimeError, 'Please supply the MILESTONE env var')
|
|
end
|
|
|
|
context 'with MILESTONE env var' do
|
|
subject do
|
|
updated_metrics = []
|
|
|
|
file = double('file')
|
|
allow(file).to receive(:<<) { |contents| updated_metrics << YAML.safe_load(contents) }
|
|
allow(File).to receive(:open).and_yield(file)
|
|
|
|
stub_env('MILESTONE' => 'test_milestone')
|
|
run_rake_task('gitlab:product_intelligence:activate_metrics')
|
|
|
|
updated_metrics
|
|
end
|
|
|
|
let(:metric_definitions) do
|
|
{
|
|
matching_metric: fake_metric('matching_metric'),
|
|
matching_metric2: fake_metric('matching_metric2'),
|
|
other_status_metric: fake_metric('other_status_metric', status: 'deprecated'),
|
|
other_milestone_metric: fake_metric('other_milestone_metric', milestone: 'other_milestone')
|
|
}
|
|
end
|
|
|
|
before do
|
|
allow(Gitlab::Usage::MetricDefinition).to receive(:definitions).and_return(metric_definitions)
|
|
end
|
|
|
|
context 'with metric matching status and milestone' do
|
|
it 'updates matching_metric yaml file' do
|
|
expect(subject).to eq([
|
|
{ 'key_path' => 'matching_metric', 'milestone' => 'test_milestone', 'status' => 'data_available' },
|
|
{ 'key_path' => 'matching_metric2', 'milestone' => 'test_milestone', 'status' => 'data_available' }
|
|
])
|
|
end
|
|
end
|
|
|
|
context 'without metrics definitions' do
|
|
let(:metric_definitions) { {} }
|
|
|
|
it 'runs successfully with no updates' do
|
|
expect(subject).to eq([])
|
|
end
|
|
end
|
|
|
|
context 'without matching metrics' do
|
|
let(:metric_definitions) do
|
|
{
|
|
other_status_metric: fake_metric('other_status_metric', status: 'deprecated'),
|
|
other_milestone_metric: fake_metric('other_milestone_metric', milestone: 'other_milestone')
|
|
}
|
|
end
|
|
|
|
it 'runs successfully with no updates' do
|
|
expect(subject).to eq([])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|