# frozen_string_literal: true

require 'fast_spec_helper'
require 'rspec-parameterized'

describe Gitlab::Tracing do
  using RSpec::Parameterized::TableSyntax

  describe '.enabled?' do
    where(:connection_string, :enabled_state) do
      nil                     | false
      ""                      | false
      "opentracing://jaeger"  | true
    end

    with_them do
      it 'should return the correct state for .enabled?' do
        expect(described_class).to receive(:connection_string).and_return(connection_string)

        expect(described_class.enabled?).to eq(enabled_state)
      end
    end
  end

  describe '.tracing_url_enabled?' do
    where(:enabled?, :tracing_url_template, :tracing_url_enabled_state) do
      false | nil                | false
      false | ""                 | false
      false | "http://localhost" | false
      true  | nil                | false
      true  | ""                 | false
      true  | "http://localhost" | true
    end

    with_them do
      it 'should return the correct state for .tracing_url_enabled?' do
        expect(described_class).to receive(:enabled?).and_return(enabled?)
        allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)

        expect(described_class.tracing_url_enabled?).to eq(tracing_url_enabled_state)
      end
    end
  end

  describe '.tracing_url' do
    where(:tracing_url_enabled?, :tracing_url_template, :correlation_id, :process_name, :tracing_url) do
      false | "https://localhost"                                  | "123" | "web" | nil
      true  | "https://localhost"                                  | "123" | "web" | "https://localhost"
      true  | "https://localhost?service=%{service}"               | "123" | "web" | "https://localhost?service=web"
      true  | "https://localhost?c=%{correlation_id}"              | "123" | "web" | "https://localhost?c=123"
      true  | "https://localhost?c=%{correlation_id}&s=%{service}" | "123" | "web" | "https://localhost?c=123&s=web"
      true  | "https://localhost?c=%{correlation_id}"              | nil   | "web" | "https://localhost?c="
    end

    with_them do
      it 'should return the correct state for .tracing_url' do
        expect(described_class).to receive(:tracing_url_enabled?).and_return(tracing_url_enabled?)
        allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
        allow(Gitlab::CorrelationId).to receive(:current_id).and_return(correlation_id)
        allow(Gitlab).to receive(:process_name).and_return(process_name)

        expect(described_class.tracing_url).to eq(tracing_url)
      end
    end
  end
end
