spec/lib/release_tools/metrics/monthly_release_status_spec.rb (74 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Metrics::MonthlyReleaseStatus do
let(:delivery_metrics) { instance_double(ReleaseTools::Metrics::Client) }
describe '#execute' do
before do
allow(ReleaseTools::Metrics::Client)
.to receive(:new)
.and_return(delivery_metrics)
end
context 'when the feature flag is disabled' do
subject(:release_status) { described_class.new(status: :open) }
it 'does nothing' do
expect(delivery_metrics).not_to receive(:set)
release_status.execute
end
end
context 'when creating a new metric for the monthly release' do
before do
upcoming_releases = {
'16.8' => '2024-01-18',
'16.9' => '2024-02-15',
'16.10' => '2024-03-21'
}
version = ReleaseTools::Version.new('16.9')
allow(ReleaseTools::GitlabReleasesGemClient)
.to receive_messages(upcoming_releases: upcoming_releases, version_for_date: version)
enable_feature(:release_status_metric)
end
context 'when it is a dry run' do
subject(:release_status) { described_class.new(status: :open) }
it 'does nothing' do
expect(delivery_metrics).not_to receive(:set)
release_status.execute
end
end
context 'when given an invalid status' do
subject(:release_status) { described_class.new(status: :invalid) }
it 'does nothing' do
expect(delivery_metrics).not_to receive(:set)
without_dry_run { release_status.execute }
end
end
context 'when the status is open' do
subject(:release_status) { described_class.new(status: :open) }
it 'creates a status metric for the upcoming version' do
expect(ReleaseTools::GitlabReleasesGemClient).to receive(:version_for_date)
.with(Date.tomorrow)
expect(delivery_metrics).to receive(:reset).with(described_class::METRIC)
expect(delivery_metrics).to receive(:set)
.with(described_class::METRIC, 1, { labels: "2024-02-15,16.9" })
without_dry_run { release_status.execute }
end
end
context 'when the status is announced' do
subject(:release_status) { described_class.new(status: :announced) }
it 'sets the value of the status metric for the next release version to 2 (announced)' do
expect(delivery_metrics).to receive(:reset).with(described_class::METRIC)
expect(delivery_metrics).to receive(:set)
.with(described_class::METRIC, 2, { labels: "2024-02-15,16.9" })
without_dry_run { release_status.execute }
end
end
context 'when the status is tagged RC' do
subject(:release_status) { described_class.new(status: :tagged_rc) }
it 'sets the value of the status metric for the next release version to 3 (tagged RC)' do
expect(delivery_metrics).to receive(:reset).with(described_class::METRIC)
expect(delivery_metrics).to receive(:set)
.with(described_class::METRIC, 3, { labels: "2024-02-15,16.9" })
without_dry_run { release_status.execute }
end
end
end
end
end