Merge pull request #233 from travis-ci/cd-last-build-sort

Add ability to sort repos by default_branch.last_build
This commit is contained in:
carlad 2016-03-14 13:29:06 +01:00
commit 07dd57845b
2 changed files with 67 additions and 1 deletions

View File

@ -1,7 +1,7 @@
module Travis::API::V3
class Queries::Repositories < Query
params :active, :private, :starred, prefix: :repository
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active)
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active), :'default_branch.last_build' => 'builds.started_at'
def for_member(user, **options)
all(user: user, **options).joins(:users).where(users: user_condition(user), invalidated_at: nil)

View File

@ -11,6 +11,7 @@ describe Travis::API::V3::Services::Repositories::ForOwner do
before { repo.update_attribute(:private, true) }
after { repo.update_attribute(:private, false) }
describe "private repository, private API, authenticated as user with access" do
before { get("/v3/owner/svenfuchs/repos", {}, headers) }
example { expect(last_response).to be_ok }
@ -103,4 +104,69 @@ describe Travis::API::V3::Services::Repositories::ForOwner do
example { expect(JSON.load(body)['@href']) .to be == "/v3/repos?starred=false" }
example { expect(JSON.load(body)['repositories']) .to be_empty }
end
describe "sorting by default_branch.last_build" do
let(:repo2) { Travis::API::V3::Models::Repository.create(owner_name: 'svenfuchs', name: 'maximal', owner_id: 1, owner_type: "User", last_build_state: "passed", active: true, last_build_id: 1788, next_build_number: 3) }
before { repo2.save! }
before { get("/v3/owner/svenfuchs/repos?sort_by=default_branch.last_build", {}, headers) }
example { expect(last_response).to be_ok }
example { expect(JSON.load(body)['@href']) .to be == "/v3/owner/svenfuchs/repos?sort_by=default_branch.last_build" }
example { expect(JSON.load(body)['repositories']) .to be == [{
"@type" => "repository",
"@href" => "/v3/repo/1",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"enable" => false,
"disable" => false,
"star" => false,
"unstar" => false,
"create_request"=> false },
"id" => 1,
"name" => "minimal",
"slug" => "svenfuchs/minimal",
"description" => nil,
"github_language" => nil,
"active" => true,
"private" => true,
"owner" => {
"@type" => "user",
"id" => 1,
"login" => "svenfuchs",
"@href" => "/v3/user/1" },
"default_branch" => {
"@type" => "branch",
"@href" => "/v3/repo/1/branch/master",
"@representation"=>"minimal",
"name" => "master" },
"starred" => false }, {
"@type" => "repository",
"@href" => "/v3/repo/#{repo2.id}",
"@representation" => "standard",
"@permissions" => {
"read" => true,
"enable" => false,
"disable" => false,
"star" => false,
"unstar" => false,
"create_request"=> false },
"id" => repo2.id,
"name" => "maximal",
"slug" => "svenfuchs/maximal",
"description" => nil,
"github_language" => nil,
"active" => true,
"private" => false,
"owner" => {
"@type" => "user",
"id" => 1,
"login" => "svenfuchs",
"@href" => "/v3/user/1" },
"default_branch" => {
"@type" => "branch",
"@href" => "/v3/repo/#{repo2.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master" },
"starred"=>false}]}
end
end