aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems/test_gem_commands_push_command.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-09-18 21:29:41 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-09-18 21:29:41 +0000
commit95683e5cb2d1ab8351402b09ef853dcdf875bf8d (patch)
tree44500dba22e9aa94ecc5d4fd348512d0fb236501 /test/rubygems/test_gem_commands_push_command.rb
parent81629f05312cc4df2193a17f13c581eda174d9af (diff)
downloadruby-95683e5cb2d1ab8351402b09ef853dcdf875bf8d.tar.gz
* lib/rubygems: Update to RubyGems 2.2.0.preview.1
This brings several new features to RubyGems summarized here: https://github.com/rubygems/rubygems/blob/v2.2.0.preview.1/History.txt * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42967 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_commands_push_command.rb')
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb84
1 files changed, 76 insertions, 8 deletions
diff --git a/test/rubygems/test_gem_commands_push_command.rb b/test/rubygems/test_gem_commands_push_command.rb
index 52109d0ae4..7d3d2efb88 100644
--- a/test/rubygems/test_gem_commands_push_command.rb
+++ b/test/rubygems/test_gem_commands_push_command.rb
@@ -62,17 +62,15 @@ class TestGemCommandsPushCommand < Gem::TestCase
end
def test_execute
- open 'example', 'w' do |io| io.write 'hello' end
-
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{Gem.host}/api/v1/gems"] = [@response, 200, 'OK']
- @cmd.options[:args] = %w[example]
+ @cmd.options[:args] = [@path]
@cmd.execute
assert_equal Net::HTTP::Post, @fetcher.last_request.class
- assert_equal 'hello', @fetcher.last_request.body
+ assert_equal Gem.read_binary(@path), @fetcher.last_request.body
assert_equal "application/octet-stream",
@fetcher.last_request["Content-Type"]
end
@@ -80,20 +78,18 @@ class TestGemCommandsPushCommand < Gem::TestCase
def test_execute_host
host = 'https://other.example'
- open 'example', 'w' do |io| io.write 'hello' end
-
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{host}/api/v1/gems"] = [@response, 200, 'OK']
@fetcher.data["#{Gem.host}/api/v1/gems"] =
['fail', 500, 'Internal Server Error']
@cmd.options[:host] = host
- @cmd.options[:args] = %w[example]
+ @cmd.options[:args] = [@path]
@cmd.execute
assert_equal Net::HTTP::Post, @fetcher.last_request.class
- assert_equal 'hello', @fetcher.last_request.body
+ assert_equal Gem.read_binary(@path), @fetcher.last_request.body
assert_equal "application/octet-stream",
@fetcher.last_request["Content-Type"]
end
@@ -154,6 +150,78 @@ class TestGemCommandsPushCommand < Gem::TestCase
send_battery
end
+ def test_sending_gem_to_allowed_push_host
+ @host = "http://privategemserver.com"
+
+ @spec, @path = util_gem "freebird", "1.0.1" do |spec|
+ spec.metadata['allowed_push_host'] = @host
+ end
+
+ @api_key = "PRIVKEY"
+
+ 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_to_disallowed_default_host
+ @spec, @path = util_gem "freebird", "1.0.1" do |spec|
+ spec.metadata['allowed_push_host'] = "https://privategemserver.com"
+ end
+
+ response = %{ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.com"}
+
+ assert_raises Gem::MockGemUi::TermError do
+ send_battery
+ end
+
+ assert_match response, @ui.error
+ end
+
+ def test_sending_gem_to_disallowed_push_host
+ @host = "https://somebodyelse.com"
+
+ @spec, @path = util_gem "freebird", "1.0.1" do |spec|
+ spec.metadata['allowed_push_host'] = "https://privategemserver.com"
+ end
+
+ @api_key = "PRIVKEY"
+
+ 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 = 'ERROR: "https://somebodyelse.com" is not allowed by the gemspec, which only allows "https://privategemserver.com"'
+
+ assert_raises Gem::MockGemUi::TermError do
+ send_battery
+ end
+
+ assert_match response, @ui.error
+ end
+
def test_raises_error_with_no_arguments
def @cmd.sign_in(*); end
assert_raises Gem::CommandLineError do