Commit 7ef18d79671009bd5df8ca2c0ef3b2db11e2af9c

Authored by Arthur Neves
1 parent 8088127a
Exists in master and in 1 other branch production

Issue needs the problem model

app/models/issue.rb
1 1 class Issue
2 2 include ActiveModel::Model
3   - attr_accessor :issue_tracker, :user, :title, :body
  3 + attr_accessor :problem, :user, :title, :body
4 4  
5   - def intialize(issue_tracker: nil, user: nil, title: nil, body: nil)
6   - @issue_tracker, @user, @title, @body = issue_tracker, user, title, body
  5 + def intialize(problem: nil, user: nil, title: nil, body: nil)
  6 + @problem, @user, @title, @body = problem, user, title, body
  7 + end
  8 +
  9 + def issue_tracker
  10 + problem.app.issue_tracker
7 11 end
8 12  
9 13 def save
10 14 if issue_tracker
11   - issue_tracker.create_issue(title, body, user.as_document)
  15 + url = issue_tracker.create_issue(title, body, user: user.as_document)
  16 + problem.update_attributes(issue_link: url, issue_type: issue_tracker.tracker.class.label)
12 17 else
13 18 errors.add :base, "This app has no issue tracker setup."
14 19 end
  20 +
15 21 errors.empty?
16 22 rescue => ex
17 23 errors.add :base, "There was an error during issue creation: #{ex.message}"
... ...
spec/models/issue_spec.rb
... ... @@ -2,7 +2,7 @@ require "spec_helper"
2 2  
3 3 describe Issue do
4 4  
5   - subject(:issue) { Issue.new(user: user, title: title, body: body) }
  5 + subject(:issue) { Issue.new(problem: problem, user: user, title: title, body: body) }
6 6  
7 7 let(:problem) { notice.problem }
8 8 let(:notice) { Fabricate(:notice) }
... ... @@ -49,7 +49,7 @@ describe Issue do
49 49 let(:body) { "barrr" }
50 50  
51 51 before do
52   - issue.issue_tracker = issue_tracker
  52 + problem.app.issue_tracker = issue_tracker
53 53 end
54 54  
55 55 context "#save" do
... ...
spec/models/issue_tracker_spec.rb
... ... @@ -12,8 +12,11 @@ describe IssueTracker do
12 12  
13 13 describe "#tracker" do
14 14 context "with type_tracker class not exist" do
15   - it 'return NullIssueTracker' do
16   - expect(IssueTracker.new(:type_tracker => 'Foo').tracker).to be_a ErrbitPlugin::NoneIssueTracker
  15 + let(:app) { Fabricate(:app) }
  16 +
  17 + it 'return NoneIssueTracker' do
  18 + issue_tracker = IssueTracker.new(type_tracker: 'Foo', app: app)
  19 + expect(issue_tracker.tracker).to be_a ErrbitPlugin::NoneIssueTracker
17 20 end
18 21 end
19 22 end
... ...