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