# frozen_string_literal: true

require 'rails_helper'

RSpec.describe DatabaseHelper do
  context 'when a replica is enabled' do
    around do |example|
      ClimateControl.modify REPLICA_DB_NAME: 'prod-relay-quantum-tunnel-mirror' do
        example.run
      end
    end

    before { allow(ApplicationRecord).to receive(:connected_to) }

    describe '#with_read_replica' do
      it 'uses the replica for connections' do
        helper.with_read_replica { _x = 1 }

        expect(ApplicationRecord)
          .to have_received(:connected_to).with(role: :reading, prevent_writes: true)
      end
    end

    describe '#with_primary' do
      it 'uses the primary for connections' do
        helper.with_primary { _x = 1 }

        expect(ApplicationRecord)
          .to have_received(:connected_to).with(role: :writing)
      end
    end
  end

  context 'when a replica is not enabled' do
    around do |example|
      ClimateControl.modify REPLICA_DB_NAME: nil do
        example.run
      end
    end

    before { allow(ApplicationRecord).to receive(:connected_to) }

    describe '#with_read_replica' do
      it 'does not use the replica for connections' do
        helper.with_read_replica { _x = 1 }

        expect(ApplicationRecord)
          .to_not have_received(:connected_to).with(role: :reading, prevent_writes: true)
      end
    end

    describe '#with_primary' do
      it 'does not use the primary for connections' do
        helper.with_primary { _x = 1 }

        expect(ApplicationRecord)
          .to_not have_received(:connected_to).with(role: :writing)
      end
    end
  end
end