caperoma 4.0.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Capefile +6 -6
  3. data/Capefile.template +4 -1
  4. data/Gemfile +1 -5
  5. data/Gemfile.lock +3 -45
  6. data/HELP +84 -13
  7. data/README.md +165 -29
  8. data/Rakefile +25 -22
  9. data/VERSION +1 -1
  10. data/bin/caperoma +6 -9
  11. data/caperoma.gemspec +15 -13
  12. data/config/crontab +0 -2
  13. data/config/schedule.rb +17 -19
  14. data/config/unschedule.rb +3 -0
  15. data/images/circle.png +0 -0
  16. data/images/report.png +0 -0
  17. data/lib/caperoma.rb +308 -98
  18. data/lib/caperoma/models/account.rb +1 -1
  19. data/lib/caperoma/models/project.rb +1 -2
  20. data/lib/caperoma/models/report.rb +15 -15
  21. data/lib/caperoma/models/task.rb +203 -46
  22. data/lib/caperoma/models/tasks/chore.rb +2 -0
  23. data/lib/caperoma/models/tasks/feature.rb +1 -0
  24. data/lib/caperoma/models/tasks/fix.rb +2 -0
  25. data/lib/caperoma/models/tasks/meeting.rb +2 -0
  26. data/lib/caperoma/models/tasks/modules/git.rb +94 -15
  27. data/lib/caperoma/models/tasks/task_with_commit.rb +8 -5
  28. data/lib/caperoma/models/tasks/task_with_separate_branch.rb +6 -4
  29. data/spec/caperoma_spec.rb +558 -2
  30. data/spec/factories/accounts.rb +1 -1
  31. data/spec/factories/projects.rb +1 -1
  32. data/spec/factories/report_recipients.rb +1 -1
  33. data/spec/factories/reports.rb +1 -1
  34. data/spec/factories/tasks.rb +1 -2
  35. data/spec/features/command_unknown_spec.rb +0 -1
  36. data/spec/features/feature_spec.rb +64 -44
  37. data/spec/features/init_spec.rb +20 -0
  38. data/spec/features/status_spec.rb +12 -11
  39. data/spec/models/project_spec.rb +0 -1
  40. data/spec/models/task_spec.rb +811 -27
  41. data/spec/models/task_with_commit_spec.rb +0 -4
  42. data/spec/models/task_with_separate_branch_spec.rb +4 -4
  43. data/spec/models/three_day_report_spec.rb +2 -3
  44. data/spec/spec_helper.rb +2 -0
  45. data/spec/support/capefile_generator.rb +35 -27
  46. data/spec/support/stubs.rb +7 -74
  47. metadata +47 -24
  48. data/lib/caperoma/models/branch.rb +0 -6
  49. data/lib/caperoma/services/airbrake_email_processor.rb +0 -47
  50. data/lib/caperoma/services/pivotal_fetcher.rb +0 -108
  51. data/spec/factories/branches.rb +0 -9
  52. data/spec/models/branch_spec.rb +0 -8
@@ -3,7 +3,7 @@
3
3
  class Account < ApplicationRecord
4
4
  self.inheritance_column = nil
5
5
 
6
- validates :email, presence: true
6
+ validates :email, presence: true
7
7
  validates :password, presence: true
8
8
  validates :type, presence: true, inclusion: { in: %w[--jira --pivotal --gmail --git --caperoma] }
9
9
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Project < ApplicationRecord
4
- has_many :branches
5
4
  has_many :chores
6
5
  has_many :bugs
7
6
  has_many :features
@@ -9,6 +8,6 @@ class Project < ApplicationRecord
9
8
  has_many :fixes
10
9
 
11
10
  def folder_path
