debian-mirror-gitlab/spec/lib/gitlab/metrics/dashboard/stages/url_validator_spec.rb
2020-08-09 17:44:08 +05:30

101 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Metrics::Dashboard::Stages::UrlValidator do
let(:project) { build_stubbed(:project) }
describe '#transform!' do
context 'when the links contain a blocked url' do
let(:dashboard) do
{
dashboard: "Test Dashboard",
links: [
{ url: "http://1.1.1.1.1" },
{ url: "https://gitlab.com" },
{ url: "http://0.0.0.0" }
],
panel_groups: [
{
group: "Group A",
panels: [
{
title: "Super Chart A1",
type: "area-chart",
y_label: "y_label",
metrics: [
{
id: "metric_a1",
query_range: "query",
unit: "unit",
label: "Legend Label"
}
],
links: [
{ url: "http://1.1.1.1.1" },
{ url: "https://gitlab.com" },
{ url: "http://0.0.0.0" }
]
}
]
}
]
}
end
let(:expected) do
[{ url: '' }, { url: 'https://gitlab.com' }, { url: 'http://0.0.0.0' }]
end
let(:transform!) { described_class.new(project, dashboard, nil).transform! }
before do
stub_env('RSPEC_ALLOW_INVALID_URLS', 'false')
stub_application_setting(allow_local_requests_from_web_hooks_and_services: true)
end
context 'dashboard related links' do
it 'replaces the blocked url with an empty string' do
transform!
expect(dashboard[:links]).to eq(expected)
end
end
context 'chart links' do
it 'replaces the blocked url with an empty string' do
transform!
result = dashboard.dig(:panel_groups, 0, :panels, 0, :links)
expect(result).to eq(expected)
end
end
context 'when local requests are not allowed' do
before do
stub_application_setting(allow_local_requests_from_web_hooks_and_services: false)
end
let(:expected) do
[{ url: '' }, { url: 'https://gitlab.com' }, { url: '' }]
end
it 'replaces the blocked url with an empty string' do
transform!
expect(dashboard[:links]).to eq(expected)
end
end
context 'when the links are an array of strings instead of hashes' do
before do
dashboard[:links] = dashboard[:links].map(&:values)
end
it 'prevents an invalid link definition from erroring out' do
expect { transform! }.not_to raise_error
end
end
end
end
end