# frozen_string_literal: true

require 'spec_helper'

describe Whois::Server::Adapters::Afilias do
  let(:definition) { [:tld, ".test", "whois.afilias-grs.info", {}] }
  let(:server) { described_class.new(*definition) }


  describe "#lookup" do
    context "without referral" do
      it "returns the WHOIS record" do
        response = "No match for example.test."
        expected = response
        expect(server.query_handler).to receive(:call).with("example.test", "whois.afilias-grs.info", 43).and_return(response)

        record = server.lookup("example.test")
        expect(record.to_s).to eq(expected)
        expect(record.parts.size).to eq(1)
        expect(record.parts).to eq([Whois::Record::Part.new(body: response, host: "whois.afilias-grs.info")])
      end
    end

    context "with referral" do
      it "follows all referrals" do
        referral = File.read(fixture("referrals/afilias.bz.txt"))
        response = "Match for example.test."
        expected = "#{referral}\n#{response}"
        expect(server.query_handler).to receive(:call).with("example.test", "whois.afilias-grs.info", 43).and_return(referral)
        expect(server.query_handler).to receive(:call).with("example.test", "whois.belizenic.bz", 43).and_return(response)

        record = server.lookup("example.test")
        expect(record.to_s).to eq(expected)
        expect(record.parts.size).to eq(2)
        expect(record.parts).to eq([Whois::Record::Part.new(body: referral, host: "whois.afilias-grs.info"), Whois::Record::Part.new(body: response, host: "whois.belizenic.bz")])
      end

      it "ignores referral if options[:referral] is false" do
        referral = File.read(fixture("referrals/afilias.bz.txt"))
        server.options[:referral] = false
        expect(server.query_handler).to receive(:call).with("example.test", "whois.afilias-grs.info", 43).and_return(referral)
        expect(server.query_handler).to receive(:call).with("example.test", "whois.belizenic.bz", 43).never

        record = server.lookup("example.test")
        expect(record.parts.size).to eq(1)
      end
    end
  end
end