# frozen_string_literal: true

require 'basquiat/adapters/rabbitmq_adapter'

RSpec.describe Basquiat::Adapters::RabbitMq::Connection do
  subject(:connection) { Basquiat::Adapters::RabbitMq::Connection }

  let(:hosts) do
    [ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' }]
  end

  it '#connected?' do
    conn = connection.new(hosts: hosts)
    expect(conn.connected?).to be_falsey
    conn.start
    expect(conn.connected?).to_not be_truthy
    conn.disconnect
  end

  context 'failover' do
    let(:failover) do
      { default_timeout: 0.2, max_retries: 2, connection_timeout: 0.3 }
    end

    before(:each) { hosts.unshift('172.168.0.124') }

    it 'tries a reconnection after a few seconds' do
      conn = connection.new(hosts:    ['172.168.0.124'],
                            failover: { default_timeout: 0.2, max_retries: 1 })
      expect { conn.start }.to raise_error(Bunny::TCPConnectionFailed)
      conn.close
    end

    it 'uses another server after all retries on a single one' do
      conn = connection.new(hosts: hosts, failover: failover)
      expect { conn.start }.to_not raise_error
      expect(conn.host).to match(ENV.fetch('BASQUIAT_RABBITMQ_1_PORT_5672_TCP_ADDR') { 'localhost' })
      conn.close
    end
  end
end
