From e11dfa35cf10083b3c2d088460c30bacb7d0b09c Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki <drogus@gmail.com> Date: Tue, 5 Nov 2013 14:36:22 +0100 Subject: [PATCH] Fix PATCH repos/:id/settings --- lib/travis/api/app/endpoint/repos.rb | 10 ++++++++-- spec/integration/v2/repositories_spec.rb | 13 ++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/travis/api/app/endpoint/repos.rb b/lib/travis/api/app/endpoint/repos.rb index a062ffda..18f7b6af 100644 --- a/lib/travis/api/app/endpoint/repos.rb +++ b/lib/travis/api/app/endpoint/repos.rb @@ -52,10 +52,16 @@ class Travis::Api::App end end - put '/:id/settings' do + patch '/:id/settings' do + payload = JSON.parse request.body.read + + if payload['settings'].blank? || !payload['settings'].is_a?(Hash) + halt 422, { "error" => "Settings must be passed with a request" } + end + settings = service(:find_repo_settings, params).run if settings - settings.merge(params[:settings]) + settings.merge(payload['settings']) # TODO: I would like to have better API here, but leaving this # for testing to not waste too much time before I can play with it settings.repository.save diff --git a/spec/integration/v2/repositories_spec.rb b/spec/integration/v2/repositories_spec.rb index 0d8d53e3..139c2c5c 100644 --- a/spec/integration/v2/repositories_spec.rb +++ b/spec/integration/v2/repositories_spec.rb @@ -24,12 +24,23 @@ describe 'Repos' do }.to change { repo.reload.key.private_key } end + it 'allows to update settings' do + json = { 'settings' => { 'a-new-setting' => 'value' } }.to_json + response = patch "repos/#{repo.id}/settings", json, headers + + repo.reload.settings['a-new-setting'].should == 'value' + + body = JSON.parse(response.body) + body['settings']['a-new-setting'].should == 'value' + end + it 'allows to get settings' do repo.settings.replace('foo' => { 'type' => 'password', 'value' => 'abc123' }) repo.save response = get "repos/#{repo.id}/settings", {}, headers - JSON.parse(response.body).should == { 'settings' => { 'foo' => { 'type' => 'password', 'value' => '∗∗∗∗∗∗' } } } + settings = Repository::Settings.defaults.deep_merge({ 'foo' => { 'type' => 'password', 'value' => '∗∗∗∗∗∗' } }) + JSON.parse(response.body).should == { 'settings' => settings } end end