2020-05-19 00:07:58 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-06-24 18:09:03 +00:00
|
|
|
RSpec.describe PerformanceMonitoring::PrometheusPanelGroup do
|
2020-05-19 00:07:58 +00:00
|
|
|
let(:json_content) do
|
|
|
|
{
|
|
|
|
"group" => "Group Title",
|
|
|
|
"panels" => [{
|
|
|
|
"type" => "area-chart",
|
|
|
|
"title" => "Chart Title",
|
|
|
|
"y_label" => "Y-Axis",
|
|
|
|
"metrics" => [{
|
|
|
|
"id" => "metric_of_ages",
|
|
|
|
"unit" => "count",
|
|
|
|
"label" => "Metric of Ages",
|
|
|
|
"query_range" => "http_requests_total"
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '.from_json' do
|
|
|
|
subject { described_class.from_json(json_content) }
|
|
|
|
|
|
|
|
it 'creates a PrometheusPanelGroup object' do
|
|
|
|
expect(subject).to be_a PerformanceMonitoring::PrometheusPanelGroup
|
|
|
|
expect(subject.group).to eq(json_content['group'])
|
|
|
|
expect(subject.panels).to all(be_a PerformanceMonitoring::PrometheusPanel)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'validations' do
|
2020-06-05 18:08:19 +00:00
|
|
|
context 'json_content is not a hash' do
|
|
|
|
let(:json_content) { nil }
|
|
|
|
|
|
|
|
subject { described_class.from_json(json_content) }
|
|
|
|
|
|
|
|
it { expect { subject }.to raise_error(ActiveModel::ValidationError) }
|
|
|
|
end
|
|
|
|
|
2020-05-19 00:07:58 +00:00
|
|
|
context 'when group is missing' do
|
|
|
|
before do
|
2020-06-03 09:08:47 +00:00
|
|
|
json_content.delete('group')
|
2020-05-19 00:07:58 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
subject { described_class.from_json(json_content) }
|
|
|
|
|
|
|
|
it { expect { subject }.to raise_error(ActiveModel::ValidationError) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when panels are missing' do
|
|
|
|
before do
|
|
|
|
json_content['panels'] = []
|
|
|
|
end
|
|
|
|
|
|
|
|
subject { described_class.from_json(json_content) }
|
|
|
|
|
|
|
|
it { expect { subject }.to raise_error(ActiveModel::ValidationError) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|