summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_resolver_best_set.rb
blob: dc6c9b4c44078926284f18352c4e7d293d53ac9c (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
130
131
132
133
134
135
136
137
# frozen_string_literal: true
require 'rubygems/test_case'

class TestGemResolverBestSet < Gem::TestCase

  def setup
    super

    @DR = Gem::Resolver
  end

  def test_initialize
    set = @DR::BestSet.new

    assert_empty set.sets
  end

  def test_find_all_index
    spec_fetcher do |fetcher|
      fetcher.spec 'a', 1
      fetcher.spec 'a', 2
      fetcher.spec 'b', 1
    end

    set = @DR::BestSet.new

    dependency = dep 'a', '~> 1'

    req = @DR::DependencyRequest.new dependency, nil

    found = set.find_all req

    assert_equal %w[a-1], found.map { |s| s.full_name }
  end

  def test_find_all_fallback
    spec_fetcher do |fetcher|
      fetcher.spec 'a', 1
    end

    set = @DR::BestSet.new

    api_uri = URI(@gem_repo) + './api/v1/dependencies'

    set.sets << Gem::Resolver::APISet.new(api_uri)

    dependency = dep 'a', '~> 1'

    req = @DR::DependencyRequest.new dependency, nil

    found = set.find_all req

    assert_equal %w[a-1], found.map { |s| s.full_name }
  end

  def test_find_all_local
    spec_fetcher do |fetcher|
      fetcher.spec 'a', 1
      fetcher.spec 'a', 2
      fetcher.spec 'b', 1
    end

    set = @DR::BestSet.new
    set.remote = false

    dependency = dep 'a', '~> 1'

    req = @DR::DependencyRequest.new dependency, nil

    found = set.find_all req

    assert_empty found
  end

  def test_prefetch
    spec_fetcher do |fetcher|
      fetcher.spec 'a', 1
    end

    set = @DR::BestSet.new

    set.prefetch []

    refute_empty set.sets
  end

  def test_prefetch_local
    spec_fetcher do |fetcher|
      fetcher.spec 'a', 1
    end

    set = @DR::BestSet.new
    set.remote = false

    set.prefetch []

    assert_empty set.sets
  end

  def test_replace_failed_api_set
    set = @DR::BestSet.new

    api_uri = URI(@gem_repo) + './api/v1/dependencies'
    api_set = Gem::Resolver::APISet.new api_uri

    set.sets << api_set

    error_uri = api_uri + '?gems=a'

    error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri

    set.replace_failed_api_set error

    assert_equal 1, set.sets.size

    refute_includes set.sets, api_set

    assert_kind_of Gem::Resolver::IndexSet, set.sets.first
  end

  def test_replace_failed_api_set_no_api_set
    set = @DR::BestSet.new

    index_set = Gem::Resolver::IndexSet.new Gem::Source.new @gem_repo

    set.sets << index_set

    error = Gem::RemoteFetcher::FetchError.new 'bogus', @gem_repo

    e = assert_raises Gem::RemoteFetcher::FetchError do
      set.replace_failed_api_set error
    end

    assert_equal error, e
  end

end