1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/rubygems/test_gem_commands_push_command.rb
drbrain 6fe32d7266 * lib/rubygems/commands/check_command.rb: Added --doctor and --dry-run
options to clean up after failed uninstallation.
	* test/rubygems/test_gem_commands_check_command.rb:  Test for above.

	* lib/rubygems/commands/push_command.rb:  Allow pushes from RubyGems
	  2.0.0.preview3

	* lib/rubygems/commands/update_command.rb:  Use Gem.ruby_version

	* lib/rubygems/dependency.rb:  Update style.

	* lib/rubygems/installer.rb:  Ensure installed gem specifications will
	  be useable.  Refactor.
	* test/rubygems/test_gem_installer.rb:  ditto.

	* lib/rubygems/validator.rb:  Fixed bug with unreadable files.

	* lib/rubygems.rb:  Fixed broken methods.
	* test/rubygems/test_gem.rb:  Test for above.

	* test/rubygems/test_gem_commands_push_command.rb:  Fixed overridden
	  Gem.latest_rubygems_version


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-23 00:35:09 +00:00

170 lines
4.5 KiB
Ruby

require 'rubygems/test_case'
require 'rubygems/commands/push_command'
class TestGemCommandsPushCommand < Gem::TestCase
def setup
super
ENV["RUBYGEMS_HOST"] = nil
Gem.host = Gem::DEFAULT_HOST
Gem.configuration.disable_default_gem_server = false
@gems_dir = File.join @tempdir, 'gems'
@cache_dir = File.join @gemhome, "cache"
FileUtils.mkdir @gems_dir
Gem.configuration.rubygems_api_key =
"ed244fbf2b1a52e012da8616c512fa47f9aa5250"
@spec, @path = util_gem "freewill", "1.0.0"
@host = Gem.host
@api_key = Gem.configuration.rubygems_api_key
@fetcher = Gem::FakeFetcher.new
Gem::RemoteFetcher.fetcher = @fetcher
@cmd = Gem::Commands::PushCommand.new
class << Gem
alias_method :orig_latest_rubygems_version, :latest_rubygems_version
def latest_rubygems_version
Gem.rubygems_version
end
end
end
def teardown
super
class << Gem
remove_method :latest_rubygems_version
alias_method :latest_rubygems_version, :orig_latest_rubygems_version
end
end
def send_battery
use_ui @ui do
@cmd.send_gem(@path)
end
assert_match %r{Pushing gem to #{@host}...}, @ui.output
assert_equal Net::HTTP::Post, @fetcher.last_request.class
assert_equal Gem.read_binary(@path), @fetcher.last_request.body
assert_equal File.size(@path), @fetcher.last_request["Content-Length"].to_i
assert_equal "application/octet-stream", @fetcher.last_request["Content-Type"]
assert_equal @api_key, @fetcher.last_request["Authorization"]
assert_match @response, @ui.output
end
def test_sending_when_default_host_disabled
Gem.configuration.disable_default_gem_server = true
response = "You must specify a gem server"
assert_raises Gem::MockGemUi::TermError do
use_ui @ui do
@cmd.send_gem(@path)
end
end
assert_match response, @ui.error
end
def test_sending_when_default_host_disabled_with_override
ENV["RUBYGEMS_HOST"] = @host
Gem.configuration.disable_default_gem_server = true
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
send_battery
end
def test_sending_gem_to_metadata_host
@host = "http://rubygems.engineyard.com"
@spec, @path = util_gem "freebird", "1.0.1" do |spec|
spec.metadata['default_gem_server'] = @host
end
@api_key = "EYKEY"
keys = {
:rubygems_api_key => 'KEY',
@host => @api_key
}
FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
open Gem.configuration.credentials_path, 'w' do |f|
f.write keys.to_yaml
end
Gem.configuration.load_api_keys
FileUtils.rm Gem.configuration.credentials_path
@response = "Successfully registered gem: freebird (1.0.1)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
send_battery
end
def test_sending_gem_default
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
send_battery
end
def test_sending_gem_host
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
@cmd.options['host'] = "#{Gem.host}"
send_battery
end
def test_sending_gem_ENV
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
ENV["RUBYGEMS_HOST"] = "#{Gem.host}"
send_battery
end
def test_raises_error_with_no_arguments
def @cmd.sign_in; end
assert_raises Gem::CommandLineError do
@cmd.execute
end
end
def test_sending_gem_denied
response = "You don't have permission to push to this gem"
@fetcher.data["#{@host}/api/v1/gems"] = [response, 403, 'Forbidden']
assert_raises Gem::MockGemUi::TermError do
use_ui @ui do
@cmd.send_gem(@path)
end
end
assert_match response, @ui.output
end
def test_sending_gem_key
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, "OK"]
File.open Gem.configuration.credentials_path, 'a' do |f|
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
end
Gem.configuration.load_api_keys
@cmd.handle_options %w(-k other)
@cmd.send_gem(@path)
assert_equal Gem.configuration.api_keys[:other],
@fetcher.last_request["Authorization"]
end
end