Add simplest log endpoint

Just an excuse to get all the boilerplate classes in place :)
This commit is contained in:
Joe Corcoran 2016-07-19 18:10:34 +02:00
parent a45d53f73c
commit 316947b7c0
7 changed files with 77 additions and 2 deletions

4
.gitignore vendored
View File

@ -4,8 +4,8 @@ config/nginx.conf
config/skylight.yml
tmp/
log/
logs/
/log/
/logs/
!vendor/travis-core/lib/travis/logs/
!vendor/travis-core/lib/travis/model/log/

View File

@ -0,0 +1,7 @@
module Travis::API::V3
class Queries::Log < Query
def find(job)
job.log
end
end
end

View File

@ -0,0 +1,7 @@
require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3
class Renderer::Log < Renderer::ModelRenderer
representation(:standard, :id, :content)
end
end

View File

@ -43,6 +43,11 @@ module Travis::API::V3
post :cancel, '/cancel'
post :restart, '/restart'
post :debug, '/debug'
resource :log do
route '/log'
get :find
end
end
resource :lint do

View File

@ -16,6 +16,7 @@ module Travis::API::V3
Job = Module.new { extend Services }
Jobs = Module.new { extend Services }
Lint = Module.new { extend Services }
Log = Module.new { extend Services }
Organization = Module.new { extend Services }
Organizations = Module.new { extend Services }
Owner = Module.new { extend Services }

View File

@ -0,0 +1,10 @@
module Travis::API::V3
class Services::Log::Find < Service
params :id, prefix: :job
def run!
job = find(:job)
query.find(job)
end
end
end

View File

@ -0,0 +1,45 @@
require 'spec_helper'
describe Travis::API::V3::Services::Log::Find, set_app: true do
let(:user) { Travis::API::V3::Models::User.find_by_login('svenfuchs') }
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: user.login, name: 'minimal').first }
let(:build) { repo.builds.last }
let(:job) { Travis::API::V3::Models::Build.find(build.id).jobs.last }
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
let(:headers) { { 'HTTP_AUTHORIZATION' => "token #{token}" } }
let(:parsed_body) { JSON.load(body) }
context 'when log stored in db' do
describe 'returns log as plain text' do
let(:log) { job.log }
before { get("/v3/job/#{job.id}/log", {}, headers) }
example { expect(last_response).to be_ok }
example do
expect(parsed_body).to eq(
'@href' => "/v3/job/#{job.id}/log",
'@representation' => 'standard',
'@type' => 'log',
'content' => nil,
'id' => log.id
)
end
end
describe 'returns log as chunked json'
end
context 'when log not found in db but stored on S3' do
describe 'returns log as plain text'
describe 'returns log as chunked json'
end
context 'when log not found anywhere' do
describe 'does not return log'
end
context 'when log removed by user' do
describe 'does not return log'
end
end