1require 'rubygems/test_case'
2require 'rubygems/package'
3require 'rubygems/security'
4require 'rubygems/commands/fetch_command'
5
6class TestGemCommandsFetchCommand < Gem::TestCase
7
8  def setup
9    super
10
11    @cmd = Gem::Commands::FetchCommand.new
12  end
13
14  def test_execute
15    util_setup_fake_fetcher
16    util_setup_spec_fetcher @a2
17
18    @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
19      File.read(@a2.cache_file)
20
21    refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
22
23    @cmd.options[:args] = [@a2.name]
24
25    use_ui @ui do
26      Dir.chdir @tempdir do
27        @cmd.execute
28      end
29    end
30
31    assert_path_exists(File.join(@tempdir, @a2.file_name),
32                       "#{@a2.full_name} not fetched")
33    refute_path_exists File.join(@tempdir, 'cache'),
34                       'gem repository directories must not be created'
35  end
36
37  def test_execute_latest
38    util_setup_fake_fetcher
39    util_setup_spec_fetcher @a1, @a2
40
41    @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
42      File.read(@a1.cache_file)
43    @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
44      File.read(@a2.cache_file)
45
46    refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
47
48    @cmd.options[:args] = [@a2.name]
49    @cmd.options[:version] = req('>= 0.1')
50
51    use_ui @ui do
52      Dir.chdir @tempdir do
53        @cmd.execute
54      end
55    end
56
57    assert_path_exists(File.join(@tempdir, @a2.file_name),
58                       "#{@a2.full_name} not fetched")
59    refute_path_exists File.join(@tempdir, 'cache'),
60                       'gem repository directories must not be created'
61  end
62
63  def test_execute_prerelease
64    util_setup_fake_fetcher true
65    util_clear_gems
66    util_setup_spec_fetcher @a2, @a2_pre
67
68    @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
69      File.read(@a2.cache_file)
70    @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
71      File.read(@a2_pre.cache_file)
72
73    @cmd.options[:args] = [@a2.name]
74    @cmd.options[:prerelease] = true
75
76    use_ui @ui do
77      Dir.chdir @tempdir do
78        @cmd.execute
79      end
80    end
81
82    assert_path_exists(File.join(@tempdir, @a2.file_name),
83                       "#{@a2.full_name} not fetched")
84  end
85
86  def test_execute_specific_prerelease
87    util_setup_fake_fetcher true
88    util_clear_gems
89    util_setup_spec_fetcher @a2, @a2_pre
90
91    @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
92      File.read(@a2.cache_file)
93    @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
94      File.read(@a2_pre.cache_file)
95
96    @cmd.options[:args] = [@a2.name]
97    @cmd.options[:prerelease] = true
98    @cmd.options[:version] = "2.a"
99
100    use_ui @ui do
101      Dir.chdir @tempdir do
102        @cmd.execute
103      end
104    end
105
106    assert_path_exists(File.join(@tempdir, @a2_pre.file_name),
107                       "#{@a2_pre.full_name} not fetched")
108  end
109
110  def test_execute_version
111    util_setup_fake_fetcher
112    util_setup_spec_fetcher @a1, @a2
113
114    @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
115      File.read(@a1.cache_file)
116
117    @cmd.options[:args] = [@a2.name]
118    @cmd.options[:version] = Gem::Requirement.new '1'
119
120    use_ui @ui do
121      Dir.chdir @tempdir do
122        @cmd.execute
123      end
124    end
125
126    assert_path_exists(File.join(@tempdir, @a1.file_name),
127                       "#{@a1.full_name} not fetched")
128  end
129
130end
131
132