blob: d35a6916a8f11c18ceec30cb2b1c63d8ef4a331d (
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# frozen_string_literal: true
require "spec_helper"
RSpec.describe Bundler::Source do
class ExampleSource < Bundler::Source
end
subject { ExampleSource.new }
describe "#unmet_deps" do
let(:specs) { double(:specs) }
let(:unmet_dependency_names) { double(:unmet_dependency_names) }
before do
allow(subject).to receive(:specs).and_return(specs)
allow(specs).to receive(:unmet_dependency_names).and_return(unmet_dependency_names)
end
it "should return the names of unmet dependencies" do
expect(subject.unmet_deps).to eq(unmet_dependency_names)
end
end
describe "#version_message" do
let(:spec) { double(:spec, :name => "nokogiri", :version => ">= 1.6", :platform => rb) }
shared_examples_for "the lockfile specs are not relevant" do
it "should return a string with the spec name and version" do
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6")
end
end
context "when there are locked gems" do
let(:locked_gems) { double(:locked_gems) }
before { allow(Bundler).to receive(:locked_gems).and_return(locked_gems) }
context "that contain the relevant gem spec" do
before do
specs = double(:specs)
allow(locked_gems).to receive(:specs).and_return(specs)
allow(specs).to receive(:find).and_return(locked_gem)
end
context "without a version" do
let(:locked_gem) { double(:locked_gem, :name => "nokogiri", :version => nil) }
it_behaves_like "the lockfile specs are not relevant"
end
context "with the same version" do
let(:locked_gem) { double(:locked_gem, :name => "nokogiri", :version => ">= 1.6") }
it_behaves_like "the lockfile specs are not relevant"
end
context "with a different version" do
let(:locked_gem) { double(:locked_gem, :name => "nokogiri", :version => "< 1.5") }
context "with color" do
before { Bundler.ui = Bundler::UI::Shell.new }
it "should return a string with the spec name and version and locked spec version" do
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6\e[32m (was < 1.5)\e[0m")
end
end
context "without color" do
it "should return a string with the spec name and version and locked spec version" do
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6 (was < 1.5)")
end
end
end
end
context "that do not contain the relevant gem spec" do
before do
specs = double(:specs)
allow(locked_gems).to receive(:specs).and_return(specs)
allow(specs).to receive(:find).and_return(nil)
end
it_behaves_like "the lockfile specs are not relevant"
end
end
context "when there are no locked gems" do
before { allow(Bundler).to receive(:locked_gems).and_return(nil) }
it_behaves_like "the lockfile specs are not relevant"
end
end
describe "#can_lock?" do
context "when the passed spec's source is equivalent" do
let(:spec) { double(:spec, :source => subject) }
it "should return true" do
expect(subject.can_lock?(spec)).to be_truthy
end
end
context "when the passed spec's source is not equivalent" do
let(:spec) { double(:spec, :source => double(:other_source)) }
it "should return false" do
expect(subject.can_lock?(spec)).to be_falsey
end
end
end
describe "#include?" do
context "when the passed source is equivalent" do
let(:source) { subject }
it "should return true" do
expect(subject).to include(source)
end
end
context "when the passed source is not equivalent" do
let(:source) { double(:source) }
it "should return false" do
expect(subject).to_not include(source)
end
end
end
end
|