# frozen_string_literal: true

require "download_strategy"

RSpec.describe SubversionDownloadStrategy do
  subject(:strategy) { described_class.new(url, name, version, **specs) }

  let(:name) { "foo" }
  let(:url) { "https://example.com/foo.tar.gz" }
  let(:version) { "1.2.3" }
  let(:specs) { {} }

  describe "#fetch" do
    context "with :trust_cert set" do
      let(:specs) { { trust_cert: true } }

      it "adds the appropriate svn args" do
        expect(strategy).to receive(:system_command!)
          .with("svn", hash_including(args: array_including("--trust-server-cert", "--non-interactive")))
          .and_return(instance_double(SystemCommand::Result))

        strategy.fetch
      end
    end

    context "with :revision set" do
      let(:specs) { { revision: "10" } }

      it "adds svn arguments for :revision" do
        expect(strategy).to receive(:system_command!)
          .with("svn", hash_including(args: array_including_cons("-r", "10")))
          .and_return(instance_double(SystemCommand::Result))

        strategy.fetch
      end
    end
  end
end
