summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_commands_push_command.rb
blob: d461bd8af604107bcec0622709962d43030d9012 (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
require_relative 'gemutilities'
require 'rubygems/commands/push_command'

class TestGemCommandsPushCommand < RubyGemTestCase

  def setup
    super

    @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")

    @fetcher = Gem::FakeFetcher.new
    Gem::RemoteFetcher.fetcher = @fetcher

    @cmd = Gem::Commands::PushCommand.new
  end

  def test_sending_gem
    response = "Successfully registered gem: freewill (1.0.0)"
    @fetcher.data["https://rubygems.org/api/v1/gems"] = [response, 200, 'OK']

    use_ui @ui do
      @cmd.send_gem(@path)
    end

    assert_match %r{Pushing gem to RubyGems.org...}, @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 Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"]

    assert_match response, @ui.output
  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["https://rubygems.org/api/v1/gems"] = [response, 403, 'Forbidden']

    assert_raises MockGemUi::TermError do
      use_ui @ui do
        @cmd.send_gem(@path)
      end
    end

    assert_match response, @ui.output
  end

end