Commit f261164887d2dc6c392784b69570f2206e98987e

Authored by Nathan Broadbent
2 parents 329fcaa1 166b36f2
Exists in master and in 1 other branch production

Merge pull request #213 from siyelo/pivotal_tracker_integration_fix

Fix Pivotal Tracker integration
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  
... ...