Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add method for GET builds list for a commit #108

Merged
merged 1 commit into from
Jan 21, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion lib/tinybucket/api/build_status_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,19 @@ module Api
class BuildStatusApi < BaseApi
include Tinybucket::Api::Helper::BuildStatusHelper

attr_accessor :repo_owner, :repo_slug
attr_accessor :revision, :repo_owner, :repo_slug

# Send 'GET a builds list for a commit' request
#
# @param options [Hash]
# @return [Tinybucket::Model::Page]
def list(options = {})
get_path(
path_to_list,
options,
Tinybucket::Parser::BuildsParser
)
end

# Send 'GET the build status for a commit' request
#
Expand Down
9 changes: 9 additions & 0 deletions lib/tinybucket/api/helper/build_status_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ module BuildStatusHelper

private

def path_to_list
build_path('/repositories',
[repo_owner, 'repo_owner'],
[repo_slug, 'repo_slug'],
'commit',
[revision, 'revision'],
'statuses')
end

def path_to_find(revision, key)
build_path(base_path(revision),
[key, 'key'])
Expand Down
1 change: 1 addition & 0 deletions lib/tinybucket/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module Parser
:BranchRestrictionParser,
:BranchRestrictionsParser,
:BuildStatusParser,
:BuildsParser,
:CommitParser,
:CommitsParser,
:CommentParser,
Expand Down
11 changes: 11 additions & 0 deletions lib/tinybucket/parser/builds_parser.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

module Tinybucket
module Parser
class BuildsParser < BaseParser
def convert(json)
Tinybucket::Model::Page.new(json, Tinybucket::Model::BuildStatus)
end
end
end
end
7 changes: 4 additions & 3 deletions lib/tinybucket/resource/commit/build_statuses.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@ def create(key, options)
private

def build_status_api
create_api('BuildStatus', @commit.repo_keys)
create_api('BuildStatus', @commit.repo_keys).tap do |api|
api.revision = @commit.hash
end
end

# FIXME: raise NoMethodError on method_missing.
def enumerator
nil
create_enumerator(build_status_api, :list, *@args)
end
end
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{"pagelen": 10, "values": [{
"state": "SUCCESSFUL",
"type": "build",
"key": "BAMBOO-PROJECT-X",
"name": "Build #34",
"url": "https://example.com/path/to/build",
"description": "Changes by John Doe",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/emmap1/MyRepo/commits/61d9e64348f9da407e62f64726337fd3bb24b466/statuses/build/BAMBOO-PROJECT-X"
},
"commit": {
"href": "https://api.bitbucket.org/2.0/repositories/emmap1/MyRepo/commits/61d9e64348f9da407e62f64726337fd3bb24b466"
}
}
}]}
11 changes: 11 additions & 0 deletions spec/lib/tinybucket/api/build_status_api_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,22 @@
Tinybucket::Api::BuildStatusApi.new.tap do |api|
api.repo_owner = owner
api.repo_slug = slug
api.revision = revision
end
end

it { expect(api).to be_a_kind_of(Tinybucket::Api::BaseApi) }

describe 'list' do
subject { api.list(options) }

context 'with owner and slug' do
let(:request_path) { "/repositories/#{owner}/#{slug}/commit/#{revision}/statuses" }
before { stub_apiresponse(:get, request_path) }
it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
end
end

describe '#find' do
let(:request_path) do
"/repositories/#{owner}/#{slug}/commit/#{revision}/statuses/build/#{status_key}"
Expand Down
20 changes: 20 additions & 0 deletions spec/lib/tinybucket/resource/commit/build_statuses_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,24 @@
subject { resource.create(status_key, params) }
it { expect(subject).to be_an_instance_of(Tinybucket::Model::BuildStatus) }
end

describe 'Enumerable Methods' do
let(:request_path) do
"/repositories/#{owner}/#{slug}/commit/#{revision}/statuses"
end
before { stub_enum_response(:get, request_path) }

describe '#take(1)' do
subject { resource.take(1) }
it { expect(subject).to be_an_instance_of(Array) }
end

describe '#each' do
it 'iterate models' do
resource.each do |m|
expect(m).to be_an_instance_of(Tinybucket::Model::BuildStatus)
end
end
end
end
end