knapsack_pro 3.8.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +377 -23
  3. data/.github/dependabot.yml +11 -0
  4. data/.github/pull_request_template.md +22 -0
  5. data/.gitignore +4 -0
  6. data/CHANGELOG.md +325 -1
  7. data/Gemfile +9 -0
  8. data/README.md +3 -10
  9. data/bin/test +15 -0
  10. data/knapsack_pro.gemspec +7 -6
  11. data/lib/knapsack_pro/adapters/base_adapter.rb +17 -2
  12. data/lib/knapsack_pro/adapters/cucumber_adapter.rb +3 -3
  13. data/lib/knapsack_pro/adapters/minitest_adapter.rb +2 -0
  14. data/lib/knapsack_pro/adapters/rspec_adapter.rb +88 -49
  15. data/lib/knapsack_pro/adapters/spinach_adapter.rb +2 -0
  16. data/lib/knapsack_pro/adapters/test_unit_adapter.rb +2 -0
  17. data/lib/knapsack_pro/allocator.rb +2 -0
  18. data/lib/knapsack_pro/allocator_builder.rb +2 -0
  19. data/lib/knapsack_pro/base_allocator_builder.rb +8 -25
  20. data/lib/knapsack_pro/build_distribution_fetcher.rb +2 -0
  21. data/lib/knapsack_pro/client/api/action.rb +2 -0
  22. data/lib/knapsack_pro/client/api/v1/base.rb +2 -0
  23. data/lib/knapsack_pro/client/api/v1/build_distributions.rb +5 -0
  24. data/lib/knapsack_pro/client/api/v1/build_subsets.rb +2 -0
  25. data/lib/knapsack_pro/client/api/v1/queues.rb +6 -1
  26. data/lib/knapsack_pro/client/connection.rb +5 -6
  27. data/lib/knapsack_pro/config/ci/app_veyor.rb +18 -0
  28. data/lib/knapsack_pro/config/ci/base.rb +27 -0
  29. data/lib/knapsack_pro/config/ci/buildkite.rb +18 -0
  30. data/lib/knapsack_pro/config/ci/circle.rb +18 -0
  31. data/lib/knapsack_pro/config/ci/cirrus_ci.rb +18 -0
  32. data/lib/knapsack_pro/config/ci/codefresh.rb +18 -0
  33. data/lib/knapsack_pro/config/ci/codeship.rb +18 -0
  34. data/lib/knapsack_pro/config/ci/github_actions.rb +26 -0
  35. data/lib/knapsack_pro/config/ci/gitlab_ci.rb +20 -1
  36. data/lib/knapsack_pro/config/ci/heroku.rb +18 -0
  37. data/lib/knapsack_pro/config/ci/semaphore.rb +16 -0
  38. data/lib/knapsack_pro/config/ci/semaphore2.rb +19 -0
  39. data/lib/knapsack_pro/config/ci/travis.rb +18 -0
  40. data/lib/knapsack_pro/config/env.rb +46 -22
  41. data/lib/knapsack_pro/config/env_generator.rb +2 -0
  42. data/lib/knapsack_pro/config/temp_files.rb +8 -4
  43. data/lib/knapsack_pro/crypto/branch_encryptor.rb +2 -0
  44. data/lib/knapsack_pro/crypto/decryptor.rb +2 -0
  45. data/lib/knapsack_pro/crypto/digestor.rb +2 -0
  46. data/lib/knapsack_pro/crypto/encryptor.rb +2 -0
  47. data/lib/knapsack_pro/extensions/rspec_extension.rb +137 -0
  48. data/lib/knapsack_pro/formatters/rspec_json_formatter.rb +2 -0
  49. data/lib/knapsack_pro/formatters/time_tracker.rb +152 -0
  50. data/lib/knapsack_pro/formatters/time_tracker_fetcher.rb +20 -0
  51. data/lib/knapsack_pro/hooks/queue.rb +2 -0
  52. data/lib/knapsack_pro/logger_wrapper.rb +2 -0
  53. data/lib/knapsack_pro/mask_string.rb +9 -0
  54. data/lib/knapsack_pro/presenter.rb +6 -3
  55. data/lib/knapsack_pro/pure/queue/rspec_pure.rb +92 -0
  56. data/lib/knapsack_pro/queue_allocator.rb +2 -0
  57. data/lib/knapsack_pro/queue_allocator_builder.rb +2 -0
  58. data/lib/knapsack_pro/railtie.rb +2 -0
  59. data/lib/knapsack_pro/report.rb +15 -9
  60. data/lib/knapsack_pro/repository_adapter_initiator.rb +2 -0
  61. data/lib/knapsack_pro/repository_adapters/base_adapter.rb +2 -0
  62. data/lib/knapsack_pro/repository_adapters/env_adapter.rb +2 -0
  63. data/lib/knapsack_pro/repository_adapters/git_adapter.rb +50 -0
  64. data/lib/knapsack_pro/runners/base_runner.rb +2 -0
  65. data/lib/knapsack_pro/runners/cucumber_runner.rb +2 -0
  66. data/lib/knapsack_pro/runners/minitest_runner.rb +2 -0
  67. data/lib/knapsack_pro/runners/queue/base_runner.rb +29 -0
  68. data/lib/knapsack_pro/runners/queue/cucumber_runner.rb +9 -6
  69. data/lib/knapsack_pro/runners/queue/minitest_runner.rb +13 -6
  70. data/lib/knapsack_pro/runners/queue/rspec_runner.rb +128 -135
  71. data/lib/knapsack_pro/runners/rspec_runner.rb +22 -3
  72. data/lib/knapsack_pro/runners/spinach_runner.rb +2 -0
  73. data/lib/knapsack_pro/runners/test_unit_runner.rb +2 -0
  74. data/lib/knapsack_pro/slow_test_file_determiner.rb +2 -0
  75. data/lib/knapsack_pro/slow_test_file_finder.rb +2 -0
  76. data/lib/knapsack_pro/task_loader.rb +2 -0
  77. data/lib/knapsack_pro/test_case_detectors/rspec_test_example_detector.rb +2 -0
  78. data/lib/knapsack_pro/test_case_mergers/base_merger.rb +2 -0
  79. data/lib/knapsack_pro/test_case_mergers/rspec_merger.rb +2 -0
  80. data/lib/knapsack_pro/test_file_cleaner.rb +2 -0
  81. data/lib/knapsack_pro/test_file_finder.rb +2 -0
  82. data/lib/knapsack_pro/test_file_pattern.rb +2 -0
  83. data/lib/knapsack_pro/test_file_presenter.rb +2 -0
  84. data/lib/knapsack_pro/test_files_with_test_cases_composer.rb +2 -0
  85. data/lib/knapsack_pro/test_flat_distributor.rb +2 -0
  86. data/lib/knapsack_pro/tracker.rb +3 -3
  87. data/lib/knapsack_pro/urls.rb +4 -0
  88. data/lib/knapsack_pro/utils.rb +2 -0
  89. data/lib/knapsack_pro/version.rb +3 -1
  90. data/lib/knapsack_pro.rb +5 -3
  91. data/lib/tasks/cucumber.rake +2 -0
  92. data/lib/tasks/encrypted_branch_names.rake +2 -0
  93. data/lib/tasks/encrypted_test_file_names.rake +2 -0
  94. data/lib/tasks/minitest.rake +2 -0
  95. data/lib/tasks/queue/cucumber.rake +13 -0
  96. data/lib/tasks/queue/minitest.rake +13 -0
  97. data/lib/tasks/queue/rspec.rake +13 -0
  98. data/lib/tasks/rspec.rake +5 -0
  99. data/lib/tasks/salt.rake +2 -0
  100. data/lib/tasks/spinach.rake +2 -0
  101. data/lib/tasks/test_unit.rake +2 -0
  102. data/spec/integration/api/build_distributions_subset_spec.rb +1 -0
  103. data/spec/integration/runners/queue/rspec_runner.rb +80 -0
  104. data/spec/integration/runners/queue/rspec_runner_spec.rb +2232 -0
  105. data/spec/knapsack_pro/adapters/base_adapter_spec.rb +30 -11
  106. data/spec/knapsack_pro/adapters/cucumber_adapter_spec.rb +2 -5
  107. data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +146 -174
  108. data/spec/knapsack_pro/base_allocator_builder_spec.rb +22 -48
  109. data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +19 -27
  110. data/spec/knapsack_pro/client/api/v1/queues_spec.rb +23 -43
  111. data/spec/knapsack_pro/client/connection_spec.rb +59 -7
  112. data/spec/knapsack_pro/config/ci/app_veyor_spec.rb +22 -8
  113. data/spec/knapsack_pro/config/ci/base_spec.rb +1 -0
  114. data/spec/knapsack_pro/config/ci/buildkite_spec.rb +51 -16
  115. data/spec/knapsack_pro/config/ci/circle_spec.rb +48 -13
  116. data/spec/knapsack_pro/config/ci/cirrus_ci_spec.rb +12 -12
  117. data/spec/knapsack_pro/config/ci/codefresh_spec.rb +21 -6
  118. data/spec/knapsack_pro/config/ci/codeship_spec.rb +20 -6
  119. data/spec/knapsack_pro/config/ci/github_actions_spec.rb +37 -10
  120. data/spec/knapsack_pro/config/ci/gitlab_ci_spec.rb +48 -13
  121. data/spec/knapsack_pro/config/ci/heroku_spec.rb +12 -12
  122. data/spec/knapsack_pro/config/ci/semaphore2_spec.rb +11 -11
  123. data/spec/knapsack_pro/config/ci/semaphore_spec.rb +12 -12
  124. data/spec/knapsack_pro/config/ci/travis_spec.rb +8 -8
  125. data/spec/knapsack_pro/config/env_spec.rb +204 -124
  126. data/spec/knapsack_pro/formatters/time_tracker_specs.rb +424 -0
  127. data/spec/knapsack_pro/hooks/queue_spec.rb +2 -2
  128. data/spec/knapsack_pro/presenter_spec.rb +1 -1
  129. data/spec/knapsack_pro/pure/queue/rspec_pure_spec.rb +224 -0
  130. data/spec/knapsack_pro/repository_adapters/git_adapter_spec.rb +72 -0
  131. data/spec/knapsack_pro/runners/queue/cucumber_runner_spec.rb +18 -16
  132. data/spec/knapsack_pro/runners/queue/minitest_runner_spec.rb +17 -14
  133. data/spec/knapsack_pro/runners/rspec_runner_spec.rb +40 -23
  134. data/spec/knapsack_pro/test_case_detectors/rspec_test_example_detector_spec.rb +1 -0
  135. data/spec/knapsack_pro/tracker_spec.rb +0 -4
  136. data/spec/knapsack_pro_spec.rb +3 -3
  137. data/spec/spec_helper.rb +0 -1
  138. metadata +26 -23
  139. data/lib/knapsack_pro/config/ci/snap_ci.rb +0 -35
  140. data/lib/knapsack_pro/config/ci/solano_ci.rb +0 -32
  141. data/lib/knapsack_pro/extensions/time.rb +0 -7
  142. data/lib/knapsack_pro/formatters/rspec_queue_profile_formatter_extension.rb +0 -56
  143. data/lib/knapsack_pro/formatters/rspec_queue_summary_formatter.rb +0 -112
  144. data/spec/knapsack_pro/config/ci/snap_ci_spec.rb +0 -104
  145. data/spec/knapsack_pro/config/ci/solano_ci_spec.rb +0 -73
  146. data/spec/knapsack_pro/extensions/time_spec.rb +0 -5
  147. data/spec/knapsack_pro/runners/queue/rspec_runner_spec.rb +0 -342
