caperoma 0.1.0 → 4.0.1
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 +5 -5
- data/.ruby-version +1 -0
- data/Capefile +48 -0
- data/Capefile.template +48 -0
- data/Capefile.test +20 -0
- data/Gemfile +25 -10
- data/Gemfile.lock +196 -77
- data/HELP +321 -0
- data/README.md +528 -0
- data/Rakefile +73 -18
- data/VERSION +1 -1
- data/bin/caperoma +47 -11
- data/caperoma.gemspec +144 -45
- data/config/crontab +10 -0
- data/config/schedule.rb +21 -0
- data/lib/caperoma.rb +409 -9
- data/lib/caperoma/models/account.rb +47 -0
- data/lib/caperoma/models/application_record.rb +5 -0
- data/lib/caperoma/models/branch.rb +6 -0
- data/lib/caperoma/models/project.rb +14 -0
- data/lib/caperoma/models/property.rb +5 -0
- data/lib/caperoma/models/report.rb +177 -0
- data/lib/caperoma/models/report_recipient.rb +6 -0
- data/lib/caperoma/models/reports/daily_report.rb +23 -0
- data/lib/caperoma/models/reports/retrospective_report.rb +19 -0
- data/lib/caperoma/models/reports/three_day_report.rb +19 -0
- data/lib/caperoma/models/task.rb +368 -0
- data/lib/caperoma/models/tasks/bug.rb +36 -0
- data/lib/caperoma/models/tasks/chore.rb +40 -0
- data/lib/caperoma/models/tasks/feature.rb +27 -0
- data/lib/caperoma/models/tasks/fix.rb +56 -0
- data/lib/caperoma/models/tasks/meeting.rb +40 -0
- data/lib/caperoma/models/tasks/modules/git.rb +65 -0
- data/lib/caperoma/models/tasks/task_with_commit.rb +40 -0
- data/lib/caperoma/models/tasks/task_with_separate_branch.rb +42 -0
- data/lib/caperoma/services/airbrake_email_processor.rb +47 -0
- data/lib/caperoma/services/pivotal_fetcher.rb +108 -0
- data/lib/caperoma/version.rb +9 -0
- data/spec/caperoma_spec.rb +3 -21
- data/spec/factories/accounts.rb +10 -0
- data/spec/factories/branches.rb +9 -0
- data/spec/factories/projects.rb +8 -0
- data/spec/factories/report_recipients.rb +7 -0
- data/spec/factories/reports.rb +16 -0
- data/spec/factories/tasks.rb +37 -0
- data/spec/features/bug_spec.rb +60 -0
- data/spec/features/chore_spec.rb +60 -0
- data/spec/features/command_unknown_spec.rb +14 -0
- data/spec/features/config_spec.rb +161 -0
- data/spec/features/feature_spec.rb +60 -0
- data/spec/features/finish_spec.rb +18 -0
- data/spec/features/fix_spec.rb +60 -0
- data/spec/features/meeting_spec.rb +22 -0
- data/spec/features/projects_spec.rb +17 -0
- data/spec/features/report_recipientss_spec.rb +117 -0
- data/spec/features/reports_spec.rb +65 -0
- data/spec/features/status_spec.rb +33 -0
- data/spec/features/version_spec.rb +11 -0
- data/spec/models/account_spec.rb +51 -0
- data/spec/models/branch_spec.rb +8 -0
- data/spec/models/bug_spec.rb +33 -0
- data/spec/models/chore_spec.rb +33 -0
- data/spec/models/daily_report_spec.rb +38 -0
- data/spec/models/feature_spec.rb +33 -0
- data/spec/models/fix_spec.rb +55 -0
- data/spec/models/meeting_spec.rb +33 -0
- data/spec/models/project_spec.rb +11 -0
- data/spec/models/report_recipient_spec.rb +22 -0
- data/spec/models/report_spec.rb +16 -0
- data/spec/models/retrospective_report_spec.rb +38 -0
- data/spec/models/task_spec.rb +613 -0
- data/spec/models/task_with_commit_spec.rb +105 -0
- data/spec/models/task_with_separate_branch_spec.rb +97 -0
- data/spec/models/three_day_report_spec.rb +49 -0
- data/spec/spec_helper.rb +26 -16
- data/spec/support/capefile_generator.rb +36 -0
- data/spec/support/database_cleaner.rb +21 -0
- data/spec/support/stubs.rb +178 -9
- metadata +283 -42
- data/.document +0 -5
- data/README.rdoc +0 -26
- data/lib/caperoma/credentials.rb +0 -13
- data/lib/caperoma/jira_client.rb +0 -57
- data/spec/caperoma/credentials_spec.rb +0 -25
- data/spec/caperoma/jira_spec.rb +0 -35
data/spec/caperoma_spec.rb
CHANGED
@@ -1,25 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
4
|
|
3
5
|
describe 'Caperoma' do
|
4
|
-
|
5
|
-
it 'triggers chore creation' do
|
6
|
-
expect_any_instance_of(JiraClient).to receive(:create_chore).with([1, 2])
|
7
|
-
Caperoma.chore([1, 2])
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#config' do
|
12
|
-
it 'saves jira email/password' do
|
13
|
-
expect(Credentials).to receive(:write).with('args')
|
14
|
-
|
15
|
-
Caperoma.config('args')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#test' do
|
20
|
-
it 'outputs msg' do
|
21
|
-
expect(STDOUT).to receive(:puts).with('works')
|
22
|
-
Caperoma.test
|
23
|
-
end
|
24
|
-
end
|
6
|
+
pending 'all this is tested using feature tests for now'
|
25
7
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :report do
|
5
|
+
content 'did this and that'
|
6
|
+
end
|
7
|
+
|
8
|
+
factory :daily_report, parent: :report, class: 'DailyReport' do
|
9
|
+
end
|
10
|
+
|
11
|
+
factory :three_day_report, parent: :report, class: 'ThreeDayReport' do
|
12
|
+
end
|
13
|
+
|
14
|
+
factory :retrospective_report, parent: :report, class: 'RetrospectiveReport' do
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :task do
|
5
|
+
project
|
6
|
+
|
7
|
+
sequence(:title) { |n| "Refactoring some thunk of code ##{n}" }
|
8
|
+
sequence(:description) { |n| "This was a very nice task, solved it #{n}" }
|
9
|
+
sequence(:jira_key) { |n| "RUC-#{n}" }
|
10
|
+
sequence(:url) { |n| "http://www.my_jira_site.com/tasks/RUC-#{n}" }
|
11
|
+
|
12
|
+
started_at Time.now
|
13
|
+
finished_at Time.now
|
14
|
+
end
|
15
|
+
|
16
|
+
factory :chore, parent: :task, class: 'Chore' do
|
17
|
+
end
|
18
|
+
|
19
|
+
factory :meeting, parent: :task, class: 'Meeting' do
|
20
|
+
end
|
21
|
+
|
22
|
+
factory :task_with_commit, parent: :task, class: 'TaskWithCommit' do
|
23
|
+
branch
|
24
|
+
end
|
25
|
+
|
26
|
+
factory :fix, parent: :task_with_commit, class: 'Fix' do
|
27
|
+
end
|
28
|
+
|
29
|
+
factory :task_with_separate_branch, parent: :task_with_commit, class: 'TaskWithSeparateBranch' do
|
30
|
+
end
|
31
|
+
|
32
|
+
factory :feature, parent: :task_with_separate_branch, class: 'Feature' do
|
33
|
+
end
|
34
|
+
|
35
|
+
factory :bug, parent: :task_with_separate_branch, class: 'Bug' do
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Bug' do
|
7
|
+
let!(:project) { create :project, jira_project_id: '123' }
|
8
|
+
|
9
|
+
before { create_capefile('123') }
|
10
|
+
|
11
|
+
context 'pivotal id blank' do
|
12
|
+
it 'submits a bug' do
|
13
|
+
expect do
|
14
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma bug -t "awesome bug" -d "some description" `
|
15
|
+
end.to change {
|
16
|
+
Bug.where(
|
17
|
+
title: 'awesome bug',
|
18
|
+
description: 'some description',
|
19
|
+
project_id: project.id
|
20
|
+
).count
|
21
|
+
}.by(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'pivotal id present' do
|
26
|
+
it 'submits a bug' do
|
27
|
+
expect do
|
28
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma bug --title "awesome bug" --description "some description" -ptid 12345678`
|
29
|
+
end.to change {
|
30
|
+
Bug.where(
|
31
|
+
title: 'awesome bug',
|
32
|
+
description: 'some description',
|
33
|
+
project_id: project.id,
|
34
|
+
pivotal_id: '12345678'
|
35
|
+
).count
|
36
|
+
}.by(1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'pivotal id and additional_time present', :unstub_time_now do
|
41
|
+
it 'submits a bug' do
|
42
|
+
expect do
|
43
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma bug -t "awesome bug" -d "some description" -ptid 12345678 -a 23`
|
44
|
+
end.to change {
|
45
|
+
Bug.where(
|
46
|
+
title: 'awesome bug',
|
47
|
+
description: 'some description',
|
48
|
+
project_id: project.id,
|
49
|
+
pivotal_id: '12345678'
|
50
|
+
).count
|
51
|
+
}.by(1)
|
52
|
+
|
53
|
+
time = Time.now
|
54
|
+
created = Bug.first.started_at
|
55
|
+
time_difference = TimeDifference.between(time, created).in_minutes.to_i
|
56
|
+
|
57
|
+
expect(time_difference).to eq 23
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Chore' do
|
7
|
+
let!(:project) { create :project, jira_project_id: '123' }
|
8
|
+
|
9
|
+
before { create_capefile('123') }
|
10
|
+
|
11
|
+
context 'pivotal id blank' do
|
12
|
+
it 'submits a chore' do
|
13
|
+
expect do
|
14
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma chore -t "awesome work" -d "some description"`
|
15
|
+
end.to change {
|
16
|
+
Chore.where(
|
17
|
+
title: 'awesome work',
|
18
|
+
description: 'some description',
|
19
|
+
project_id: project.id
|
20
|
+
).count
|
21
|
+
}.by(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'pivotal id present' do
|
26
|
+
it 'submits a chore' do
|
27
|
+
expect do
|
28
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma chore -t "awesome work" -d "some description" -ptid 12345678`
|
29
|
+
end.to change {
|
30
|
+
Chore.where(
|
31
|
+
title: 'awesome work',
|
32
|
+
description: 'some description',
|
33
|
+
project_id: project.id,
|
34
|
+
pivotal_id: '12345678'
|
35
|
+
).count
|
36
|
+
}.by(1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'pivotal id present, additional_time present', :unstub_time_now do
|
41
|
+
it 'submits a chore' do
|
42
|
+
expect do
|
43
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma chore --title "awesome work" --description "some description" --pivotal_task_id 12345678 --additional_time 23`
|
44
|
+
end.to change {
|
45
|
+
Chore.where(
|
46
|
+
title: 'awesome work',
|
47
|
+
description: 'some description',
|
48
|
+
project_id: project.id,
|
49
|
+
pivotal_id: '12345678'
|
50
|
+
).count
|
51
|
+
}.by(1)
|
52
|
+
|
53
|
+
time = Time.now
|
54
|
+
created = Chore.first.started_at
|
55
|
+
time_difference = TimeDifference.between(time, created).in_minutes
|
56
|
+
|
57
|
+
expect(time_difference).to eq 23
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Command unknown' do
|
7
|
+
let!(:project) { create :project }
|
8
|
+
let!(:current_branch) { create :branch, project: project }
|
9
|
+
|
10
|
+
it 'submits a chore' do
|
11
|
+
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma boogie woogie`
|
12
|
+
expect(result).to match /Available commands/
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Config' do
|
7
|
+
describe 'adding accounts' do
|
8
|
+
it 'saves Jira account using -a flag' do
|
9
|
+
expect do
|
10
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts -a --jira "email@example.com" "password123"`
|
11
|
+
end.to change {
|
12
|
+
Account.where(
|
13
|
+
email: 'email@example.com',
|
14
|
+
password: 'password123',
|
15
|
+
type: '--jira'
|
16
|
+
).count
|
17
|
+
}.by(1)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'saves Jira account using add flag' do
|
21
|
+
expect do
|
22
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts add --jira "email@example.com" "password123"`
|
23
|
+
end.to change {
|
24
|
+
Account.where(
|
25
|
+
email: 'email@example.com',
|
26
|
+
password: 'password123',
|
27
|
+
type: '--jira'
|
28
|
+
).count
|
29
|
+
}.by(1)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'saves Jira account using --add flag' do
|
33
|
+
expect do
|
34
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts --add --jira "email@example.com" "password123"`
|
35
|
+
end.to change {
|
36
|
+
Account.where(
|
37
|
+
email: 'email@example.com',
|
38
|
+
password: 'password123',
|
39
|
+
type: '--jira'
|
40
|
+
).count
|
41
|
+
}.by(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'saves Jira account using -c flag' do
|
45
|
+
expect do
|
46
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts -c --jira "email@example.com" "password123"`
|
47
|
+
end.to change {
|
48
|
+
Account.where(
|
49
|
+
email: 'email@example.com',
|
50
|
+
password: 'password123',
|
51
|
+
type: '--jira'
|
52
|
+
).count
|
53
|
+
}.by(1)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'saves Jira account using create flag' do
|
57
|
+
expect do
|
58
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts create --jira "email@example.com" "password123"`
|
59
|
+
end.to change {
|
60
|
+
Account.where(
|
61
|
+
email: 'email@example.com',
|
62
|
+
password: 'password123',
|
63
|
+
type: '--jira'
|
64
|
+
).count
|
65
|
+
}.by(1)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'saves Jira account using --create flag' do
|
69
|
+
expect do
|
70
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts --create --jira "email@example.com" "password123"`
|
71
|
+
end.to change {
|
72
|
+
Account.where(
|
73
|
+
email: 'email@example.com',
|
74
|
+
password: 'password123',
|
75
|
+
type: '--jira'
|
76
|
+
).count
|
77
|
+
}.by(1)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'removing accounts' do
|
82
|
+
let!(:account) { create :account, type: '--jira' }
|
83
|
+
|
84
|
+
it 'removes Jira account using -r flag' do
|
85
|
+
expect do
|
86
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts -r --jira`
|
87
|
+
end.to change {
|
88
|
+
Account.where(
|
89
|
+
type: '--jira'
|
90
|
+
).count
|
91
|
+
}.by(-1)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'saves Jira account using remove command' do
|
95
|
+
expect do
|
96
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts remove --jira`
|
97
|
+
end.to change {
|
98
|
+
Account.where(
|
99
|
+
type: '--jira'
|
100
|
+
).count
|
101
|
+
}.by(-1)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'saves Jira account using --remove command' do
|
105
|
+
expect do
|
106
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts --remove --jira`
|
107
|
+
end.to change {
|
108
|
+
Account.where(
|
109
|
+
type: '--jira'
|
110
|
+
).count
|
111
|
+
}.by(-1)
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'removes Jira account using -d flag' do
|
115
|
+
expect do
|
116
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts -d --jira`
|
117
|
+
end.to change {
|
118
|
+
Account.where(
|
119
|
+
type: '--jira'
|
120
|
+
).count
|
121
|
+
}.by(-1)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'saves Jira account using delete command' do
|
125
|
+
expect do
|
126
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts delete --jira`
|
127
|
+
end.to change {
|
128
|
+
Account.where(
|
129
|
+
type: '--jira'
|
130
|
+
).count
|
131
|
+
}.by(-1)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'saves Jira account using --delete command' do
|
135
|
+
expect do
|
136
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts --delete --jira`
|
137
|
+
end.to change {
|
138
|
+
Account.where(
|
139
|
+
type: '--jira'
|
140
|
+
).count
|
141
|
+
}.by(-1)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe 'listing' do
|
146
|
+
let!(:account1) { create :account, type: '--jira', email: 'one@gmail.com' }
|
147
|
+
let!(:account2) { create :account, type: '--git', email: 'two@gmail.com' }
|
148
|
+
let!(:account3) { create :account, type: '--pivotal', email: 'three@gmail.com' }
|
149
|
+
let!(:account4) { create :account, type: '--gmail', email: 'four@gmail.com' }
|
150
|
+
let!(:account5) { create :account, type: '--caperoma', email: 'five@gmail.com' }
|
151
|
+
|
152
|
+
it 'should list the accounts' do
|
153
|
+
result = `CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma accounts`
|
154
|
+
expect(result).to match /Jira: one@gmail.com/
|
155
|
+
expect(result).to match /Git: two@gmail.com/
|
156
|
+
expect(result).to match /Pivotal: three@gmail.com/
|
157
|
+
expect(result).to match /Gmail: four@gmail.com/
|
158
|
+
expect(result).to match /Caperoma: five@gmail.com/
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
ENV['spec_type'] = 'feature'
|
5
|
+
|
6
|
+
describe 'Feature' do
|
7
|
+
let!(:project) { create :project, jira_project_id: '123' }
|
8
|
+
|
9
|
+
before { create_capefile('123') }
|
10
|
+
|
11
|
+
context 'pivotal id blank' do
|
12
|
+
it 'submits a feature' do
|
13
|
+
expect do
|
14
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature -t "awesome feature" --description "some description" `
|
15
|
+
end.to change {
|
16
|
+
Feature.where(
|
17
|
+
title: 'awesome feature',
|
18
|
+
description: 'some description',
|
19
|
+
project_id: project.id
|
20
|
+
).count
|
21
|
+
}.by(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'pivotal id present' do
|
26
|
+
it 'submits a feature' do
|
27
|
+
expect do
|
28
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature --title "awesome feature" -d "some description" --pivotal_task_id 12345678`
|
29
|
+
end.to change {
|
30
|
+
Feature.where(
|
31
|
+
title: 'awesome feature',
|
32
|
+
description: 'some description',
|
33
|
+
project_id: project.id,
|
34
|
+
pivotal_id: '12345678'
|
35
|
+
).count
|
36
|
+
}.by(1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'pivotal id present, additional_time present', :unstub_time_now do
|
41
|
+
it 'submits a feature' do
|
42
|
+
expect do
|
43
|
+
`CAPEROMA_INTEGRATION_TEST=true ruby -I./lib bin/caperoma feature -t "awesome feature" --description "some description" -ptid 12345678 --additional_time 23`
|
44
|
+
end.to change {
|
45
|
+
Feature.where(
|
46
|
+
title: 'awesome feature',
|
47
|
+
description: 'some description',
|
48
|
+
project_id: project.id,
|
49
|
+
pivotal_id: '12345678'
|
50
|
+
).count
|
51
|
+
}.by(1)
|
52
|
+
|
53
|
+
time = Time.now
|
54
|
+
created = Feature.first.started_at
|
55
|
+
time_difference = TimeDifference.between(time, created).in_minutes.to_i
|
56
|
+
|
57
|
+
expect(time_difference).to eq 23
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|