aboutsummaryrefslogtreecommitdiffstats
path: root/spec/bundler/bundler/plugin/api/source_spec.rb
blob: 4dbb993b898fdca75fde5d6b5612bf4a48392142 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true
require "spec_helper"

RSpec.describe Bundler::Plugin::API::Source do
  let(:uri) { "uri://to/test" }
  let(:type) { "spec_type" }

  subject(:source) do
    klass = Class.new
    klass.send :include, Bundler::Plugin::API::Source
    klass.new("uri" => uri, "type" => type)
  end

  describe "attributes" do
    it "allows access to uri" do
      expect(source.uri).to eq("uri://to/test")
    end

    it "allows access to name" do
      expect(source.name).to eq("spec_type at uri://to/test")
    end
  end

  context "post_install" do
    let(:installer) { double(:installer) }

    before do
      allow(Bundler::Source::Path::Installer).to receive(:new) { installer }
    end

    it "calls Path::Installer's post_install" do
      expect(installer).to receive(:post_install).once

      source.post_install(double(:spec))
    end
  end

  context "install_path" do
    let(:uri) { "uri://to/a/repository-name" }
    let(:hash) { Digest::SHA1.hexdigest(uri) }
    let(:install_path) { Pathname.new "/bundler/install/path" }

    before do
      allow(Bundler).to receive(:install_path) { install_path }
    end

    it "returns basename with uri_hash" do
      expected = Pathname.new "#{install_path}/repository-name-#{hash[0..11]}"
      expect(source.install_path).to eq(expected)
    end
  end

  context "to_lock" do
    it "returns the string with remote and type" do
      expected = strip_whitespace <<-L
        PLUGIN SOURCE
          remote: #{uri}
          type: #{type}
          specs:
      L

      expect(source.to_lock).to eq(expected)
    end

    context "with additional options to lock" do
      before do
        allow(source).to receive(:options_to_lock) { { "first" => "option" } }
      end

      it "includes them" do
        expected = strip_whitespace <<-L
          PLUGIN SOURCE
            remote: #{uri}
            type: #{type}
            first: option
            specs:
        L

        expect(source.to_lock).to eq(expected)
      end
    end
  end
end