diff --git a/lib/travis/api/v3/queries/organization.rb b/lib/travis/api/v3/queries/organization.rb index 218be855..adba5923 100644 --- a/lib/travis/api/v3/queries/organization.rb +++ b/lib/travis/api/v3/queries/organization.rb @@ -1,9 +1,10 @@ module Travis::API::V3 class Queries::Organization < Query - params :id, :login + params :id, :login, :github_id def find return Models::Organization.find_by_id(id) if id + return Models::Organization.find_by_github_id(github_id) if github_id return Models::Organization.where('lower(login) = ?'.freeze, login.downcase).first if login raise WrongParams, 'missing organization.id or organization.login'.freeze end diff --git a/lib/travis/api/v3/queries/owner.rb b/lib/travis/api/v3/queries/owner.rb index c57ee7c4..0494573b 100644 --- a/lib/travis/api/v3/queries/owner.rb +++ b/lib/travis/api/v3/queries/owner.rb @@ -9,6 +9,7 @@ module Travis::API::V3 def query(type, main_type: self.main_type, params: self.params) main_type = type if main_type == :owner params = params.merge("#{type}.login" => params["owner.login".freeze]) if params["owner.login".freeze] + params = params.merge("#{type}.github_id" => params["owner.github_id".freeze]) if params["owner.github_id".freeze] Queries[type].new(params, main_type, service: @service) end diff --git a/lib/travis/api/v3/queries/user.rb b/lib/travis/api/v3/queries/user.rb index 5f5760c2..47bd7f02 100644 --- a/lib/travis/api/v3/queries/user.rb +++ b/lib/travis/api/v3/queries/user.rb @@ -1,9 +1,10 @@ module Travis::API::V3 class Queries::User < Query - params :id, :login, :email + params :id, :login, :email, :github_id def find return Models::User.find_by_id(id) if id + return Models::User.find_by_github_id(github_id) if github_id return Models::User.where('lower(login) = ?'.freeze, login.downcase).first if login return find_by_email(email) if email raise WrongParams, 'missing user.id or user.login'.freeze diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index 4e51c578..988a5e96 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -48,7 +48,7 @@ module Travis::API::V3 end resource :owner do - route '/owner/({owner.login}|{user.login}|{organization.login})' + route '/owner/({owner.login}|{user.login}|{organization.login}|github_id/{owner.github_id})' get :find resource :repositories do diff --git a/spec/v3/services/owner/find_spec.rb b/spec/v3/services/owner/find_spec.rb index 4d67fdea..5442e545 100644 --- a/spec/v3/services/owner/find_spec.rb +++ b/spec/v3/services/owner/find_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' describe Travis::API::V3::Services::Owner::Find do describe "organization" do - let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') } + let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org', github_id: 1234) } before { org.save! } after { org.delete } - describe 'existing org, public api' do + describe 'existing org, public api, by login' do before { get("/v3/owner/example-org") } example { expect(last_response).to be_ok } example { expect(JSON.load(body)).to be == { @@ -17,7 +17,23 @@ describe Travis::API::V3::Services::Owner::Find do "id" => org.id, "login" => "example-org", "name" => nil, - "github_id" => nil, + "github_id" => 1234, + "avatar_url" => nil + }} + end + + describe 'existing org, public api, by github_id' do + before { get("/v3/owner/github_id/1234") } + example { expect(last_response).to be_ok } + example { expect(JSON.load(body)).to be == { + "@type" => "organization", + "@href" => "/v3/org/#{org.id}", + "@representation" => "standard", + "@permissions" => { "read"=>true, "sync"=>false }, + "id" => org.id, + "login" => "example-org", + "name" => nil, + "github_id" => 1234, "avatar_url" => nil }} end @@ -38,7 +54,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => org.id, "login" => "example-org", "name" => nil, - "github_id" => nil, + "github_id" => 1234, "avatar_url" => nil, "repositories" => [{ "@type" => "repository", @@ -82,7 +98,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => org.id, "login" => "example-org", "name" => nil, - "github_id" => nil, + "github_id" => 1234, "avatar_url" => nil, "repositories" => [{ "@type" => "repository", @@ -121,7 +137,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => org.id, "login" => "example-org", "name" => nil, - "github_id" => nil, + "github_id" => 1234, "avatar_url" => nil }} end @@ -141,7 +157,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => org.id, "login" => "example-org", "name" => nil, - "github_id" => nil, + "github_id" => 1234, "avatar_url" => nil, "@warnings" => [{ "@type" => "warning", @@ -153,11 +169,11 @@ describe Travis::API::V3::Services::Owner::Find do end describe "user" do - let(:user) { Travis::API::V3::Models::User.new(login: 'example-user') } + let(:user) { Travis::API::V3::Models::User.new(login: 'example-user', github_id: 5678) } before { user.save! } after { user.delete } - describe 'existing user, public api' do + describe 'existing user, public api, by login' do before { get("/v3/owner/example-user") } example { expect(last_response).to be_ok } example { expect(JSON.load(body)).to be == { @@ -168,7 +184,25 @@ describe Travis::API::V3::Services::Owner::Find do "id" => user.id, "login" => "example-user", "name" => nil, - "github_id" => nil, + "github_id" => 5678, + "avatar_url" => nil, + "is_syncing" => nil, + "synced_at" => nil + }} + end + + describe 'existing user, public api, by github_id' do + before { get("/v3/owner/github_id/5678") } + example { expect(last_response).to be_ok } + example { expect(JSON.load(body)).to be == { + "@type" => "user", + "@href" => "/v3/user/#{user.id}", + "@representation"=> "standard", + "@permissions" => {"read"=>true, "sync"=>false}, + "id" => user.id, + "login" => "example-user", + "name" => nil, + "github_id" => 5678, "avatar_url" => nil, "is_syncing" => nil, "synced_at" => nil @@ -186,7 +220,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => user.id, "login" => "example-user", "name" => nil, - "github_id" => nil, + "github_id" => 5678, "avatar_url" => nil, "is_syncing" => nil, "synced_at" => nil @@ -208,7 +242,7 @@ describe Travis::API::V3::Services::Owner::Find do "id" => user.id, "login" => "example-user", "name" => nil, - "github_id" => nil, + "github_id" => 5678, "avatar_url" => nil, "is_syncing" => nil, "synced_at" => nil,