diff --git a/lib/travis/api/app/endpoint/jobs.rb b/lib/travis/api/app/endpoint/jobs.rb index c57436b4..0cbbb346 100644 --- a/lib/travis/api/app/endpoint/jobs.rb +++ b/lib/travis/api/app/endpoint/jobs.rb @@ -32,6 +32,18 @@ class Travis::Api::App respond_with service(:find_metadata, params) end + put "/:job_id/metadata" do + if params[:description] + metadata = service(:update_metadata, params).run + + status metadata ? 204 : 401 + else + status 422 + + { "error" => "Must include a description" } + end + end + def archive_url(path) "https://s3.amazonaws.com/#{hostname('archive')}#{path}" end diff --git a/spec/integration/v2/jobs_spec.rb b/spec/integration/v2/jobs_spec.rb index cd001a9e..40adf972 100644 --- a/spec/integration/v2/jobs_spec.rb +++ b/spec/integration/v2/jobs_spec.rb @@ -76,10 +76,35 @@ describe 'Jobs' do end end - it "/jobs/:id/metadata" do + it "GET /jobs/:id/metadata" do metadata_provider = Factory(:metadata_provider) metadata = metadata_provider.metadata.create(job_id: job.id, description: "Foobar") response = get "/jobs/#{job.id}/metadata", {}, headers response.should deliver_json_for(Metadata.where(id: metadata.id), version: 'v2') end + + describe "PUT /jobs/:id/metadata" do + context "with valid credentials" do + it "responds with a 204" do + metadata_provider = Factory(:metadata_provider) + response = put "/jobs/#{job.id}/metadata", { username: metadata_provider.api_username, key: metadata_provider.api_key, description: "Foobar" }, headers + response.status.should eq(204) + end + end + + context "without a description" do + it "responds with a 422" do + metadata_provider = Factory(:metadata_provider) + response = put "/jobs/#{job.id}/metadata", { username: metadata_provider.api_username, key: metadata_provider.api_key }, headers + response.status.should eq(422) + end + end + + context "with invalid credentials" do + it "responds with a 401" do + response = put "/jobs/#{job.id}/metadata", { username: "invalid-username", key: "invalid-key", description: "Foobar" }, headers + response.status.should eq(401) + end + end + end end diff --git a/spec/unit/endpoint/jobs_spec.rb b/spec/unit/endpoint/jobs_spec.rb index 70f288a9..2a650439 100644 --- a/spec/unit/endpoint/jobs_spec.rb +++ b/spec/unit/endpoint/jobs_spec.rb @@ -2,8 +2,13 @@ require 'spec_helper' describe Travis::Api::App::Endpoint::Jobs do let(:job) { Factory(:test) } + let(:provider) { Factory(:metadata_provider) } it "GET /jobs/:id/metadata" do get("/jobs/#{job.id}/metadata", {}, "HTTP_ACCEPT" => "application/vnd.travis-ci.2+json, */*; q=0.01").should be_ok end + + it "PUT /jobs/:id/metadata" do + response = put("/jobs/#{job.id}/metadata", { "username" => provider.api_username, "key" => provider.api_key, "description" => "Foobar" }, "HTTP_ACCEPT" => "application/vnd.travis-ci.2+json, */*; q=0.01").should be_successful + end end