caperoma 4.0.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Capefile +6 -6
- data/Capefile.template +4 -1
- data/Gemfile +1 -5
- data/Gemfile.lock +3 -45
- data/HELP +84 -13
- data/README.md +165 -29
- data/Rakefile +25 -22
- data/VERSION +1 -1
- data/bin/caperoma +6 -9
- data/caperoma.gemspec +15 -13
- data/config/crontab +0 -2
- data/config/schedule.rb +17 -19
- data/config/unschedule.rb +3 -0
- data/images/circle.png +0 -0
- data/images/report.png +0 -0
- data/lib/caperoma.rb +308 -98
- data/lib/caperoma/models/account.rb +1 -1
- data/lib/caperoma/models/project.rb +1 -2
- data/lib/caperoma/models/report.rb +15 -15
- data/lib/caperoma/models/task.rb +203 -46
- data/lib/caperoma/models/tasks/chore.rb +2 -0
- data/lib/caperoma/models/tasks/feature.rb +1 -0
- data/lib/caperoma/models/tasks/fix.rb +2 -0
- data/lib/caperoma/models/tasks/meeting.rb +2 -0
- data/lib/caperoma/models/tasks/modules/git.rb +94 -15
- data/lib/caperoma/models/tasks/task_with_commit.rb +8 -5
- data/lib/caperoma/models/tasks/task_with_separate_branch.rb +6 -4
- data/spec/caperoma_spec.rb +558 -2
- data/spec/factories/accounts.rb +1 -1
- data/spec/factories/projects.rb +1 -1
- data/spec/factories/report_recipients.rb +1 -1
- data/spec/factories/reports.rb +1 -1
- data/spec/factories/tasks.rb +1 -2
- data/spec/features/command_unknown_spec.rb +0 -1
- data/spec/features/feature_spec.rb +64 -44
- data/spec/features/init_spec.rb +20 -0
- data/spec/features/status_spec.rb +12 -11
- data/spec/models/project_spec.rb +0 -1
- data/spec/models/task_spec.rb +811 -27
- data/spec/models/task_with_commit_spec.rb +0 -4
- data/spec/models/task_with_separate_branch_spec.rb +4 -4
- data/spec/models/three_day_report_spec.rb +2 -3
- data/spec/spec_helper.rb +2 -0
- data/spec/support/capefile_generator.rb +35 -27
- data/spec/support/stubs.rb +7 -74
- metadata +47 -24
- data/lib/caperoma/models/branch.rb +0 -6
- data/lib/caperoma/services/airbrake_email_processor.rb +0 -47
- data/lib/caperoma/services/pivotal_fetcher.rb +0 -108
- data/spec/factories/branches.rb +0 -9
- data/spec/models/branch_spec.rb +0 -8
data/spec/factories/accounts.rb
CHANGED
data/spec/factories/projects.rb
CHANGED
data/spec/factories/reports.rb
CHANGED
data/spec/factories/tasks.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
FactoryGirl.define do
|
4
4
|
factory :task do
|
5
5
|
project
|
6
6
|
|
@@ -20,7 +20,6 @@ FactoryBot.define do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
factory :task_with_commit, parent: :task, class: 'TaskWithCommit' do
|
23
|
-
branch
|
24
23
|
end
|
25
24
|
|
26
25
|
factory :fix, parent: :task_with_commit, class: 'Fix' do
|
@@ -5,7 +5,6 @@ ENV['spec_type'] = 'feature'
|
|
5
5
|
|
6
6
|
describe 'Command unknown' do
|
7
7
|
let!(:project) { create :project }
|
8
|
-
let!(:current_branch) { create :branch, project: project }
|
9
8
|
|
10
9
|
it 'submits a chore' do
|
11
10
|
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma boogie woogie`
|
@@ -6,55 +6,75 @@ ENV['spec_type'] = 'feature'
|
|
6
6
|
describe 'Feature' do
|
7
7
|
let!(:project) { create :project, jira_project_id: '123' }
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
9
|
+
context 'capefile with only git repo' do
|
10
|
+
before { create_incomplete_capefile }
|
11
|
+
|
12
|
+
context 'creating from data' do
|
13
|
+
it 'submits a feature' do
|
14
|
+
expect do
|
15
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature -t "awesome feature" --description "some description" `
|
16
|
+
end.to change {
|
17
|
+
Feature.where(
|
18
|
+
title: 'awesome feature',
|
19
|
+
description: 'some description',
|
20
|
+
project_id: project.id
|
21
|
+
).count
|
22
|
+
}.by(1)
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
context '
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
27
|
+
context 'full capefile' do
|
28
|
+
before { create_capefile('123') }
|
29
|
+
|
30
|
+
context 'pivotal id blank' do
|
31
|
+
it 'submits a feature' do
|
32
|
+
expect do
|
33
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature -t "awesome feature" --description "some description" `
|
34
|
+
end.to change {
|
35
|
+
Feature.where(
|
36
|
+
title: 'awesome feature',
|
37
|
+
description: 'some description',
|
38
|
+
project_id: project.id
|
39
|
+
).count
|
40
|
+
}.by(1)
|
41
|
+
end
|
37
42
|
end
|
38
|
-
end
|
39
43
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
44
|
+
context 'pivotal id present' do
|
45
|
+
it 'submits a feature' do
|
46
|
+
expect do
|
47
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature --title "awesome feature" -d "some description" --pivotal_task_id 12345678`
|
48
|
+
end.to change {
|
49
|
+
Feature.where(
|
50
|
+
title: 'awesome feature',
|
51
|
+
description: 'some description',
|
52
|
+
project_id: project.id,
|
53
|
+
pivotal_id: '12345678'
|
54
|
+
).count
|
55
|
+
}.by(1)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'pivotal id present, additional_time present', :unstub_time_now do
|
60
|
+
it 'submits a feature' do
|
61
|
+
expect do
|
62
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature -t "awesome feature" --description "some description" -ptid 12345678 --additional_time 23`
|
63
|
+
end.to change {
|
64
|
+
Feature.where(
|
65
|
+
title: 'awesome feature',
|
66
|
+
description: 'some description',
|
67
|
+
project_id: project.id,
|
68
|
+
pivotal_id: '12345678'
|
69
|
+
).count
|
70
|
+
}.by(1)
|
71
|
+
|
72
|
+
time = Time.now
|
73
|
+
created = Feature.first.started_at
|
74
|
+
time_difference = TimeDifference.between(time, created).in_minutes.to_i
|
75
|
+
|
76
|
+
expect(time_difference).to eq 23
|
77
|
+
end
|
58
78
|
end
|
59
79
|
end
|
60
80
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Init' do
|
7
|
+
context 'project not set up' do
|
8
|
+
before { remove_capefile }
|
9
|
+
|
10
|
+
it 'should say Capefile is created' do
|
11
|
+
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma init`
|
12
|
+
expect(result).to match /Capefile successfully created/
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should create Capefile' do
|
16
|
+
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma init`
|
17
|
+
expect(File).to exist 'Capefile.test'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,30 +4,31 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
4
4
|
ENV['spec_type'] = 'feature'
|
5
5
|
|
6
6
|
describe 'Status' do
|
7
|
-
|
8
|
-
|
9
|
-
it "should say I am not working" do
|
7
|
+
context 'not working on anything' do
|
8
|
+
it 'should say I am not working' do
|
10
9
|
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma status`
|
11
10
|
expect(result).to eq "You are not working on anything now.\n"
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
15
|
-
context
|
14
|
+
context 'working on a feature', :unstub_time_now do
|
16
15
|
let!(:account) { create :account }
|
17
|
-
let!(:project) { create :project }
|
18
|
-
let!(:task) { create :feature, project: project, title: 'my title', jira_key: 'PBO-2', pivotal_id:
|
16
|
+
let!(:project) { create :project, jira_url: 'https://test.atlassian.com/' }
|
17
|
+
let!(:task) { create :feature, project: project, title: 'my title', jira_key: 'PBO-2', pivotal_id: 12_345_678, finished_at: nil }
|
19
18
|
|
20
19
|
before { task.update_column :started_at, 2.hours.ago }
|
21
|
-
before { task.update_column :
|
20
|
+
before { task.update_column :branch, 'pbo-2-my-title' }
|
21
|
+
before { task.update_column :parent_branch, 'develop' }
|
22
22
|
|
23
|
-
it
|
23
|
+
it 'should say I am not working' do
|
24
24
|
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma status`
|
25
25
|
expect(result).to match /Type: Feature/
|
26
26
|
expect(result).to match /Title: my title/
|
27
|
-
expect(result).to match
|
28
|
-
expect(result).to match
|
27
|
+
expect(result).to match %r{Jira ID: PBO-2 \(https://test.atlassian.com/browse/PBO-2\)}
|
28
|
+
expect(result).to match %r{Pivotal ID: 12345678 \(https://www.pivotaltracker.com/story/show/12345678\)}
|
29
|
+
expect(result).to match /Branch with the task: pbo-2-my-title/
|
29
30
|
expect(result).to match /Time spent at the moment: 2h/
|
30
|
-
expect(result).to match /Pull request will be sent to this branch:
|
31
|
+
expect(result).to match /Pull request will be sent to this branch: develop/
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
data/spec/models/project_spec.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
4
|
|
5
5
|
RSpec.describe Project, type: :model do
|
6
|
-
it { expect(subject).to have_many :branches }
|
7
6
|
it { expect(subject).to have_many :chores }
|
8
7
|
it { expect(subject).to have_many :bugs }
|
9
8
|
it { expect(subject).to have_many :features }
|
data/spec/models/task_spec.rb
CHANGED
@@ -13,7 +13,7 @@ RSpec.describe Task, type: :model do
|
|
13
13
|
describe 'validations' do
|
14
14
|
it { expect(subject).to validate_presence_of(:title) }
|
15
15
|
|
16
|
-
describe '
|
16
|
+
describe 'pivotal_id' do
|
17
17
|
it { expect(subject).to allow_value(nil).for(:pivotal_id) }
|
18
18
|
it { expect(subject).to allow_value('123456').for(:pivotal_id) }
|
19
19
|
it { expect(subject).to allow_value('1234567').for(:pivotal_id) }
|
@@ -23,6 +23,14 @@ RSpec.describe Task, type: :model do
|
|
23
23
|
it { expect(subject).not_to allow_value('12').for(:pivotal_id) }
|
24
24
|
it { expect(subject).not_to allow_value('123.45678').for(:pivotal_id) }
|
25
25
|
end
|
26
|
+
|
27
|
+
describe 'additional_time' do
|
28
|
+
it { expect(subject).to allow_value(nil).for(:additional_time) }
|
29
|
+
it { expect(subject).to allow_value('12').for(:additional_time) }
|
30
|
+
it { expect(subject).to allow_value('123456').for(:additional_time) }
|
31
|
+
it { expect(subject).not_to allow_value('#12345678').for(:additional_time) }
|
32
|
+
it { expect(subject).not_to allow_value('123.45678').for(:additional_time) }
|
33
|
+
end
|
26
34
|
end
|
27
35
|
|
28
36
|
describe 'scopes' do
|
@@ -46,6 +54,12 @@ RSpec.describe Task, type: :model do
|
|
46
54
|
end
|
47
55
|
|
48
56
|
describe 'class_methods' do
|
57
|
+
let!(:account) { create :account, type: '--jira' }
|
58
|
+
let(:faraday) { double('Faraday', post: response) }
|
59
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
60
|
+
|
61
|
+
before { expect(Faraday).to receive(:new).and_return faraday }
|
62
|
+
|
49
63
|
describe '::finish_started' do
|
50
64
|
let!(:started) { create :task, finished_at: nil }
|
51
65
|
|
@@ -88,8 +102,11 @@ RSpec.describe Task, type: :model do
|
|
88
102
|
end
|
89
103
|
|
90
104
|
describe 'methods' do
|
105
|
+
let!(:jira_account) { create :account, type: '--jira' }
|
106
|
+
let!(:pivotal_account) { create :account, type: '--pivotal' }
|
107
|
+
|
91
108
|
context 'pivotal_id present' do
|
92
|
-
let!(:task) { create :task, finished_at: nil, pivotal_id: '12345678' }
|
109
|
+
let!(:task) { create :task, finished_at: nil, pivotal_id: '12345678', additional_time: 5 }
|
93
110
|
describe '#finish' do
|
94
111
|
it 'should finish it and log time' do
|
95
112
|
expect(task).to receive :close_issue_on_jira
|
@@ -132,7 +149,7 @@ RSpec.describe Task, type: :model do
|
|
132
149
|
end
|
133
150
|
|
134
151
|
context 'pivotal_id blank' do
|
135
|
-
let!(:task) { create :task, finished_at: nil, pivotal_id: nil }
|
152
|
+
let!(:task) { create :task, finished_at: nil, pivotal_id: nil, additional_time: 5 }
|
136
153
|
describe '#finish' do
|
137
154
|
it 'should finish it and log time' do
|
138
155
|
expect(task).to receive :close_issue_on_jira
|
@@ -216,7 +233,7 @@ RSpec.describe Task, type: :model do
|
|
216
233
|
let(:task) { create :task }
|
217
234
|
let!(:account) { create :account, type: '--jira' }
|
218
235
|
let(:faraday) { double('Faraday', post: response) }
|
219
|
-
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE) }
|
236
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
220
237
|
|
221
238
|
it 'should create task in Jira after create' do
|
222
239
|
expect(Faraday).to receive(:new).and_return faraday
|
@@ -231,10 +248,168 @@ RSpec.describe Task, type: :model do
|
|
231
248
|
end
|
232
249
|
end
|
233
250
|
|
251
|
+
context 'jira account present but no internet connection' do
|
252
|
+
let(:task) { create :task }
|
253
|
+
let!(:account) { create :account, type: '--jira' }
|
254
|
+
let(:faraday) { double('Faraday', post: response) }
|
255
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
256
|
+
|
257
|
+
before do
|
258
|
+
expect(Faraday).to receive(:new).and_return faraday
|
259
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
260
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
261
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'give an error that there is no connection' do
|
265
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Jira./
|
266
|
+
task.save
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'should still create the task' do
|
270
|
+
expect do
|
271
|
+
task.save
|
272
|
+
end.to change {
|
273
|
+
Task.count
|
274
|
+
}.by(1)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
context 'jira account present but the returned status was "forbidden"' do
|
279
|
+
let(:task) { create :task, jira_key: nil }
|
280
|
+
let!(:account) { create :account, type: '--jira' }
|
281
|
+
let(:faraday) { double('Faraday', post: response) }
|
282
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 401, reason_phrase: 'not authorized') }
|
283
|
+
|
284
|
+
before do
|
285
|
+
expect(Faraday).to receive(:new).and_return faraday
|
286
|
+
allow(faraday).to receive(:post).and_return response
|
287
|
+
allow(faraday).to receive(:get).and_return response
|
288
|
+
allow(faraday).to receive(:put).and_return response
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'give an error that there is no connection' do
|
292
|
+
expect(STDOUT).to receive(:puts).with /Forbidden access/
|
293
|
+
task.save
|
294
|
+
end
|
295
|
+
|
296
|
+
it 'should still create the task' do
|
297
|
+
expect do
|
298
|
+
task.save
|
299
|
+
end.to change {
|
300
|
+
Task.count
|
301
|
+
}.by(1)
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'should keep jira_key blank' do
|
305
|
+
task.save
|
306
|
+
expect(task.reload.jira_key).to be_nil
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
context 'jira account present but the returned status was "forbidden"' do
|
311
|
+
let(:task) { create :task, jira_key: nil }
|
312
|
+
let!(:account) { create :account, type: '--jira' }
|
313
|
+
let(:faraday) { double('Faraday', post: response) }
|
314
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 403, reason_phrase: 'not authorized') }
|
315
|
+
|
316
|
+
before do
|
317
|
+
expect(Faraday).to receive(:new).and_return faraday
|
318
|
+
allow(faraday).to receive(:post).and_return response
|
319
|
+
allow(faraday).to receive(:get).and_return response
|
320
|
+
allow(faraday).to receive(:put).and_return response
|
321
|
+
end
|
322
|
+
|
323
|
+
it 'give an error that there is no connection' do
|
324
|
+
expect(STDOUT).to receive(:puts).with /Forbidden access/
|
325
|
+
task.save
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'should still create the task' do
|
329
|
+
expect do
|
330
|
+
task.save
|
331
|
+
end.to change {
|
332
|
+
Task.count
|
333
|
+
}.by(1)
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'should keep jira_key blank' do
|
337
|
+
task.save
|
338
|
+
expect(task.reload.jira_key).to be_nil
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
context 'jira account present but the returned status was "not found"' do
|
343
|
+
let(:task) { create :task, jira_key: nil }
|
344
|
+
let!(:account) { create :account, type: '--jira' }
|
345
|
+
let(:faraday) { double('Faraday', post: response) }
|
346
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 404, reason_phrase: 'not found') }
|
347
|
+
|
348
|
+
before do
|
349
|
+
expect(Faraday).to receive(:new).and_return faraday
|
350
|
+
allow(faraday).to receive(:post).and_return response
|
351
|
+
allow(faraday).to receive(:get).and_return response
|
352
|
+
allow(faraday).to receive(:put).and_return response
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'give an error that there is no connection' do
|
356
|
+
expect(STDOUT).to receive(:puts).with /Not found/
|
357
|
+
task.save
|
358
|
+
end
|
359
|
+
|
360
|
+
it 'should still create the task' do
|
361
|
+
expect do
|
362
|
+
task.save
|
363
|
+
end.to change {
|
364
|
+
Task.count
|
365
|
+
}.by(1)
|
366
|
+
end
|
367
|
+
|
368
|
+
it 'should keep jira_key blank' do
|
369
|
+
task.save
|
370
|
+
expect(task.reload.jira_key).to be_nil
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
context 'jira account present but the returned status was unknown error' do
|
375
|
+
let(:task) { create :task, jira_key: nil }
|
376
|
+
let!(:account) { create :account, type: '--jira' }
|
377
|
+
let(:faraday) { double('Faraday', post: response) }
|
378
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 500, reason_phrase: 'server error') }
|
379
|
+
|
380
|
+
before do
|
381
|
+
expect(Faraday).to receive(:new).and_return faraday
|
382
|
+
allow(faraday).to receive(:post).and_return response
|
383
|
+
allow(faraday).to receive(:get).and_return response
|
384
|
+
allow(faraday).to receive(:put).and_return response
|
385
|
+
end
|
386
|
+
|
387
|
+
it 'give an error that there is no connection' do
|
388
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
389
|
+
expect(STDOUT).to receive(:puts).with /500/
|
390
|
+
expect(STDOUT).to receive(:puts).with /server error/
|
391
|
+
|
392
|
+
task.save
|
393
|
+
end
|
394
|
+
|
395
|
+
it 'should still create the task' do
|
396
|
+
expect do
|
397
|
+
task.save
|
398
|
+
end.to change {
|
399
|
+
Task.count
|
400
|
+
}.by(1)
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'should keep jira_key blank' do
|
404
|
+
task.save
|
405
|
+
expect(task.reload.jira_key).to be_nil
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
234
409
|
context 'jira account not present' do
|
235
410
|
let(:task) { create :task }
|
236
411
|
let(:faraday) { double('Faraday', post: response) }
|
237
|
-
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE) }
|
412
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
238
413
|
|
239
414
|
it 'should not create task in Jira after create' do
|
240
415
|
allow(Faraday).to receive(:new).and_return faraday
|
@@ -259,6 +434,83 @@ RSpec.describe Task, type: :model do
|
|
259
434
|
end
|
260
435
|
end
|
261
436
|
|
437
|
+
context 'jira id present, account present, no internet connection' do
|
438
|
+
let!(:account) { create :account, type: '--jira' }
|
439
|
+
let!(:jira_key) { 'OK-1' }
|
440
|
+
let(:faraday) { double('Faraday', post: response) }
|
441
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
442
|
+
|
443
|
+
before do
|
444
|
+
allow(Faraday).to receive(:new).and_return faraday
|
445
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
446
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
447
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
448
|
+
end
|
449
|
+
|
450
|
+
it 'should give the no connection error', :unstub_jira_starting do
|
451
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Jira./
|
452
|
+
task.save
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
describe 'error codes', :unstub_jira_starting do
|
457
|
+
let!(:account) { create :account, type: '--jira' }
|
458
|
+
let!(:jira_key) { 'OK-1' }
|
459
|
+
let(:faraday) { double('Faraday', post: response) }
|
460
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
461
|
+
let(:status) { 200 }
|
462
|
+
let(:reason_phrase) { 'OK' }
|
463
|
+
|
464
|
+
before do
|
465
|
+
allow(Faraday).to receive(:new).and_return faraday
|
466
|
+
allow(faraday).to receive(:post).and_return response
|
467
|
+
allow(faraday).to receive(:get).and_return response
|
468
|
+
allow(faraday).to receive(:put).and_return response
|
469
|
+
end
|
470
|
+
|
471
|
+
context 'jira id present, account present, but server gave "unouthorized" error' do
|
472
|
+
let(:status) { 401 }
|
473
|
+
let(:reason_phrase) { 'unauthorized' }
|
474
|
+
|
475
|
+
it 'should say it could not start' do
|
476
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
477
|
+
task.save
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
context 'jira id present, account present, but server gave "unouthorized" error' do
|
482
|
+
let(:status) { 403 }
|
483
|
+
let(:reason_phrase) { 'unauthorized' }
|
484
|
+
|
485
|
+
it 'should say it could not start' do
|
486
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
487
|
+
task.save
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
context 'jira id present, account present, but server gave "not found" error' do
|
492
|
+
let(:status) { 404 }
|
493
|
+
let(:reason_phrase) { 'not found' }
|
494
|
+
|
495
|
+
it 'should say it could not start' do
|
496
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
497
|
+
task.save
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
context 'jira id present, account present, but server gave "unknown" error' do
|
502
|
+
let(:status) { 500 }
|
503
|
+
let(:reason_phrase) { 'server error' }
|
504
|
+
|
505
|
+
it 'should say it could not start' do
|
506
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
507
|
+
expect(STDOUT).to receive(:puts).with /500/
|
508
|
+
expect(STDOUT).to receive(:puts).with /server error/
|
509
|
+
task.save
|
510
|
+
end
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
262
514
|
context 'account not present, jira id not present' do
|
263
515
|
let!(:jira_key) { 'OK-1' }
|
264
516
|
|
@@ -296,7 +548,9 @@ RSpec.describe Task, type: :model do
|
|
296
548
|
let(:task) { build :task, pivotal_id: pt_id }
|
297
549
|
let!(:account) { create :account, type: '--pivotal' }
|
298
550
|
let(:faraday) { double('Faraday', post: response) }
|
299
|
-
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE) }
|
551
|
+
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
552
|
+
let(:status) { 200 }
|
553
|
+
let(:reason_phrase) { 'OK' }
|
300
554
|
|
301
555
|
before { allow(task).to receive(:this_is_a_type_a_user_wants_to_create?).and_return(should_create) }
|
302
556
|
|
@@ -313,7 +567,7 @@ RSpec.describe Task, type: :model do
|
|
313
567
|
end
|
314
568
|
end
|
315
569
|
|
316
|
-
context 'PT id present
|
570
|
+
context 'PT id present and should create' do
|
317
571
|
let(:pt_id) { '567890123' }
|
318
572
|
let(:should_create) { true }
|
319
573
|
|
@@ -326,6 +580,39 @@ RSpec.describe Task, type: :model do
|
|
326
580
|
end
|
327
581
|
end
|
328
582
|
|
583
|
+
context 'PT id present and should create but there is no internet connection' do
|
584
|
+
let(:pt_id) { nil }
|
585
|
+
let(:should_create) { true }
|
586
|
+
|
587
|
+
before do
|
588
|
+
allow(Faraday).to receive(:new).and_return faraday
|
589
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
590
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
591
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
592
|
+
end
|
593
|
+
|
594
|
+
it 'should still be nil' do
|
595
|
+
task.save
|
596
|
+
|
597
|
+
task.reload.tap do |task|
|
598
|
+
expect(task.pivotal_id).to be_blank
|
599
|
+
end
|
600
|
+
end
|
601
|
+
|
602
|
+
it 'should say there is no connection' do
|
603
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Pivotal./
|
604
|
+
task.save
|
605
|
+
end
|
606
|
+
|
607
|
+
it 'should still create the task' do
|
608
|
+
expect do
|
609
|
+
task.save
|
610
|
+
end.to change {
|
611
|
+
Task.count
|
612
|
+
}.by(1)
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
329
616
|
context 'PT id blank but should not create' do
|
330
617
|
let(:pt_id) { nil }
|
331
618
|
let(:should_create) { false }
|
@@ -352,12 +639,154 @@ RSpec.describe Task, type: :model do
|
|
352
639
|
end
|
353
640
|
end
|
354
641
|
end
|
642
|
+
|
643
|
+
context 'PT id blank and should create but got "unauthorized error' do
|
644
|
+
let(:pt_id) { nil }
|
645
|
+
let(:should_create) { true }
|
646
|
+
let(:status) { 401 }
|
647
|
+
let(:reason_phrase) { 'unauthorized' }
|
648
|
+
|
649
|
+
before do
|
650
|
+
allow(Faraday).to receive(:new).and_return faraday
|
651
|
+
allow(faraday).to receive(:post).and_return response
|
652
|
+
allow(faraday).to receive(:get).and_return response
|
653
|
+
allow(faraday).to receive(:put).and_return response
|
654
|
+
end
|
655
|
+
|
656
|
+
it 'should create task in Pivotal' do
|
657
|
+
expect do
|
658
|
+
task.save
|
659
|
+
end.to change {
|
660
|
+
Task.count
|
661
|
+
}.by(1)
|
662
|
+
end
|
663
|
+
|
664
|
+
it 'should keep pivotal id blank' do
|
665
|
+
task.save
|
666
|
+
task.reload.tap do |task|
|
667
|
+
expect(task.pivotal_id).to eq nil
|
668
|
+
end
|
669
|
+
end
|
670
|
+
|
671
|
+
it 'should say it got an error' do
|
672
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
673
|
+
|
674
|
+
task.save
|
675
|
+
end
|
676
|
+
end
|
677
|
+
|
678
|
+
context 'PT id blank and should create but got "unauthorized error' do
|
679
|
+
let(:pt_id) { nil }
|
680
|
+
let(:should_create) { true }
|
681
|
+
let(:status) { 403 }
|
682
|
+
let(:reason_phrase) { 'unauthorized' }
|
683
|
+
|
684
|
+
before do
|
685
|
+
allow(Faraday).to receive(:new).and_return faraday
|
686
|
+
allow(faraday).to receive(:post).and_return response
|
687
|
+
allow(faraday).to receive(:get).and_return response
|
688
|
+
allow(faraday).to receive(:put).and_return response
|
689
|
+
end
|
690
|
+
|
691
|
+
it 'should create task in Pivotal' do
|
692
|
+
expect do
|
693
|
+
task.save
|
694
|
+
end.to change {
|
695
|
+
Task.count
|
696
|
+
}.by(1)
|
697
|
+
end
|
698
|
+
|
699
|
+
it 'should keep pivotal id blank' do
|
700
|
+
task.save
|
701
|
+
task.reload.tap do |task|
|
702
|
+
expect(task.pivotal_id).to eq nil
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
706
|
+
it 'should say it got an error' do
|
707
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
708
|
+
|
709
|
+
task.save
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
context 'PT id blank and should create but got "not found" error' do
|
714
|
+
let(:pt_id) { nil }
|
715
|
+
let(:should_create) { true }
|
716
|
+
let(:status) { 404 }
|
717
|
+
let(:reason_phrase) { 'unauthorized' }
|
718
|
+
|
719
|
+
before do
|
720
|
+
allow(Faraday).to receive(:new).and_return faraday
|
721
|
+
allow(faraday).to receive(:post).and_return response
|
722
|
+
allow(faraday).to receive(:get).and_return response
|
723
|
+
allow(faraday).to receive(:put).and_return response
|
724
|
+
end
|
725
|
+
|
726
|
+
it 'should create task in Pivotal' do
|
727
|
+
expect do
|
728
|
+
task.save
|
729
|
+
end.to change {
|
730
|
+
Task.count
|
731
|
+
}.by(1)
|
732
|
+
end
|
733
|
+
|
734
|
+
it 'should keep pivotal id blank' do
|
735
|
+
task.save
|
736
|
+
task.reload.tap do |task|
|
737
|
+
expect(task.pivotal_id).to eq nil
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
741
|
+
it 'should say it got an error' do
|
742
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
743
|
+
|
744
|
+
task.save
|
745
|
+
end
|
746
|
+
end
|
747
|
+
|
748
|
+
context 'PT id blank and should create but got "some other" error' do
|
749
|
+
let(:pt_id) { nil }
|
750
|
+
let(:should_create) { true }
|
751
|
+
let(:status) { 500 }
|
752
|
+
let(:reason_phrase) { 'server error' }
|
753
|
+
|
754
|
+
before do
|
755
|
+
allow(Faraday).to receive(:new).and_return faraday
|
756
|
+
allow(faraday).to receive(:post).and_return response
|
757
|
+
allow(faraday).to receive(:get).and_return response
|
758
|
+
allow(faraday).to receive(:put).and_return response
|
759
|
+
end
|
760
|
+
|
761
|
+
it 'should create task in Pivotal' do
|
762
|
+
expect do
|
763
|
+
task.save
|
764
|
+
end.to change {
|
765
|
+
Task.count
|
766
|
+
}.by(1)
|
767
|
+
end
|
768
|
+
|
769
|
+
it 'should keep pivotal id blank' do
|
770
|
+
task.save
|
771
|
+
task.reload.tap do |task|
|
772
|
+
expect(task.pivotal_id).to eq nil
|
773
|
+
end
|
774
|
+
end
|
775
|
+
|
776
|
+
it 'should say it got an error' do
|
777
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
778
|
+
expect(STDOUT).to receive(:puts).with /500/
|
779
|
+
expect(STDOUT).to receive(:puts).with /server error/
|
780
|
+
|
781
|
+
task.save
|
782
|
+
end
|
783
|
+
end
|
355
784
|
end
|
356
785
|
|
357
786
|
context 'pivotal account blank' do
|
358
787
|
let(:task) { build :task, pivotal_id: pt_id }
|
359
788
|
let(:faraday) { double('Faraday', post: response) }
|
360
|
-
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE) }
|
789
|
+
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE, status: 200) }
|
361
790
|
|
362
791
|
before { allow(task).to receive(:this_is_a_type_a_user_wants_to_create?).and_return(should_create) }
|
363
792
|
|
@@ -418,7 +847,6 @@ RSpec.describe Task, type: :model do
|
|
418
847
|
|
419
848
|
describe '::start_issue_on_pivotal' do
|
420
849
|
let(:task) { build :task, pivotal_id: pivotal_id }
|
421
|
-
# before { allow(task).to receive(:this_is_a_type_a_user_wants_to_create?).and_return should_create_this_type }
|
422
850
|
|
423
851
|
context 'pt id present, pt account present' do
|
424
852
|
let(:pivotal_id) { '12345678' }
|
@@ -431,6 +859,83 @@ RSpec.describe Task, type: :model do
|
|
431
859
|
end
|
432
860
|
end
|
433
861
|
|
862
|
+
context 'pt id present, pt account present, no internet connection' do
|
863
|
+
let(:pivotal_id) { '12345678' }
|
864
|
+
let!(:account) { create :account, type: '--pivotal' }
|
865
|
+
let(:faraday) { double('Faraday', post: response) }
|
866
|
+
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE, status: 200) }
|
867
|
+
|
868
|
+
before do
|
869
|
+
allow(Faraday).to receive(:new).and_return faraday
|
870
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
871
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
872
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
873
|
+
end
|
874
|
+
|
875
|
+
it 'should give the no connection error', :unstub_pivotal_starting do
|
876
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Pivotal./
|
877
|
+
task.save
|
878
|
+
end
|
879
|
+
end
|
880
|
+
|
881
|
+
describe 'error codes', :unstub_pivotal_starting do
|
882
|
+
let(:pivotal_id) { '12345678' }
|
883
|
+
let!(:account) { create :account, type: '--pivotal' }
|
884
|
+
let(:faraday) { double('Faraday', post: response) }
|
885
|
+
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
886
|
+
let(:status) { 200 }
|
887
|
+
let(:reason_phrase) { 'OK' }
|
888
|
+
|
889
|
+
before do
|
890
|
+
allow(Faraday).to receive(:new).and_return faraday
|
891
|
+
allow(faraday).to receive(:post).and_return response
|
892
|
+
allow(faraday).to receive(:get).and_return response
|
893
|
+
allow(faraday).to receive(:put).and_return response
|
894
|
+
end
|
895
|
+
|
896
|
+
context 'pt id present, pt account present, "unauthorized" server error' do
|
897
|
+
let(:status) { 401 }
|
898
|
+
let(:reason_phrase) { 'unauth' }
|
899
|
+
|
900
|
+
it 'should give the no auth error' do
|
901
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
902
|
+
task.save
|
903
|
+
end
|
904
|
+
end
|
905
|
+
|
906
|
+
context 'pt id present, pt account present, "unauthorized" server error' do
|
907
|
+
let(:status) { 403 }
|
908
|
+
let(:reason_phrase) { 'unauth' }
|
909
|
+
|
910
|
+
it 'should give the no auth error' do
|
911
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
912
|
+
task.save
|
913
|
+
end
|
914
|
+
end
|
915
|
+
|
916
|
+
context 'pt id present, pt account present, "not found" server error' do
|
917
|
+
let(:status) { 404 }
|
918
|
+
let(:reason_phrase) { 'not found' }
|
919
|
+
|
920
|
+
it 'should give the not found error' do
|
921
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
922
|
+
task.save
|
923
|
+
end
|
924
|
+
end
|
925
|
+
|
926
|
+
context 'pt id present, pt account present, "unknown" server error' do
|
927
|
+
let(:status) { 500 }
|
928
|
+
let(:reason_phrase) { 'error' }
|
929
|
+
|
930
|
+
it 'should give the error' do
|
931
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
932
|
+
expect(STDOUT).to receive(:puts).with /500/
|
933
|
+
expect(STDOUT).to receive(:puts).with /error/
|
934
|
+
task.save
|
935
|
+
end
|
936
|
+
end
|
937
|
+
end
|
938
|
+
|
434
939
|
context 'pt id blank, pt account present' do
|
435
940
|
let(:pivotal_id) { nil }
|
436
941
|
let!(:account) { create :account, type: '--pivotal' }
|
@@ -491,16 +996,38 @@ RSpec.describe Task, type: :model do
|
|
491
996
|
let!(:account) { create :account, type: '--jira', username: 'someuser' }
|
492
997
|
|
493
998
|
describe '#create_issue_on_jira_data' do
|
494
|
-
let!(:task) { create :task, title: 'dupis', description:
|
999
|
+
let!(:task) { create :task, title: 'dupis', description: description, project: project }
|
1000
|
+
|
1001
|
+
context 'description present' do
|
1002
|
+
let(:description) { 'bamis' }
|
1003
|
+
|
1004
|
+
it 'should format hash' do
|
1005
|
+
allow(task).to receive(:issue_type).and_return '492'
|
1006
|
+
result = task.send(:create_issue_on_jira_data)
|
1007
|
+
JSON.parse(result).tap do |format|
|
1008
|
+
expect(format['fields']['project']['id']).to eq '123'
|
1009
|
+
expect(format['fields']['issuetype']['id']).to eq '492'
|
1010
|
+
expect(format['fields']['summary']).to eq 'dupis'
|
1011
|
+
expect(format['fields']['description']['content'][0]['content'][0]['text']).to eq 'bamis'
|
1012
|
+
expect(format['fields']['assignee']['name']).to eq 'someuser'
|
1013
|
+
end
|
1014
|
+
end
|
1015
|
+
end
|
495
1016
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
1017
|
+
context 'description not' do
|
1018
|
+
let(:description) { nil }
|
1019
|
+
|
1020
|
+
it 'should format hash' do
|
1021
|
+
allow(task).to receive(:issue_type).and_return '492'
|
1022
|
+
result = task.send(:create_issue_on_jira_data)
|
1023
|
+
JSON.parse(result).tap do |format|
|
1024
|
+
expect(format['fields']['project']['id']).to eq '123'
|
1025
|
+
expect(format['fields']['issuetype']['id']).to eq '492'
|
1026
|
+
expect(format['fields']['summary']).to eq 'dupis'
|
1027
|
+
expect(format['fields']['assignee']['name']).to eq 'someuser'
|
1028
|
+
|
1029
|
+
expect(format['fields']['description']).to be_nil
|
1030
|
+
end
|
504
1031
|
end
|
505
1032
|
end
|
506
1033
|
end
|
@@ -531,6 +1058,82 @@ RSpec.describe Task, type: :model do
|
|
531
1058
|
end
|
532
1059
|
end
|
533
1060
|
|
1061
|
+
describe '::close_issue_on_jira' do
|
1062
|
+
let(:task) { build :task, jira_key: jira_key }
|
1063
|
+
|
1064
|
+
let!(:account) { create :account, type: '--jira' }
|
1065
|
+
let!(:jira_key) { 'OK-1' }
|
1066
|
+
let(:faraday) { double('Faraday', post: response) }
|
1067
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
1068
|
+
let(:status) { 200 }
|
1069
|
+
let(:reason_phrase) { 'OK' }
|
1070
|
+
|
1071
|
+
before { allow(Faraday).to receive(:new).and_return faraday }
|
1072
|
+
|
1073
|
+
context 'no internet connection' do
|
1074
|
+
before do
|
1075
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
1076
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
1077
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
it 'should give the no connection error' do
|
1081
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Jira./
|
1082
|
+
task.send(:close_issue_on_jira)
|
1083
|
+
end
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
describe 'error codes', :unstub_jira_starting do
|
1087
|
+
before do
|
1088
|
+
allow(faraday).to receive(:post).and_return response
|
1089
|
+
allow(faraday).to receive(:get).and_return response
|
1090
|
+
allow(faraday).to receive(:put).and_return response
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
context 'server gave "unouthorized" error' do
|
1094
|
+
let(:status) { 401 }
|
1095
|
+
let(:reason_phrase) { 'unauthorized' }
|
1096
|
+
|
1097
|
+
it 'should say it could not start' do
|
1098
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1099
|
+
task.send(:close_issue_on_jira)
|
1100
|
+
end
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
context 'server gave "unouthorized" error' do
|
1104
|
+
let(:status) { 403 }
|
1105
|
+
let(:reason_phrase) { 'unauthorized' }
|
1106
|
+
|
1107
|
+
it 'should say it could not start' do
|
1108
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1109
|
+
task.send(:close_issue_on_jira)
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
context 'server gave "not found" error' do
|
1114
|
+
let(:status) { 404 }
|
1115
|
+
let(:reason_phrase) { 'not found' }
|
1116
|
+
|
1117
|
+
it 'should say it could not start' do
|
1118
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
1119
|
+
task.send(:close_issue_on_jira)
|
1120
|
+
end
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
context 'server gave "unknown" error' do
|
1124
|
+
let(:status) { 500 }
|
1125
|
+
let(:reason_phrase) { 'server error' }
|
1126
|
+
|
1127
|
+
it 'should say it could not finish' do
|
1128
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
1129
|
+
expect(STDOUT).to receive(:puts).with /500/
|
1130
|
+
expect(STDOUT).to receive(:puts).with /server error/
|
1131
|
+
task.send(:close_issue_on_jira)
|
1132
|
+
end
|
1133
|
+
end
|
1134
|
+
end
|
1135
|
+
end
|
1136
|
+
|
534
1137
|
describe '#log_work_to_jira_data' do
|
535
1138
|
let!(:task) { create :task }
|
536
1139
|
|
@@ -547,17 +1150,123 @@ RSpec.describe Task, type: :model do
|
|
547
1150
|
end
|
548
1151
|
end
|
549
1152
|
|
1153
|
+
describe '#log_work_to_jira' do
|
1154
|
+
let(:task) { build :task, jira_key: jira_key }
|
1155
|
+
|
1156
|
+
context 'no internet connection' do
|
1157
|
+
let!(:account) { create :account, type: '--jira' }
|
1158
|
+
let(:jira_key) { 'OK-1' }
|
1159
|
+
let(:faraday) { double('Faraday', post: response) }
|
1160
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: 200) }
|
1161
|
+
|
1162
|
+
before do
|
1163
|
+
allow(Faraday).to receive(:new).and_return faraday
|
1164
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
1165
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
1166
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
1167
|
+
end
|
1168
|
+
|
1169
|
+
it 'should give the no connection error', :unstub_jira_starting do
|
1170
|
+
task.save
|
1171
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Jira./
|
1172
|
+
task.send(:log_work_to_jira)
|
1173
|
+
end
|
1174
|
+
end
|
1175
|
+
|
1176
|
+
describe 'errors', :unstub_jira_starting do
|
1177
|
+
let!(:account) { create :account, type: '--jira' }
|
1178
|
+
let(:jira_key) { 'OK-1' }
|
1179
|
+
let(:faraday) { double('Faraday', post: response) }
|
1180
|
+
let(:response) { double('Faraday', body: JIRA_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
1181
|
+
let(:status) { 200 }
|
1182
|
+
let(:reason_phrase) { 'OK' }
|
1183
|
+
|
1184
|
+
before do
|
1185
|
+
allow(Faraday).to receive(:new).and_return faraday
|
1186
|
+
allow(faraday).to receive(:post).and_return response
|
1187
|
+
allow(faraday).to receive(:get).and_return response
|
1188
|
+
allow(faraday).to receive(:put).and_return response
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
context 'server gave the "unauth" error' do
|
1192
|
+
let(:status) { 401 }
|
1193
|
+
let(:reason_phrase) { 'unauth' }
|
1194
|
+
|
1195
|
+
it 'should give the "unauth" error' do
|
1196
|
+
task.save
|
1197
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1198
|
+
task.send(:log_work_to_jira)
|
1199
|
+
end
|
1200
|
+
end
|
1201
|
+
|
1202
|
+
context 'server gave the "unauth" error' do
|
1203
|
+
let(:status) { 403 }
|
1204
|
+
let(:reason_phrase) { 'unauth' }
|
1205
|
+
|
1206
|
+
it 'should give the "unauth" error' do
|
1207
|
+
task.save
|
1208
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1209
|
+
task.send(:log_work_to_jira)
|
1210
|
+
end
|
1211
|
+
end
|
1212
|
+
|
1213
|
+
context 'server gave the "not found" error' do
|
1214
|
+
let(:status) { 404 }
|
1215
|
+
let(:reason_phrase) { 'not found' }
|
1216
|
+
|
1217
|
+
it 'should give the "unauth" error' do
|
1218
|
+
task.save
|
1219
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
1220
|
+
task.send(:log_work_to_jira)
|
1221
|
+
end
|
1222
|
+
end
|
1223
|
+
|
1224
|
+
context 'server gave the "unknown" error' do
|
1225
|
+
let(:status) { 500 }
|
1226
|
+
let(:reason_phrase) { 'unknown' }
|
1227
|
+
|
1228
|
+
it 'should give the "unknown" error' do
|
1229
|
+
task.save
|
1230
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
1231
|
+
expect(STDOUT).to receive(:puts).with /500/
|
1232
|
+
expect(STDOUT).to receive(:puts).with /unknown/
|
1233
|
+
task.send(:log_work_to_jira)
|
1234
|
+
end
|
1235
|
+
end
|
1236
|
+
end
|
1237
|
+
end
|
1238
|
+
|
550
1239
|
describe '#create_issue_on_pivotal_data' do
|
551
|
-
let!(:task) { create :task, title: 'dupis', description: 'bamis', project: project }
|
1240
|
+
let!(:task) { create :task, title: 'dupis', description: 'bamis', project: project, pivotal_estimate: estimate }
|
1241
|
+
|
1242
|
+
context 'estimate is present' do
|
1243
|
+
let(:estimate) { 5 }
|
1244
|
+
|
1245
|
+
it 'should format hash' do
|
1246
|
+
allow(task).to receive(:story_type).and_return 'chore'
|
1247
|
+
result = task.send(:create_issue_on_pivotal_data)
|
1248
|
+
JSON.parse(result).tap do |format|
|
1249
|
+
expect(format['current_state']).to eq 'unstarted'
|
1250
|
+
expect(format['estimate']).to eq 5
|
1251
|
+
expect(format['name']).to eq 'dupis'
|
1252
|
+
expect(format['description']).to eq 'bamis'
|
1253
|
+
expect(format['story_type']).to eq 'chore'
|
1254
|
+
end
|
1255
|
+
end
|
1256
|
+
end
|
552
1257
|
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
1258
|
+
context 'estimate is not present' do
|
1259
|
+
let(:estimate) { 0 }
|
1260
|
+
|
1261
|
+
it 'should format hash' do
|
1262
|
+
allow(task).to receive(:story_type).and_return 'chore'
|
1263
|
+
result = task.send(:create_issue_on_pivotal_data)
|
1264
|
+
JSON.parse(result).tap do |format|
|
1265
|
+
expect(format['current_state']).to eq 'unstarted'
|
1266
|
+
expect(format['estimate']).to eq 1
|
1267
|
+
expect(format['name']).to eq 'dupis'
|
1268
|
+
expect(format['story_type']).to eq 'chore'
|
1269
|
+
end
|
561
1270
|
end
|
562
1271
|
end
|
563
1272
|
end
|
@@ -574,6 +1283,81 @@ RSpec.describe Task, type: :model do
|
|
574
1283
|
end
|
575
1284
|
end
|
576
1285
|
|
1286
|
+
describe '#finish_on_pivotal' do
|
1287
|
+
let(:task) { build :task, pivotal_id: pivotal_id }
|
1288
|
+
let(:pivotal_id) { '12345678' }
|
1289
|
+
let!(:account) { create :account, type: '--pivotal' }
|
1290
|
+
let(:faraday) { double('Faraday', post: response) }
|
1291
|
+
let(:response) { double('Faraday', body: PIVOTAL_ISSUE_CREATION_RESPONSE, status: status, reason_phrase: reason_phrase) }
|
1292
|
+
let(:status) { 200 }
|
1293
|
+
let(:reason_phrase) { 'OK' }
|
1294
|
+
|
1295
|
+
before { allow(Faraday).to receive(:new).and_return faraday }
|
1296
|
+
|
1297
|
+
context 'pt id present, pt account present, no internet connection' do
|
1298
|
+
before do
|
1299
|
+
allow(faraday).to receive(:post).and_raise Faraday::ConnectionFailed, [404]
|
1300
|
+
allow(faraday).to receive(:get).and_raise Faraday::ConnectionFailed, [404]
|
1301
|
+
allow(faraday).to receive(:put).and_raise Faraday::ConnectionFailed, [404]
|
1302
|
+
end
|
1303
|
+
|
1304
|
+
it 'should give the no connection error', :unstub_pivotal_starting do
|
1305
|
+
expect(STDOUT).to receive(:puts).with /Connection failed. Performing the task without requests to Pivotal./
|
1306
|
+
task.send(:finish_on_pivotal)
|
1307
|
+
end
|
1308
|
+
end
|
1309
|
+
|
1310
|
+
describe 'error codes', :unstub_pivotal_starting do
|
1311
|
+
before do
|
1312
|
+
allow(faraday).to receive(:post).and_return response
|
1313
|
+
allow(faraday).to receive(:get).and_return response
|
1314
|
+
allow(faraday).to receive(:put).and_return response
|
1315
|
+
end
|
1316
|
+
|
1317
|
+
context 'pt id present, pt account present, "unauthorized" server error' do
|
1318
|
+
let(:status) { 401 }
|
1319
|
+
let(:reason_phrase) { 'unauth' }
|
1320
|
+
|
1321
|
+
it 'should give the no auth error' do
|
1322
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1323
|
+
task.send(:finish_on_pivotal)
|
1324
|
+
end
|
1325
|
+
end
|
1326
|
+
|
1327
|
+
context 'pt id present, pt account present, "unauthorized" server error' do
|
1328
|
+
let(:status) { 403 }
|
1329
|
+
let(:reason_phrase) { 'unauth' }
|
1330
|
+
|
1331
|
+
it 'should give the no auth error' do
|
1332
|
+
expect(STDOUT).to receive(:puts).with /No access/
|
1333
|
+
task.send(:finish_on_pivotal)
|
1334
|
+
end
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
context 'pt id present, pt account present, "not found" server error' do
|
1338
|
+
let(:status) { 404 }
|
1339
|
+
let(:reason_phrase) { 'not found' }
|
1340
|
+
|
1341
|
+
it 'should give the not found error' do
|
1342
|
+
expect(STDOUT).to receive(:puts).with /not found/
|
1343
|
+
task.send(:finish_on_pivotal)
|
1344
|
+
end
|
1345
|
+
end
|
1346
|
+
|
1347
|
+
context 'pt id present, pt account present, "unknown" server error' do
|
1348
|
+
let(:status) { 500 }
|
1349
|
+
let(:reason_phrase) { 'error' }
|
1350
|
+
|
1351
|
+
it 'should give the error' do
|
1352
|
+
expect(STDOUT).to receive(:puts).with /Could not/
|
1353
|
+
expect(STDOUT).to receive(:puts).with /500/
|
1354
|
+
expect(STDOUT).to receive(:puts).with /error/
|
1355
|
+
task.send(:finish_on_pivotal)
|
1356
|
+
end
|
1357
|
+
end
|
1358
|
+
end
|
1359
|
+
end
|
1360
|
+
|
577
1361
|
describe '#start_issue_on_pivotal_data' do
|
578
1362
|
let!(:task) { create :task }
|
579
1363
|
|