v3: move find repos logic to query object, allow filtering by private and active
This commit is contained in:
parent
1712204321
commit
2e4771ccd2
29
lib/travis/api/v3/queries/repositories.rb
Normal file
29
lib/travis/api/v3/queries/repositories.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
module Travis::API::V3
|
||||
class Queries::Repositories < Query
|
||||
params :active, :private, prefix: :repository
|
||||
|
||||
def for_member(user)
|
||||
all.joins(:users).where(users: user_condition(user))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def user_condition(value)
|
||||
case value
|
||||
when String then { login: value }
|
||||
when Integer then { id: value }
|
||||
when ::User then { id: value.id }
|
||||
else raise WrongParams
|
||||
end
|
||||
end
|
||||
|
||||
def all
|
||||
@all ||= begin
|
||||
all = ::Repository
|
||||
all = all.where(active: bool(active)) unless active.nil?
|
||||
all = all.where(private: bool(private)) unless private.nil?
|
||||
all
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -10,5 +10,10 @@ module Travis::API::V3
|
|||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def bool(value)
|
||||
return false if value == 'false'.freeze
|
||||
!!value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@ module Travis::API::V3
|
|||
def run
|
||||
raise LoginRequired unless access_control.logged_in?
|
||||
raise NotFound, :repositories unless access_control.user
|
||||
repositories = ::Repository::joins(:users).where(users: { id: access_control.user.id })
|
||||
repositories = query(:repositories).for_member(access_control.user)
|
||||
Result.new(:repositories, repositories)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,16 @@ require 'spec_helper'
|
|||
describe Travis::API::V3::Services::FindRepository do
|
||||
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
|
||||
|
||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||
before { repo.update_attribute(:private, true) }
|
||||
after { repo.update_attribute(:private, false) }
|
||||
|
||||
describe "private repository, private API, authenticated as user with access" do
|
||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||
before { repo.update_attribute(:private, true) }
|
||||
before { get("/v3/repos", {}, headers) }
|
||||
before { repo.update_attribute(:private, false) }
|
||||
example { expect(last_response).to be_ok }
|
||||
example { expect(JSON.load(body)).to be == {
|
||||
before { get("/v3/repos", {}, headers) }
|
||||
example { expect(last_response).to be_ok }
|
||||
example { expect(JSON.load(body)).to be == {
|
||||
"@type" => "repositories",
|
||||
"repositories" => [{
|
||||
"@type" => "repository",
|
||||
|
@ -35,4 +36,16 @@ describe Travis::API::V3::Services::FindRepository do
|
|||
"finished_at" => "2010-11-12T12:30:20Z"}}]
|
||||
}}
|
||||
end
|
||||
|
||||
describe "filter: private=false" do
|
||||
before { get("/v3/repos", {"repository.private" => "false"}, headers) }
|
||||
example { expect(last_response) .to be_ok }
|
||||
example { expect(JSON.load(body)['repositories']) .to be == [] }
|
||||
end
|
||||
|
||||
describe "filter: active=false" do
|
||||
before { get("/v3/repos", {"repository.active" => "false"}, headers) }
|
||||
example { expect(last_response) .to be_ok }
|
||||
example { expect(JSON.load(body)['repositories']) .to be == [] }
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user