Commit 166b36f200b4c38a6a2113a50e27aebb2a269bd5
1 parent
329fcaa1
Exists in
master
and in
1 other branch
Fix Pivotal Tracker integration
* Pivotal Trackers API requires 'requested_by' to be set
Showing
2 changed files
with
37 additions
and
15 deletions
Show diff stats
app/models/issue_trackers/pivotal_labs_tracker.rb
| ... | ... | @@ -17,11 +17,18 @@ class IssueTrackers::PivotalLabsTracker < IssueTracker |
| 17 | 17 | PivotalTracker::Client.token = api_token |
| 18 | 18 | PivotalTracker::Client.use_ssl = true |
| 19 | 19 | project = PivotalTracker::Project.find project_id.to_i |
| 20 | - story = project.stories.create :name => issue_title(problem), :story_type => 'bug', :description => body_template.result(binding) | |
| 21 | - problem.update_attributes( | |
| 22 | - :issue_link => "https://www.pivotaltracker.com/story/show/#{story.id}", | |
| 23 | - :issue_type => Label | |
| 24 | - ) | |
| 20 | + story = project.stories.create :name => issue_title(problem), | |
| 21 | + :story_type => 'bug', :description => body_template.result(binding), | |
| 22 | + :requested_by => reported_by.name | |
| 23 | + | |
| 24 | + if story.errors.present? | |
| 25 | + raise IssueTrackers::IssueTrackerError, story.errors.first | |
| 26 | + else | |
| 27 | + problem.update_attributes( | |
| 28 | + :issue_link => "https://www.pivotaltracker.com/story/show/#{story.id}", | |
| 29 | + :issue_type => Label | |
| 30 | + ) | |
| 31 | + end | |
| 25 | 32 | end |
| 26 | 33 | |
| 27 | 34 | def body_template | ... | ... |
spec/models/issue_trackers/pivotal_labs_tracker_spec.rb
| 1 | 1 | require 'spec_helper' |
| 2 | 2 | |
| 3 | 3 | describe IssueTrackers::PivotalLabsTracker do |
| 4 | - it "should create an issue on Pivotal Tracker with problem params, and set issue link for problem" do | |
| 5 | - notice = Fabricate :notice | |
| 6 | - tracker = Fabricate :pivotal_labs_tracker, :app => notice.app, :project_id => 10 | |
| 7 | - problem = notice.problem | |
| 8 | 4 | |
| 9 | - story_id = 5 | |
| 10 | - @issue_link = "https://www.pivotaltracker.com/story/show/#{story_id}" | |
| 5 | + let(:user) { Fabricate(:user) } | |
| 6 | + let(:notice) { Fabricate(:notice) } | |
| 7 | + let(:tracker) { Fabricate :pivotal_labs_tracker, :app => notice.app, :project_id => 10 } | |
| 8 | + let(:problem) { notice.problem } | |
| 9 | + let(:story_id) { 5 } | |
| 10 | + let(:issue_link) { "https://www.pivotaltracker.com/story/show/#{story_id}" } | |
| 11 | + | |
| 12 | + it "creates an issue on Pivotal Tracker with problem params, and set issue link for problem" do | |
| 11 | 13 | project_body = "<project><id>#{tracker.project_id}</id><name>TestProject</name></project>" |
| 12 | 14 | stub_request(:get, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}"). |
| 13 | - to_return(:status => 200, :headers => {'Location' => @issue_link}, :body => project_body ) | |
| 15 | + to_return(:status => 200, :headers => {'Location' => issue_link}, :body => project_body ) | |
| 14 | 16 | story_body = "<story><name>Test Story</name><id>#{story_id}</id></story>" |
| 15 | 17 | stub_request(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories"). |
| 16 | - to_return(:status => 201, :headers => {'Location' => @issue_link}, :body => story_body ) | |
| 18 | + to_return(:status => 201, :headers => {'Location' => issue_link}, :body => story_body ) | |
| 17 | 19 | |
| 18 | - problem.app.issue_tracker.create_issue(problem) | |
| 20 | + problem.app.issue_tracker.create_issue(problem, user) | |
| 19 | 21 | problem.reload |
| 20 | 22 | |
| 21 | 23 | requested = have_requested(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories") |
| ... | ... | @@ -24,7 +26,20 @@ describe IssueTrackers::PivotalLabsTracker do |
| 24 | 26 | WebMock.should requested.with(:body => /<name>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/name>/) |
| 25 | 27 | WebMock.should requested.with(:body => /<description>.+<\/description>/m) |
| 26 | 28 | |
| 27 | - problem.issue_link.should == @issue_link | |
| 29 | + problem.issue_link.should == issue_link | |
| 30 | + end | |
| 31 | + | |
| 32 | + it "raises IssueTrackers::IssueTrackerError exception when invalid params and does not set issue link for problem" do | |
| 33 | + project_body = "<project><id>#{tracker.project_id}</id><name>TestProject</name></project>" | |
| 34 | + stub_request(:get, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}"). | |
| 35 | + to_return(:status => 200, :body => project_body ) | |
| 36 | + story_body = "<errors><error>Requested by can't be blank</error><error>Requested by can't be blank</error></errors>" | |
| 37 | + stub_request(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories"). | |
| 38 | + to_return(:status => 422, :body => story_body ) | |
| 39 | + | |
| 40 | + lambda { problem.app.issue_tracker.create_issue(problem, user) | |
| 41 | + }.should raise_exception(IssueTrackers::IssueTrackerError, "Requested by can't be blank") | |
| 42 | + problem.issue_link.should be_nil | |
| 28 | 43 | end |
| 29 | 44 | end |
| 30 | 45 | ... | ... |