From 7daef8dd8d9f3481fd69882eb5ea2ed080122e48 Mon Sep 17 00:00:00 2001 From: JC Grubbs Date: Tue, 9 Dec 2014 23:04:59 -0600 Subject: [PATCH 1/3] adding an update method to stories --- lib/tracker_api/endpoints/story.rb | 6 ++++++ lib/tracker_api/resources/project.rb | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/lib/tracker_api/endpoints/story.rb b/lib/tracker_api/endpoints/story.rb index 8a3004c..0b9cd77 100644 --- a/lib/tracker_api/endpoints/story.rb +++ b/lib/tracker_api/endpoints/story.rb @@ -24,6 +24,12 @@ def create(project_id, params={}) Resources::Story.new({ client: client }.merge(data)) end + + def update(project_id, story_id, params={}) + data = client.put("/projects/#{project_id}/stories/#{story_id}", params: params).body + + Resources::Story.new({ client: client }.merge(data)) + end end end end diff --git a/lib/tracker_api/resources/project.rb b/lib/tracker_api/resources/project.rb index d5c705c..08ef752 100644 --- a/lib/tracker_api/resources/project.rb +++ b/lib/tracker_api/resources/project.rb @@ -96,6 +96,13 @@ def story(story_id) def create_story(params) Endpoints::Story.new(client).create(id, params) end + + # @param [Integer] id of story to update + # @param [Hash] hash of attributes to update the story + # @return [Story] Story with given id + def update_story(story_id, params) + Endpoints::Story.new(client).update(id, story_id, params) + end end end end From 04cbbbd485236842b696c99a98946e0c03f68638 Mon Sep 17 00:00:00 2001 From: JC Grubbs Date: Tue, 9 Dec 2014 23:09:44 -0600 Subject: [PATCH 2/3] add put method to client --- lib/tracker_api/client.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/tracker_api/client.rb b/lib/tracker_api/client.rb index 7f24f4b..8d509b7 100644 --- a/lib/tracker_api/client.rb +++ b/lib/tracker_api/client.rb @@ -63,6 +63,10 @@ def post(path, options = {}) request(:post, parse_query_and_convenience_headers(path, options)) end + def put(path, options = {}) + request(:put, parse_query_and_convenience_headers(path, options)) + end + # Make one or more HTTP GET requests, optionally fetching # the next page of results from information passed back in headers # based on value in {#auto_paginate}. From fa8ada1e4f85df72749ab35caffd5cd1df8529e6 Mon Sep 17 00:00:00 2001 From: JC Grubbs Date: Tue, 9 Dec 2014 23:21:49 -0600 Subject: [PATCH 3/3] adding tests for update_story --- test/project_test.rb | 14 ++++++++++++++ test/vcr/cassettes/update_story.json | 1 + 2 files changed, 15 insertions(+) create mode 100644 test/vcr/cassettes/update_story.json diff --git a/test/project_test.rb b/test/project_test.rb index 8408415..8340b08 100644 --- a/test/project_test.rb +++ b/test/project_test.rb @@ -88,5 +88,19 @@ story.name.must_equal 'Test story' end end + + it 'can update story' do + VCR.use_cassette('update story') do + story = project.create_story(name: 'Test story') + + story.name.must_equal 'Test story' + + project.update_story(story.id, { name: 'Changed name' }) + + retrieved_story = project.story(story.id) + + retrieved_story.name.must_equal 'Changed name' + end + end end end diff --git a/test/vcr/cassettes/update_story.json b/test/vcr/cassettes/update_story.json new file mode 100644 index 0000000..d82b143 --- /dev/null +++ b/test/vcr/cassettes/update_story.json @@ -0,0 +1 @@ +{"http_interactions":[{"request":{"method":"post","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories?name=Test+story","body":{"encoding":"UTF-8","string":""},"headers":{"User-Agent":["Ruby/2.1.3 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Length":["0"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["28"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"0af20736c4d17830ba4d82ed274fb7a8\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["de140d9de307c1891d45f223568a9ae1"],"X-Runtime":["0.225279"],"Date":["Wed, 10 Dec 2014 05:20:17 GMT"],"X-Rack-Cache":["invalidate, pass"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["8"]},"body":{"encoding":"UTF-8","string":"{\n \"kind\": \"story\",\n \"id\": 84269322,\n \"project_id\": 1027488,\n \"name\": \"Test story\",\n \"story_type\": \"feature\",\n \"current_state\": \"unscheduled\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n\n ],\n \"created_at\": \"2014-12-10T05:20:17Z\",\n \"updated_at\": \"2014-12-10T05:20:17Z\",\n \"url\": \"https://www.pivotaltracker.com/story/show/84269322\"\n}"},"http_version":null},"recorded_at":"Wed, 10 Dec 2014 05:20:17 GMT"},{"request":{"method":"put","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/84269322?name=Changed+name","body":{"encoding":"UTF-8","string":""},"headers":{"User-Agent":["Ruby/2.1.3 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"],"Content-Length":["0"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["29"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"dc6c6116d5985962aac5b28c5e7ababe\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["0bfc5b0d7ae22f04f73d8da869e61453"],"X-Runtime":["0.162157"],"Date":["Wed, 10 Dec 2014 05:20:18 GMT"],"X-Rack-Cache":["invalidate, pass"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["8"]},"body":{"encoding":"UTF-8","string":"{\n \"kind\": \"story\",\n \"id\": 84269322,\n \"project_id\": 1027488,\n \"name\": \"Changed name\",\n \"story_type\": \"feature\",\n \"current_state\": \"unscheduled\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n\n ],\n \"created_at\": \"2014-12-10T05:20:17Z\",\n \"updated_at\": \"2014-12-10T05:20:18Z\",\n \"url\": \"https://www.pivotaltracker.com/story/show/84269322\"\n}"},"http_version":null},"recorded_at":"Wed, 10 Dec 2014 05:20:18 GMT"},{"request":{"method":"get","uri":"https://www.pivotaltracker.com/services/v5/projects/1027488/stories/84269322","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["Ruby/2.1.3 (x86_64-darwin14.0; ruby) TrackerApi/0.2.6 Faraday/0.9.0"],"X-TrackerToken":["d55c3bc1f74346b843ca84ba340b29bf"]}},"response":{"status":{"code":200,"message":null},"headers":{"Content-Type":["application/json; charset=utf-8"],"Status":["200 OK"],"X-Tracker-Project-Version":["29"],"X-UA-Compatible":["IE=Edge,chrome=1"],"ETag":["\"dc6c6116d5985962aac5b28c5e7ababe\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["e5c646f3993e35a931093c8c978d9ec6"],"X-Runtime":["0.042098"],"Date":["Wed, 10 Dec 2014 05:20:18 GMT"],"X-Rack-Cache":["miss"],"X-Powered-By":["Phusion Passenger 4.0.41"],"Server":["nginx/1.6.0 + Phusion Passenger 4.0.41"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Credentials":["false"],"Access-Control-Allow-Methods":["GET, POST, PUT, DELETE, OPTIONS"],"Access-Control-Allow-Headers":["X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is"],"X-Tracker-Client-Pinger-Interval":["8"]},"body":{"encoding":"UTF-8","string":"{\n \"kind\": \"story\",\n \"id\": 84269322,\n \"project_id\": 1027488,\n \"name\": \"Changed name\",\n \"story_type\": \"feature\",\n \"current_state\": \"unscheduled\",\n \"requested_by_id\": 1266314,\n \"owner_ids\": [\n\n ],\n \"labels\": [\n\n ],\n \"created_at\": \"2014-12-10T05:20:17Z\",\n \"updated_at\": \"2014-12-10T05:20:18Z\",\n \"url\": \"https://www.pivotaltracker.com/story/show/84269322\"\n}"},"http_version":null},"recorded_at":"Wed, 10 Dec 2014 05:20:18 GMT"}],"recorded_with":"VCR 2.9.3"} \ No newline at end of file