# frozen_string_literal: true require 'fast_spec_helper' require 'rspec-parameterized' require "support/graphql/fake_query_type" RSpec.describe Gitlab::Graphql::Tracers::MetricsTracer do using RSpec::Parameterized::TableSyntax let(:default_known_operations) { ::Gitlab::Graphql::KnownOperations.new(%w(lorem foo bar)) } let(:fake_schema) do Class.new(GraphQL::Schema) do use Gitlab::Graphql::Tracers::ApplicationContextTracer use Gitlab::Graphql::Tracers::MetricsTracer use Gitlab::Graphql::Tracers::TimerTracer query Graphql::FakeQueryType end end around do |example| ::Gitlab::ApplicationContext.with_context(feature_category: 'test_feature_category') do example.run end end before do allow(::Gitlab::Graphql::KnownOperations).to receive(:default).and_return(default_known_operations) end describe 'when used as tracer and query is executed' do where(:duration, :expected_success) do 0.1 | true 0.1 + ::Gitlab::EndpointAttributes::DEFAULT_URGENCY.duration | false end with_them do it 'increments sli' do # Trigger initialization fake_schema # setup timer current_time = 0 allow(Gitlab::Metrics::System).to receive(:monotonic_time) { current_time += duration } expect(Gitlab::Metrics::RailsSlis.graphql_query_apdex).to receive(:increment).with( labels: { endpoint_id: 'graphql:lorem', feature_category: 'test_feature_category', query_urgency: ::Gitlab::EndpointAttributes::DEFAULT_URGENCY.name }, success: expected_success ) fake_schema.execute("query lorem { helloWorld }") end end end end