@@ -1,342 +0,0 @@
1
- describe KnapsackPro::Runners::Queue::RSpecRunner do
2
- before do
3
- # we don't want to modify rspec formatters because we want to see tests summary at the end
4
- # when you run this test file or whole test suite for the knapsack_pro gem
5
- stub_const('ENV', { 'KNAPSACK_PRO_MODIFY_DEFAULT_RSPEC_FORMATTERS' => false })
6
-
7
- require KnapsackPro.root + '/lib/knapsack_pro/formatters/rspec_queue_summary_formatter'
8
- require KnapsackPro.root + '/lib/knapsack_pro/formatters/rspec_queue_profile_formatter_extension'
9
- end
10
-
11
- describe '.run' do
12
- let(:test_suite_token_rspec) { 'fake-token' }
13
- let(:queue_id) { 'fake-queue-id' }
14
- let(:test_dir) { 'fake-test-dir' }
15
- let(:runner) do
16
- instance_double(described_class, test_dir: test_dir)
17
- end
18
-
19
- subject { described_class.run(args) }
20
-
21
- before do
22
- expect(KnapsackPro::Config::Env).to receive(:test_suite_token_rspec).and_return(test_suite_token_rspec)
23
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_queue_id).and_return(queue_id)
24
-
25
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_TEST_SUITE_TOKEN', test_suite_token_rspec)
26
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_RECORDING_ENABLED', 'true')
27
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_ID', queue_id)
28
-
29
- expect(KnapsackPro::Config::Env).to receive(:set_test_runner_adapter).with(KnapsackPro::Adapters::RSpecAdapter)
30
-
31
- expect(described_class).to receive(:new).with(KnapsackPro::Adapters::RSpecAdapter).and_return(runner)
32
- end
33
-
34
- context 'when args provided' do
35
- context 'when format option is not provided' do
36
- let(:args) { '--example-arg example-value' }
37
-
38
- it 'uses default formatter progress' do
39
- expected_exitstatus = 0
40
- expected_accumulator = {
41
- status: :completed,
42
- exitstatus: expected_exitstatus
43
- }
44
- accumulator = {
45
- status: :next,
46
- runner: runner,
47
- can_initialize_queue: true,
48
- args: ['--example-arg', 'example-value', '--format', 'progress', '--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter', '--default-path', 'fake-test-dir'],
49
- exitstatus: 0,
50
- all_test_file_paths: [],
51
- }
52
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
53
-
54
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
55
-
56
- subject
57
- end
58
- end
59
-
60
- context 'when format option is provided as --format' do
61
- let(:args) { '--format documentation' }
62
-
63
- it 'uses provided format option instead of default formatter progress' do
64
- expected_exitstatus = 0
65
- expected_accumulator = {
66
- status: :completed,
67
- exitstatus: expected_exitstatus
68
- }
69
- accumulator = {
70
- status: :next,
71
- runner: runner,
72
- can_initialize_queue: true,
73
- args: ['--format', 'documentation', '--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter', '--default-path', 'fake-test-dir'],
74
- exitstatus: 0,
75
- all_test_file_paths: [],
76
- }
77
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
78
-
79
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
80
-
81
- subject
82
- end
83
- end
84
-
85
- context 'when format option is provided as -f' do
86
- let(:args) { '-f d' }
87
-
88
- it 'uses provided format option instead of default formatter progress' do
89
- expected_exitstatus = 0
90
- expected_accumulator = {
91
- status: :completed,
92
- exitstatus: expected_exitstatus
93
- }
94
- accumulator = {
95
- status: :next,
96
- runner: runner,
97
- can_initialize_queue: true,
98
- args: ['-f', 'd', '--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter', '--default-path', 'fake-test-dir'],
99
- exitstatus: 0,
100
- all_test_file_paths: [],
101
- }
102
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
103
-
104
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
105
-
106
- subject
107
- end
108
- end
109
-
110
- context 'when format option is provided without a delimiter' do
111
- let(:args) { '-fMyCustomFormatter' }
112
-
113
- it 'uses provided format option instead of default formatter progress' do
114
- expected_exitstatus = 0
115
- expected_accumulator = {
116
- status: :completed,
117
- exitstatus: expected_exitstatus
118
- }
119
- accumulator = {
120
- status: :next,
121
- runner: runner,
122
- can_initialize_queue: true,
123
- args: ['-fMyCustomFormatter', '--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter', '--default-path', 'fake-test-dir'],
124
- exitstatus: 0,
125
- all_test_file_paths: [],
126
- }
127
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
128
-
129
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
130
-
131
- subject
132
- end
133
- end
134
-
135
- context 'when RSpec split by test examples feature is enabled' do
136
- before do
137
- expect(KnapsackPro::Config::Env).to receive(:rspec_split_by_test_examples?).and_return(true)
138
- expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:ensure_no_tag_option_when_rspec_split_by_test_examples_enabled!).and_call_original
139
- end
140
-
141
- context 'when tag option is provided' do
142
- let(:args) { '--tag example-value' }
143
-
144
- it do
145
- expect { subject }.to raise_error(/It is not allowed to use the RSpec tag option together with the RSpec split by test examples feature/)
146
- end
147
- end
148
- end
149
- end
150
-
151
- context 'when args not provided' do
152
- let(:args) { nil }
153
-
154
- it do
155
- expected_exitstatus = 0
156
- expected_accumulator = {
157
- status: :completed,
158
- exitstatus: expected_exitstatus
159
- }
160
- accumulator = {
161
- status: :next,
162
- runner: runner,
163
- can_initialize_queue: true,
164
- args: ['--format', 'progress', '--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter', '--default-path', 'fake-test-dir'],
165
- exitstatus: 0,
166
- all_test_file_paths: [],
167
- }
168
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
169
-
170
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
171
-
172
- subject
173
- end
174
- end
175
- end
176
-
177
- describe '.run_tests' do
178
- let(:runner) { instance_double(described_class) }
179
- let(:can_initialize_queue) { double(:can_initialize_queue) }
180
- let(:args) { ['--no-color', '--default-path', 'fake-test-dir'] }
181
- let(:exitstatus) { double }
182
- let(:all_test_file_paths) { [] }
183
- let(:accumulator) do
184
- {
185
- runner: runner,
186
- can_initialize_queue: can_initialize_queue,
187
- args: args,
188
- exitstatus: exitstatus,
189
- all_test_file_paths: all_test_file_paths,
190
- }
191
- end
192
-
193
- subject { described_class.run_tests(accumulator) }
194
-
195
- before do
196
- expect(runner).to receive(:test_file_paths).with(can_initialize_queue: can_initialize_queue, executed_test_files: all_test_file_paths).and_return(test_file_paths)
197
- end
198
-
199
- context 'when test files exist' do
200
- let(:test_file_paths) { ['a_spec.rb', 'b_spec.rb'] }
201
- let(:logger) { double }
202
- let(:rspec_seed) { 7771 }
203
-
204
- before do
205
- subset_queue_id = 'fake-subset-queue-id'
206
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_subset_queue_id).and_return(subset_queue_id)
207
-
208
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_SUBSET_QUEUE_ID', subset_queue_id)
209
-
210
- tracker = instance_double(KnapsackPro::Tracker)
211
- expect(KnapsackPro).to receive(:tracker).twice.and_return(tracker)
212
- expect(tracker).to receive(:reset!)
213
- expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
214
-
215
- options = double
216
- expect(RSpec::Core::ConfigurationOptions).to receive(:new).with([
217
- '--no-color',
218
- '--default-path', 'fake-test-dir',
219
- 'a_spec.rb', 'b_spec.rb',
220
- ]).and_return(options)
221
-
222
- rspec_core_runner = double
223
- expect(RSpec::Core::Runner).to receive(:new).with(options).and_return(rspec_core_runner)
224
- expect(rspec_core_runner).to receive(:run).with($stderr, $stdout).and_return(exit_code)
225
-
226
- expect(described_class).to receive(:rspec_clear_examples)
227
-
228
- expect(KnapsackPro::Hooks::Queue).to receive(:call_before_subset_queue)
229
-
230
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_subset_queue)
231
-
232
- expect(KnapsackPro::Report).to receive(:save_subset_queue_to_file)
233
-
234
- configuration = double
235
- expect(rspec_core_runner).to receive(:configuration).twice.and_return(configuration)
236
- expect(configuration).to receive(:seed_used?).and_return(true)
237
- expect(configuration).to receive(:seed).and_return(rspec_seed)
238
-
239
- expect(KnapsackPro).to receive(:logger).twice.and_return(logger)
240
- expect(logger).to receive(:info)
241
- .with("To retry the last batch of tests fetched from the API Queue, please run the following command on your machine:")
242
- expect(logger).to receive(:info).with(/#{args.join(' ')} --seed #{rspec_seed}/)
243
- end
244
-
245
- context 'when exit code is zero' do
246
- let(:exit_code) { 0 }
247
-
248
- it do
249
- expect(subject).to eq({
250
- status: :next,
251
- runner: runner,
252
- can_initialize_queue: false,
253
- args: args,
254
- exitstatus: exitstatus,
255
- all_test_file_paths: test_file_paths,
256
- })
257
- end
258
- end
259
-
260
- context 'when exit code is not zero' do
261
- let(:exit_code) { double }
262
-
263
- it do
264
- expect(subject).to eq({
265
- status: :next,
266
- runner: runner,
267
- can_initialize_queue: false,
268
- args: args,
269
- exitstatus: exit_code,
270
- all_test_file_paths: test_file_paths,
271
- })
272
- end
273
- end
274
- end
275
-
276
- context "when test files don't exist" do
277
- let(:test_file_paths) { [] }
278
-
279
- context 'when all_test_file_paths exist' do
280
- let(:all_test_file_paths) { ['a_spec.rb'] }
281
- let(:logger) { double }
282
-
283
- before do
284
- described_class.class_variable_set(:@@used_seed, used_seed)
285
-
286
- expect(KnapsackPro).to receive(:logger).twice.and_return(logger)
287
-
288
- expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:verify_bind_method_called)
289
-
290
- expect(KnapsackPro::Formatters::RSpecQueueSummaryFormatter).to receive(:print_summary)
291
- expect(KnapsackPro::Formatters::RSpecQueueProfileFormatterExtension).to receive(:print_summary)
292
-
293
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
294
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
295
-
296
- expect(logger).to receive(:info)
297
- .with('To retry all the tests assigned to this CI node, please run the following command on your machine:')
298
- expect(logger).to receive(:info).with(logged_rspec_command_matcher)
299
- end
300
-
301
- context 'when @@used_seed has been set' do
302
- let(:used_seed) { '8333' }
303
- let(:logged_rspec_command_matcher) { /#{args.join(' ')} --seed #{used_seed} \"a_spec.rb"/ }
304
-
305
- it do
306
- expect(subject).to eq({
307
- status: :completed,
308
- exitstatus: exitstatus,
309
- })
310
- end
311
- end
312
-
313
- context 'when @@used_seed has not been set' do
314
- let(:used_seed) { nil }
315
- let(:logged_rspec_command_matcher) { /#{args.join(' ')} \"a_spec.rb"/ }
316
-
317
- it do
318
- expect(subject).to eq({
319
- status: :completed,
320
- exitstatus: exitstatus,
321
- })
322
- end
323
- end
324
- end
325
-
326
- context "when all_test_file_paths don't exist" do
327
- let(:all_test_file_paths) { [] }
328
-
329
- it do
330
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
331
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
332
- expect(KnapsackPro).to_not receive(:logger)
333
-
334
- expect(subject).to eq({
335
- status: :completed,
336
- exitstatus: exitstatus,
337
- })
338
- end
339
- end
340
- end
341
- end
342
- end