spec/lib/release_tools/deployments/grafana_annotator_spec.rb (114 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' RSpec.describe ReleaseTools::Deployments::GrafanaAnnotator do subject(:annotator) { described_class.new(blocker) } let(:blocker_no_duration_label) do ReleaseTools::Deployments::BlockerIssue.new( create(:issue, labels: ['release-blocker'], created_at: "2023-12-05T04:29:15.929Z", id: 100) ) end let(:blocker_one_duration_label) do ReleaseTools::Deployments::BlockerIssue.new( create( :issue, id: 101, labels: ['release-blocker', 'Deploys-blocked-gstg::6hr'], created_at: "2023-12-05T04:29:15.929Z" ) ) end let(:blocker_two_duration_label) do ReleaseTools::Deployments::BlockerIssue.new( create( :issue, id: 102, labels: ['release-blocker', 'Deploys-blocked-gstg::6hr', 'Deploys-blocked-gprd::8hr'], created_at: "2023-12-05T04:29:15.929Z" ) ) end let(:blocker_root_cause_label) do ReleaseTools::Deployments::BlockerIssue.new( create( :issue, id: 103, labels: [ 'release-blocker', 'Deploys-blocked-gstg::6hr', 'Deploys-blocked-gprd::8hr', 'RootCause::Flaky-Test' ], created_at: "2023-12-05T04:29:15.929Z" ) ) end before do enable_feature(:grafana_annotations) stub_request(:post, "https://example.com/api/annotations").to_return(body: 'foo', status: 200) end around do |ex| ClimateControl.modify('GRAFANA_URL' => 'https://example.com') do ex.run end end describe '#execute' do let(:blocker) { blocker_no_duration_label } it 'generates the right Grafana request with the correct payload' do expect(JSON) .to receive(:generate) .with( "dashboardUID" => "delivery-auto_deploy_packages", "panelId" => 2, "time" => 1_701_750_555_000, "timeEnd" => 1_701_750_555_000, "text" => "<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://example.com/foo/bar/-/issues/100\">A title for issue 100</a>", "tags" => [] ) annotator.execute end context 'with one duration label' do let(:blocker) { blocker_one_duration_label } it 'generates the right Grafana request for blocker with one duration label' do expect(JSON) .to receive(:generate) .with( "dashboardUID" => "delivery-auto_deploy_packages", "panelId" => 2, "time" => 1_701_750_555_000, "timeEnd" => 1_701_772_155_000, "text" => "<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://example.com/foo/bar/-/issues/101\">A title for issue 101</a>", "tags" => [] ) annotator.execute end end context 'with two duration labels' do let(:blocker) { blocker_two_duration_label } it 'generates the right Grafana request for blocker with two duration label' do expect(JSON) .to receive(:generate) .with( "dashboardUID" => "delivery-auto_deploy_packages", "panelId" => 2, "time" => 1_701_750_555_000, "timeEnd" => 1_701_779_355_000, "text" => "<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://example.com/foo/bar/-/issues/102\">A title for issue 102</a>", "tags" => [] ) annotator.execute end end context 'with root cause label' do let(:blocker) { blocker_root_cause_label } it 'generates the right Grafana request for blocker with root cause label' do expect(JSON) .to receive(:generate) .with( "dashboardUID" => "delivery-auto_deploy_packages", "panelId" => 2, "time" => 1_701_750_555_000, "timeEnd" => 1_701_779_355_000, "text" => "<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://example.com/foo/bar/-/issues/103\">A title for issue 103</a>", "tags" => ["RootCause-Flaky-Test"] ) described_class.new(blocker_root_cause_label).execute end end end end