12
- %(#{self[:folder_path]})
11
+ (self[:folder_path]).to_s
13
12
  end
14
13
  end
@@ -11,18 +11,18 @@ class Report < ApplicationRecord
11
11
  after_create :update_content
12
12
 
13
13
  def self.schedule
14
- # may screw up existing cron tasks
15
14
  puts 'Turning on auto reports'
16
15
  root = File.dirname __dir__
17
- crontab_file = File.join root, 'config', 'crontab'
18
- `crontab #{crontab_file}`
19
- # > whenever --update-crontab caperoma
16
+ crontab_config_file = File.join root, '..', '..', 'config', 'schedule.rb'
17
+ `whenever --update-crontab caperoma --load-file "#{crontab_config_file}"`
20
18
  puts 'Auto reports turned on'
21
19
  end
22
20
 
23
21
  def self.unschedule
24
22
  puts 'Turning off auto reports'
25
- puts 'pending'
23
+ root = File.dirname __dir__
24
+ crontab_config_file = File.join root, '..', '..', 'config', 'unschedule.rb'
25
+ `whenever --update-crontab caperoma --load-file "#{crontab_config_file}"`
26
26
  puts 'Auto reports turned off'
27
27
  end
28
28
 
@@ -124,16 +124,16 @@ class Report < ApplicationRecord
124
124
  [
125
125
  "\n",
126
126
  "<h2>Done during #{timeframe}:</h2>",
127
- "<br />",
128
- "<table style=\"width: 100%;text-align: left;\">",
129
- "<thead>",
130
- "<tr><th>Jira</th><th>Pivotal</th><th>Title</th><th>Time spent</th></tr>",
131
- "</thead>",
132
- "<tbody>",
127
+ '<br />',
128
+ '<table style="width: 100%;text-align: left;">',
129
+ '<thead>',
130
+ '<tr><th>Jira</th><th>Pivotal</th><th>Title</th><th>Time spent</th></tr>',
131
+ '</thead>',
132
+ '<tbody>',
133
133
  reported_tasks_rows,
134
- "</tbody>",
135
- "</table>",
136
- "<br />",
134
+ '</tbody>',
135
+ '</table>',
136
+ '<br />',
137
137
  "<strong>Total time spent during #{timeframe}:</strong> #{total_time_spent}."
138
138
  ].flatten.join("\n")
139
139
  end
@@ -143,7 +143,7 @@ class Report < ApplicationRecord
143
143
  end
144
144
 
145
145
  def table_row(task)
146
- '<tr>' + task_row_data(task).collect{|task| '<td>' + task + '</td>' }.join("\n") + '</tr>'
146
+ '<tr>' + task_row_data(task).collect { |task| '<td>' + task + '</td>' }.join("\n") + '</tr>'
147
147
  end
148
148
 
149
149
  def task_row_data(task)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Task < ActiveRecord::Base
3
4
  include Git
4
5
 
@@ -10,6 +11,8 @@ class Task < ActiveRecord::Base
10
11
  validates :title, presence: true
11
12
  validates :pivotal_id, length: { minimum: 6 }, allow_blank: true, numericality: { only_integer: true }
12
13
 
14
+ validates :additional_time, allow_blank: true, numericality: { only_integer: true }
15
+
13
16
  before_create :generate_uuid
14
17
  before_create :set_start_time
15
18
 
@@ -47,30 +50,29 @@ class Task < ActiveRecord::Base
47
50
  end
48
51
 
49
52
  def self.status
50
- if unfinished.length == 0
51
- puts "You are not working on anything now."
52
- else
53
- unfinished.each do |task|
54
- puts "You are working on: "
53
+ if unfinished.empty?
54
+ puts 'You are not working on anything now.'
55
+ else
56
+ unfinished.each do |task|
57
+ puts 'You are working on: '
55
58
  puts "Title: #{task.title}"
56
59
  puts "Type: #{task.type}"
57
- puts "Jira ID: #{task.jira_key}." if task.jira_key.present?
60
+ puts "Jira ID: #{task.jira_key} (#{task.jira_live_url})." if task.jira_key.present?
58
61
  puts "Pivotal ID: #{task.pivotal_id} (#{task.pivotal_url})" if task.pivotal_id.present?
59
62
  puts "Time spent at the moment: #{task.time_spent_so_far}"
63
+ puts "Branch with the task: #{task.branch}" if task.branch.present?
60
64
  puts "Pull request will be sent to this branch: #{task.parent_branch}" if task.parent_branch.present?
61
65
  puts "Project location: #{task.project.folder_path}"
62
66
  end
63
67
  end
64
68
  end
65
69
 
66
- attr_writer :additional_time
67
-
68
70
  def finish(comment)
69
71
  # full pull request
70
72
  update_attribute(:finished_at, Time.now)
71
73
  close_issue_on_jira
72
- log_work_to_jira(comment)
73
- finish_on_pivotal if pivotal_id.present?
74
+ log_work_to_jira(comment) if should_log_work?
75
+ finish_on_pivotal if finish_on_pivotal?
74
76
  puts time_spent
75
77
  end
76
78
 
@@ -78,8 +80,8 @@ class Task < ActiveRecord::Base
78
80
  # finish with commit & push but without pull request
79
81
  update_attribute(:finished_at, Time.now)
80
82
  close_issue_on_jira
81
- log_work_to_jira(comment)
82
- finish_on_pivotal if pivotal_id.present?
83
+ log_work_to_jira(comment) if should_log_work?
84
+ finish_on_pivotal if finish_on_pivotal?
83
85
  puts time_spent
84
86
  end
85
87
 
@@ -87,12 +89,12 @@ class Task < ActiveRecord::Base
87
89
  # finish without commit or push
88
90
  update_attribute(:finished_at, Time.now)
89
91
  close_issue_on_jira
90
- log_work_to_jira(comment)
91
- finish_on_pivotal if pivotal_id.present?
92
+ log_work_to_jira(comment) if should_log_work?
93
+ finish_on_pivotal if finish_on_pivotal?
92
94
  puts time_spent
93
95
  end
94
96
 
95
- def abort_without_time(comment)
97
+ def abort_without_time(_comment)
96
98
  # finish without commit or push
97
99
  update_attribute(:finished_at, Time.now)
98
100
  close_issue_on_jira
@@ -100,6 +102,10 @@ class Task < ActiveRecord::Base
100
102
  puts time_spent
101
103
  end
102
104
 
105
+ def should_log_work?
106
+ time_spent_so_far != '0h 0m' && Account.jira.present?
107
+ end
108
+
103
109
  def time_spent_so_far
104
110
  result = TimeDifference.between(started_at, Time.now).in_minutes
105
111
 
@@ -137,19 +143,23 @@ class Task < ActiveRecord::Base
137
143
  end
138
144
 
139
145
  def create_on_jira?
140
- Account.jira.present? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
146
+ Account.jira.present? && not_test?
141
147
  end
142
148
 
143
149
  def start_on_jira?
144
- jira_key.present? && Account.jira.present? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
150
+ jira_key.present? && Account.jira.present? && not_test?
145
151
  end
146
152
 
147
153
  def create_on_pivotal?
148
- pivotal_id.blank? && this_is_a_type_a_user_wants_to_create? && Account.pivotal.present? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
154
+ pivotal_id.blank? && this_is_a_type_a_user_wants_to_create? && Account.pivotal.present? && not_test?
149
155
  end
150
156
 
151
157
  def start_on_pivotal?
152
- pivotal_id.present? && Account.pivotal.present? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
158
+ pivotal_id.present? && Account.pivotal.present? && not_test?
159
+ end
160
+
161
+ def finish_on_pivotal?
162
+ pivotal_id.present? && Account.pivotal.present? && not_test?
153
163
  end
154
164
 
155
165
  def this_is_a_type_a_user_wants_to_create?
@@ -162,7 +172,7 @@ class Task < ActiveRecord::Base
162
172
 
163
173
  def set_start_time
164
174
  time = Time.now
165
- time -= @additional_time.to_i.minutes if @additional_time.present?
175
+ time -= additional_time.to_i.minutes if additional_time.present?
166
176
  self.started_at = time
167
177
  end
168
178
 
@@ -171,7 +181,7 @@ class Task < ActiveRecord::Base
171
181
  end
172
182
 
173
183
  def output_jira_key?
174
- jira_key.present? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
184
+ jira_key.present? && not_test?
175
185
  end
176
186
 
177
187
  def start_issue_on_pivotal_data
@@ -182,6 +192,8 @@ class Task < ActiveRecord::Base
182
192
 
183
193
  def start_issue_on_pivotal
184
194
  if not_test?
195
+ puts 'Starting the task in Pivotal'
196
+
185
197
  conn = Faraday.new(url: 'https://www.pivotaltracker.com/') do |c|
186
198
  c.adapter Faraday.default_adapter
187
199
  end
@@ -193,7 +205,22 @@ class Task < ActiveRecord::Base
193
205
  request.headers['Content-Type'] = 'application/json'
194
206
  request.headers['X-TrackerToken'] = Account.pivotal.password
195
207
  end
208
+
209
+ case response.status
210
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
211
+ puts 'Started the task in Pivotal'
212
+ when 401, 403
213
+ puts "No access to the task ##{pivotal_id} in Pivotal. Maybe login or api_key are incorrect."
214
+ when 404
215
+ puts "A task with ID ##{pivotal_id} is not found in Pivotal."
216
+ else
217
+ puts 'Could not start the task in Pivotal.'
218
+ puts "Error status: #{response.status}"
219
+ puts "Message from server: #{response.reason_phrase}"
220
+ end
196
221
  end
222
+ rescue Faraday::ConnectionFailed
223
+ puts 'Connection failed. Performing the task without requests to Pivotal.'
197
224
  end
198
225
 
199
226
  def finish_on_pivotal_data
@@ -204,6 +231,8 @@ class Task < ActiveRecord::Base
204
231
 
205
232
  def finish_on_pivotal
206
233
  if not_test?
234
+ puts 'Finishing the task in Pivotal'
235
+
207
236
  conn = Faraday.new(url: 'https://www.pivotaltracker.com/') do |c|
208
237
  c.adapter Faraday.default_adapter
209
238
  end
@@ -215,7 +244,22 @@ class Task < ActiveRecord::Base
215
244
  request.headers['Content-Type'] = 'application/json'
216
245
  request.headers['X-TrackerToken'] = Account.pivotal.password
217
246
  end
247
+
248
+ case response.status
249
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
250
+ puts 'Finished the task in Pivotal'
251
+ when 401, 403
252
+ puts "No access to the task ##{pivotal_id} in Pivotal. Maybe login or api_key are incorrect."
253
+ when 404
254
+ puts "A task with ID ##{pivotal_id} is not found in Pivotal."
255
+ else
256
+ puts 'Could not finish the task in Pivotal.'
257
+ puts "Error status: #{response.status}"
258
+ puts "Message from server: #{response.reason_phrase}"
259
+ end
218
260
  end
261
+ rescue Faraday::ConnectionFailed
262
+ puts 'Connection failed. Performing the task without requests to Pivotal.'
219
263
  end
220
264
 
221
265
  def start_issue_on_jira_data
@@ -226,18 +270,35 @@ class Task < ActiveRecord::Base
226
270
 
227
271
  def start_issue_on_jira
228
272
  if not_test?
273
+ puts 'Starting the issue in Jira'
274
+
229
275
  conn = Faraday.new(url: project.jira_url) do |c|
230
276
  c.basic_auth(Account.jira.email, Account.jira.password)
231
277
  c.adapter Faraday.default_adapter
232
278
  end
233
279
 
234
- conn.post do |request|
280
+ response = conn.post do |request|
235
281
  request.url "rest/api/3/issue/#{jira_key}/transitions"
236
282
  request.body = start_issue_on_jira_data
237
283
  request.headers['User-Agent'] = 'Caperoma'
238
284
  request.headers['Content-Type'] = 'application/json'
239
285
  end
286
+
287
+ case response.status
288
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
289
+ puts 'Started the issue in Jira'
290
+ when 401, 403
291
+ puts "No access to the task #{jira_key} in Jira. Maybe login or api_key are incorrect."
292
+ when 404
293
+ puts "A task with ID #{jira_key} is not found in Jira."
294
+ else
295
+ puts 'Could not start the issue in Jira.'
296
+ puts "Error status: #{response.status}"
297
+ puts "Message from server: #{response.reason_phrase}"
298
+ end
240
299
  end
300
+ rescue Faraday::ConnectionFailed
301
+ puts 'Connection failed. Performing the task without requests to Jira.'
241
302
  end
242
303
 
243
304
  def close_issue_on_jira_data
@@ -248,6 +309,8 @@ class Task < ActiveRecord::Base
248
309
 
249
310
  def close_issue_on_jira
250
311
  if not_test?
312
+ puts 'Closing the issue in Jira'
313
+
251
314
  conn = Faraday.new(url: project.jira_url) do |c|
252
315
  c.basic_auth(Account.jira.email, Account.jira.password)
253
316
  c.adapter Faraday.default_adapter
@@ -259,7 +322,22 @@ class Task < ActiveRecord::Base
259
322
  request.headers['User-Agent'] = 'Caperoma'
260
323
  request.headers['Content-Type'] = 'application/json'
261
324
  end
325
+
326
+ case response.status
327
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
328
+ puts 'Closed the issue in Jira'
329
+ when 401, 403
330
+ puts "No access to the task #{jira_key} in Jira. Maybe login or api_key are incorrect."
331
+ when 404
332
+ puts "A task with ID #{jira_key} is not found in Jira."
333
+ else
334
+ puts 'Could not close the issue in Jira.'
335
+ puts "Error status: #{response.status}"
336
+ puts "Message from server: #{response.reason_phrase}"
337
+ end
262
338
  end
339
+ rescue Faraday::ConnectionFailed
340
+ puts 'Connection failed. Performing the task without requests to Jira.'
263
341
  end
264
342
 
265
343
  def log_work_to_jira_data(comment = 'Done')
@@ -272,18 +350,35 @@ class Task < ActiveRecord::Base
272
350
 
273
351
  def log_work_to_jira(comment = 'Done')
274
352
  if not_test?
353
+ puts 'Logging work to Jira'
354
+
275
355
  conn = Faraday.new(url: project.jira_url) do |c|
276
356
  c.basic_auth(Account.jira.email, Account.jira.password)
277
357
  c.adapter Faraday.default_adapter
278
358
  end
279
359
 
280
- result = conn.post do |request|
360
+ response = conn.post do |request|
281
361
  request.url "rest/api/3/issue/#{jira_key}/worklog"
282
362
  request.body = log_work_to_jira_data(comment)
283
363
  request.headers['User-Agent'] = 'Caperoma'
284
364
  request.headers['Content-Type'] = 'application/json'
285
365
  end
366
+
367
+ case response.status
368
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
369
+ puts 'Work logged to Jira'
370
+ when 401, 403
371
+ puts "No access to the task #{jira_key} in Jira. Maybe login or api_key are incorrect."
372
+ when 404
373
+ puts "A task with ID #{jira_key} is not found in Jira."
374
+ else
375
+ puts 'Could not log work to Jira.'
376
+ puts "Error status: #{response.status}"
377
+ puts "Message from server: #{response.reason_phrase}"
378
+ end
286
379
  end
380
+ rescue Faraday::ConnectionFailed
381
+ puts 'Connection failed. Performing the task without requests to Jira.'
287
382
  end
288
383
 
289
384
  def current_time
@@ -297,14 +392,17 @@ class Task < ActiveRecord::Base
297
392
  def create_issue_on_pivotal_data
298
393
  Jbuilder.encode do |j|
299
394
  j.current_state 'unstarted'
300
- j.estimate 1
395
+ j.estimate pivotal_estimate == 0 ? 1 : pivotal_estimate
301
396
  j.name title.to_s
397
+ j.description description
302
398
  j.story_type story_type
303
399
  end
304
400
  end
305
401
 
306
402
  def create_issue_on_pivotal
307
403
  if not_test?
404
+ puts 'Creating a task in Pivotal'
405
+
308
406
  conn = Faraday.new(url: 'https://www.pivotaltracker.com/') do |c|
309
407
  c.adapter Faraday.default_adapter
310
408
  end
@@ -317,29 +415,69 @@ class Task < ActiveRecord::Base
317
415
  request.headers['X-TrackerToken'] = Account.pivotal.password
318
416
  end
319
417
 
320
- result = JSON.parse response.body
321
-
322
- update_attributes(
323
- pivotal_id: result['id']
324
- )
418
+ case response.status
419
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
420
+ puts 'Created the task in Pivotal'
421
+ result = JSON.parse response.body
422
+
423
+ update_attributes(
424
+ pivotal_id: result['id']
425
+ )
426
+ when 401, 403
427
+ puts "No access to the server. Maybe login, api_key or Pivotal Project ID ##{project.pivotal_tracker_project_id} is incorrect."
428
+ when 404
429
+ puts "Resource not found. Maybe Pivotal Project ID ##{project.pivotal_tracker_project_id} is incorrect."
430
+ else
431
+ puts 'Could not create the task in Pivotal.'
432
+ puts "Error status: #{response.status}"
433
+ puts "Message from server: #{response.reason_phrase}"
434
+ end
325
435
  end
436
+ rescue Faraday::ConnectionFailed
437
+ puts 'Connection failed. Performing the task without requests to Pivotal.'
326
438
  end
327
439
 
328
440
  def create_issue_on_jira_data
329
- Jbuilder.encode do |j|
330
- j.fields do
331
- j.project { j.id project.jira_project_id.to_s }
332
- j.issuetype { j.id issue_type }
333
- j.summary title.to_s
334
- j.assignee do
335
- j.name Account.jira.username
336
- end
337
- end
338
- end
441
+ hash = {
442
+ fields: {
443
+ summary: title.to_s,
444
+ issuetype: {
445
+ id: issue_type
446
+ },
447
+ project: {
448
+ id: project.jira_project_id.to_s
449
+ },
450
+ assignee: {
451
+ name: Account.jira.username
452
+ }
453
+ }
454
+ }
455
+
456
+ description_hash = {
457
+ type: 'doc',
458
+ version: 1,
459
+ content: [
460
+ {
461
+ type: 'paragraph',
462
+ content: [
463
+ {
464
+ text: description,
465
+ type: 'text'
466
+ }
467
+ ]
468
+ }
469
+ ]
470
+ }
471
+
472
+ hash[:fields][:description] = description_hash if description.present?
473
+
474
+ hash.to_json
339
475
  end
340
476
 
341
477
  def create_issue_on_jira
342
478
  if not_test?
479
+ puts 'Creating an issue in Jira'
480
+
343
481
  conn = Faraday.new(url: project.jira_url) do |c|
344
482
  c.basic_auth(Account.jira.email, Account.jira.password)
345
483
  c.adapter Faraday.default_adapter
@@ -352,17 +490,36 @@ class Task < ActiveRecord::Base
352
490
  request.headers['Content-Type'] = 'application/json'
353
491
  end
354
492
 
355
- result = JSON.parse response.body
356
-
357
- update_attributes(
358
- jira_id: result['id'],
359
- jira_key: result['key'],
360
- jira_url: result['self']
361
- )
493
+ case response.status
494
+ when 200, 201, 202, 204, 301, 302, 303, 304, 307
495
+ puts 'Created the issue in Jira'
496
+
497
+ result = JSON.parse response.body
498
+
499
+ update_attributes(
500
+ jira_id: result['id'],
501
+ jira_key: result['key'],
502
+ jira_url: result['self']
503
+ )
504
+ when 401, 403
505
+ puts "Forbidden access to the resource in Jira. Maybe login, api_key or Jira project id #{project.jira_project_id} are incorrect."
506
+ when 404
507
+ puts "Not found the resource in Jira. Maybe the Jira Project ID #{project.jira_project_id} is incorrect."
508
+ else
509
+ puts 'Could not create the issue in Jira.'
510
+ puts "Error status: #{response.status}"
511
+ puts "Message from server: #{response.reason_phrase}"
512
+ end
362
513
  end
514
+ rescue Faraday::ConnectionFailed
515
+ puts 'Connection failed. Performing the task without requests to Jira.'
363
516
  end
364
517
 
365
518
  def not_test?
366
519
  ENV['CAPEROMA_INTEGRATION_TEST'].blank?
367
520
  end
521
+
522
+ def enable_git?
523
+ ENV['CAPEROMA_TEST'].blank? && ENV['CAPEROMA_INTEGRATION_TEST'].blank?
524
+ end
368
525
  end