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