File: releases_spec.rb

package info (click to toggle)
ruby-octokit 10.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,092 kB
  • sloc: ruby: 13,339; sh: 99; makefile: 7; javascript: 3
file content (143 lines) | stat: -rw-r--r-- 5,126 bytes parent folder | download | duplicates (2)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# frozen_string_literal: true

describe Octokit::Client::Releases do
  before do
    Octokit.reset!
    @client = oauth_client
  end

  describe '.releases' do
    it 'lists releases for a repo', :vcr do
      releases = @client.releases @test_repo
      expect(releases).to be_kind_of Array
      assert_requested :get, github_url("/repos/#{@test_repo}/releases")
    end
  end

  describe '.create_release', :vcr do
    it 'creates a release' do
      release = @client.create_release \
        @test_repo, 'test-create-release-tag', name: 'Test Create Release'
      expect(release.tag_name).to eq('test-create-release-tag')
      expect(release.name).to eq('Test Create Release')
      assert_requested :post, github_url("/repos/#{@test_repo}/releases")
    end
  end

  describe '.release', :vcr do
    it 'gets a single release' do
      created = @client.create_release \
        @test_repo, 'test-get-release-tag', name: 'Test Get Release'
      release = @client.release created.rels[:self].href
      expect(release.tag_name).to eq('test-get-release-tag')
      expect(release.name).to eq('Test Get Release')
    end
  end

  describe '.update_release', :vcr do
    it 'updates a release' do
      created = @client.create_release \
        @test_repo, 'test-update-release-tag', name: 'Test Update Release'
      release = @client.update_release \
        created.rels[:self].href, name: 'An updated release'
      expect(release.name).to eq('An updated release')
      assert_requested :patch, created.rels[:self].href
    end
  end

  describe '.delete_release', :vcr do
    it 'deletes a release' do
      created = @client.create_release \
        @test_repo, 'test-delete-release-tag', name: 'Test Delete Release'
      url = created.rels[:self].href
      result = @client.delete_release url
      expect(result).to be true
      expect { @client.release(url) }.to raise_error(Octokit::NotFound)
    end
  end

  context 'handling release assets' do
    before do
      @release_url = 'https://api.github.com/repos/api-playground/api-sandbox/releases/43567'
    end

    describe '.release_assets', :vcr do
      it 'lists assets for a release' do
        assets = @client.release_assets(@release_url)
        expect(assets).to be_kind_of(Array)
      end
    end

    describe '.upload_release_asset', :vcr do
      it 'uploads a release asset by path' do
        local_path = 'spec/fixtures/upload.png'
        name = 'upload_by_path.png'
        asset = @client.upload_asset(@release_url, local_path, content_type: 'image/png', name: name)
        expect(asset.name).to eq(name)
      end
      it 'uploads a release asset as file object' do
        file = File.new('spec/fixtures/upload.png', 'r+b')
        size = File.size(file)
        name = 'upload_by_file.png'
        asset = @client.upload_asset(@release_url, file, content_type: 'image/png', name: name)
        expect(asset.name).to eq(name)
        expect(asset.size).to eq(size)
      end
      it 'uploads a release asset with a default name' do
        path = 'spec/fixtures/upload.png'
        name = 'upload.png'
        asset = @client.upload_asset(@release_url, path, content_type: 'image/png')
        expect(asset.name).to eq(name)
      end
      it 'guesses the content type for an asset' do
        path = 'spec/fixtures/upload.png'
        name = 'upload_guess_content_type.png'
        asset = @client.upload_asset(@release_url, path, name: name)
        expect(asset.name).to eq(name)
        expect(asset.content_type).to eq('image/png')
      end
    end

    describe '.release_asset' do
      it 'gets a single release asset' do
        asset_url = 'https://api.github.com/repos/api-playground/api-sandbox/releases/assets/21313'
        request = stub_get(asset_url)
        @client.release_asset(asset_url)
        assert_requested request
      end
    end

    describe '.update_release_asset' do
      it 'edits a release asset', :vcr do
        asset_url = 'https://api.github.com/repos/api-playground/api-sandbox/releases/assets/21313'
        updated = @client.update_release_asset(asset_url, label: 'Updated')
        expect(updated.label).to eq('Updated')
      end
    end

    describe '.delete_release_asset' do
      it 'deletes a release asset' do
        asset_url = 'https://api.github.com/repos/api-playground/api-sandbox/releases/assets/21313'
        request = stub_delete(asset_url).to_return(status: 204)

        expect(@client.delete_release_asset(asset_url)).to be true
        assert_requested request
      end
    end
  end

  describe '.release_for_tag', :vcr do
    it 'returns the release for a tag' do
      release = @client.release_for_tag('octokit/octokit.rb', 'v3.7.0')
      expect(release.tag_name).to eq('v3.7.0')
      assert_requested :get, github_url('/repos/octokit/octokit.rb/releases/tags/v3.7.0')
    end
  end # .release_for_tag

  describe '.latest_release', :vcr do
    it 'returns the latest release' do
      Octokit.latest_release('octokit/octokit.rb')
      assert_requested :get, github_url('/repos/octokit/octokit.rb/releases/latest')
    end
  end # .latest_release
end