diff --git a/app/models/issue_trackers/pivotal_labs_tracker.rb b/app/models/issue_trackers/pivotal_labs_tracker.rb
index 6ecddac..9a26043 100644
--- a/app/models/issue_trackers/pivotal_labs_tracker.rb
+++ b/app/models/issue_trackers/pivotal_labs_tracker.rb
@@ -17,11 +17,18 @@ class IssueTrackers::PivotalLabsTracker < IssueTracker
PivotalTracker::Client.token = api_token
PivotalTracker::Client.use_ssl = true
project = PivotalTracker::Project.find project_id.to_i
- story = project.stories.create :name => issue_title(problem), :story_type => 'bug', :description => body_template.result(binding)
- problem.update_attributes(
- :issue_link => "https://www.pivotaltracker.com/story/show/#{story.id}",
- :issue_type => Label
- )
+ story = project.stories.create :name => issue_title(problem),
+ :story_type => 'bug', :description => body_template.result(binding),
+ :requested_by => reported_by.name
+
+ if story.errors.present?
+ raise IssueTrackers::IssueTrackerError, story.errors.first
+ else
+ problem.update_attributes(
+ :issue_link => "https://www.pivotaltracker.com/story/show/#{story.id}",
+ :issue_type => Label
+ )
+ end
end
def body_template
diff --git a/spec/models/issue_trackers/pivotal_labs_tracker_spec.rb b/spec/models/issue_trackers/pivotal_labs_tracker_spec.rb
index 6cd91d6..83a259f 100644
--- a/spec/models/issue_trackers/pivotal_labs_tracker_spec.rb
+++ b/spec/models/issue_trackers/pivotal_labs_tracker_spec.rb
@@ -1,21 +1,23 @@
require 'spec_helper'
describe IssueTrackers::PivotalLabsTracker do
- it "should create an issue on Pivotal Tracker with problem params, and set issue link for problem" do
- notice = Fabricate :notice
- tracker = Fabricate :pivotal_labs_tracker, :app => notice.app, :project_id => 10
- problem = notice.problem
- story_id = 5
- @issue_link = "https://www.pivotaltracker.com/story/show/#{story_id}"
+ let(:user) { Fabricate(:user) }
+ let(:notice) { Fabricate(:notice) }
+ let(:tracker) { Fabricate :pivotal_labs_tracker, :app => notice.app, :project_id => 10 }
+ let(:problem) { notice.problem }
+ let(:story_id) { 5 }
+ let(:issue_link) { "https://www.pivotaltracker.com/story/show/#{story_id}" }
+
+ it "creates an issue on Pivotal Tracker with problem params, and set issue link for problem" do
project_body = "#{tracker.project_id}TestProject"
stub_request(:get, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}").
- to_return(:status => 200, :headers => {'Location' => @issue_link}, :body => project_body )
+ to_return(:status => 200, :headers => {'Location' => issue_link}, :body => project_body )
story_body = "Test Story#{story_id}"
stub_request(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories").
- to_return(:status => 201, :headers => {'Location' => @issue_link}, :body => story_body )
+ to_return(:status => 201, :headers => {'Location' => issue_link}, :body => story_body )
- problem.app.issue_tracker.create_issue(problem)
+ problem.app.issue_tracker.create_issue(problem, user)
problem.reload
requested = have_requested(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories")
@@ -24,7 +26,20 @@ describe IssueTrackers::PivotalLabsTracker do
WebMock.should requested.with(:body => /\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/name>/)
WebMock.should requested.with(:body => /.+<\/description>/m)
- problem.issue_link.should == @issue_link
+ problem.issue_link.should == issue_link
+ end
+
+ it "raises IssueTrackers::IssueTrackerError exception when invalid params and does not set issue link for problem" do
+ project_body = "#{tracker.project_id}TestProject"
+ stub_request(:get, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}").
+ to_return(:status => 200, :body => project_body )
+ story_body = "Requested by can't be blankRequested by can't be blank"
+ stub_request(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories").
+ to_return(:status => 422, :body => story_body )
+
+ lambda { problem.app.issue_tracker.create_issue(problem, user)
+ }.should raise_exception(IssueTrackers::IssueTrackerError, "Requested by can't be blank")
+ problem.issue_link.should be_nil
end
end
--
libgit2 0.21.2