summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_bundler_version_finder.rb
blob: 7dafe13033991b6e2aa270bf008161178d229e40 (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
# frozen_string_literal: true
require 'rubygems/test_case'

class TestGemBundlerVersionFinder < Gem::TestCase
  def setup
    @argv = ARGV.dup
    @env = ENV.to_hash.clone
    ENV.delete("BUNDLER_VERSION")
    @dollar_0 = $0
  end

  def teardown
    ARGV.replace @argv
    ENV.replace @env
    $0 = @dollar_0
  end

  def bvf
    Gem::BundlerVersionFinder
  end

  def test_bundler_version_defaults_to_nil
    assert_nil bvf.bundler_version
  end

  def test_bundler_version_with_env_var
    ENV["BUNDLER_VERSION"] = "1.1.1.1"
    assert_equal v("1.1.1.1"), bvf.bundler_version
  end

  def test_bundler_version_with_bundle_update_bundler
    ARGV.replace %w[update --bundler]
    assert_nil bvf.bundler_version
    $0 = "/foo/bar/bundle"
    assert_nil bvf.bundler_version
    ARGV.replace %w[update --bundler=1.1.1.1 gem_name]
    assert_equal v("1.1.1.1"), bvf.bundler_version
    ARGV.replace %w[update --bundler 1.1.1.1 gem_name]
    assert_equal v("1.1.1.1"), bvf.bundler_version
    ARGV.replace %w[update --bundler\ 1.1.1.1 gem_name]
    assert_equal v("1.1.1.1"), bvf.bundler_version
    ARGV.replace %w[update --bundler\ 1.1.1.2 --bundler --bundler 1.1.1.1 gem_name]
    assert_equal v("1.1.1.1"), bvf.bundler_version
    $0 = "other"
    assert_nil bvf.bundler_version
  end

  def test_bundler_version_with_lockfile
    bvf.stub(:lockfile_contents, [nil, ""]) do
      assert_nil bvf.bundler_version
    end
    bvf.stub(:lockfile_contents, [nil, "\n\nBUNDLED WITH\n   1.1.1.1\n"]) do
      assert_equal v("1.1.1.1"), bvf.bundler_version
    end
    bvf.stub(:lockfile_contents, [nil, "\n\nBUNDLED WITH\n   fjdkslfjdkslfjsldk\n"]) do
      assert_nil bvf.bundler_version
    end
  end

  def test_bundler_version_with_reason
    assert_nil bvf.bundler_version_with_reason
    bvf.stub(:lockfile_contents, [nil, "\n\nBUNDLED WITH\n   1.1.1.1\n"]) do
      assert_equal ["1.1.1.1", "your lockfile"], bvf.bundler_version_with_reason

      $0 = "bundle"
      ARGV.replace %w[update --bundler]
      assert_nil bvf.bundler_version_with_reason
      ARGV.replace %w[update --bundler=1.1.1.2]
      assert_equal ["1.1.1.2", "`bundle update --bundler`"], bvf.bundler_version_with_reason

      ENV["BUNDLER_VERSION"] = "1.1.1.3"
      assert_equal ["1.1.1.3", "`$BUNDLER_VERSION`"], bvf.bundler_version_with_reason
    end
  end

  def test_compatible
    assert bvf.compatible?(util_spec("foo"))
    assert bvf.compatible?(util_spec("bundler", 1.1))

    bvf.stub(:bundler_version, v("1.1.1.1")) do
      assert bvf.compatible?(util_spec("foo"))
      assert bvf.compatible?(util_spec("bundler", "1.1.1.1"))
      assert bvf.compatible?(util_spec("bundler", "1.1.1.a"))
      assert bvf.compatible?(util_spec("bundler", "1.999"))
      refute bvf.compatible?(util_spec("bundler", "2.999"))
    end

    bvf.stub(:bundler_version, v("2.1.1.1")) do
      assert bvf.compatible?(util_spec("foo"))
      assert bvf.compatible?(util_spec("bundler", "2.1.1.1"))
      refute bvf.compatible?(util_spec("bundler", "2.1.1.a"))
      refute bvf.compatible?(util_spec("bundler", "1.999"))
      refute bvf.compatible?(util_spec("bundler", "2.999"))
    end
  end

  def test_filter
    versions = %w[1 1.0 1.0.1.1 2.a 3 3.0]
    specs = versions.map { |v| util_spec("bundler", v) }

    assert_equal %w[1 1.0 1.0.1.1 2.a 3 3.0], util_filter_specs(specs).map(&:version).map(&:to_s)

    bvf.stub(:bundler_version, v("2.1.1.1")) do
      assert_empty util_filter_specs(specs).map(&:version).map(&:to_s)
    end
    bvf.stub(:bundler_version, v("1.1.1.1")) do
      assert_equal %w[1 1.0 1.0.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
    end
    bvf.stub(:bundler_version, v("1")) do
      assert_equal %w[1 1.0 1.0.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
    end
    bvf.stub(:bundler_version, v("2.a")) do
      assert_equal %w[2.a], util_filter_specs(specs).map(&:version).map(&:to_s)
    end
    bvf.stub(:bundler_version, v("3")) do
      assert_equal %w[3 3.0], util_filter_specs(specs).map(&:version).map(&:to_s)
    end
  end

  def util_filter_specs(specs)
    specs = specs.dup
    bvf.filter!(specs)
    specs
  end
end