knapsack_pro 9.0.0 → 9.1.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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/lib/knapsack_pro/adapters/minitest_adapter.rb +8 -13
  3. data/lib/knapsack_pro/client/connection.rb +1 -1
  4. data/lib/knapsack_pro/config/env.rb +1 -24
  5. data/lib/knapsack_pro/version.rb +1 -1
  6. metadata +2 -196
  7. data/.circleci/config.yml +0 -468
  8. data/.github/assets/install-button.png +0 -0
  9. data/.github/assets/knapsack-diamonds.png +0 -0
  10. data/.github/dependabot.yml +0 -11
  11. data/.github/pull_request_template.md +0 -11
  12. data/.gitignore +0 -39
  13. data/.rspec +0 -5
  14. data/CHANGELOG.md +0 -1995
  15. data/Gemfile +0 -13
  16. data/LICENSE +0 -22
  17. data/README.md +0 -90
  18. data/Rakefile +0 -2
  19. data/knapsack_pro.gemspec +0 -43
  20. data/spec/fixtures/test_file_list_source_file.txt +0 -6
  21. data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/invalid_test_suite_token.yml +0 -59
  22. data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/success.yml +0 -61
  23. data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/invalid_test_suite_token.yml +0 -50
  24. data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/success.yml +0 -50
  25. data/spec/integration/api/build_distributions_subset_spec.rb +0 -77
  26. data/spec/integration/api/build_subsets_create_spec.rb +0 -77
  27. data/spec/integration/runners/fallback_spec.rb +0 -131
  28. data/spec/integration/runners/queue/cucumber_runner_fallback_spec.rb +0 -129
  29. data/spec/integration/runners/queue/minitest_runner_fallback_spec.rb +0 -129
  30. data/spec/integration/runners/queue/rspec_runner.rb +0 -80
  31. data/spec/integration/runners/queue/rspec_runner_fallback_spec.rb +0 -137
  32. data/spec/integration/runners/queue/rspec_runner_spec.rb +0 -2672
  33. data/spec/knapsack_pro/adapters/base_adapter_spec.rb +0 -221
  34. data/spec/knapsack_pro/adapters/cucumber_adapter_spec.rb +0 -216
  35. data/spec/knapsack_pro/adapters/minitest_adapter_spec.rb +0 -189
  36. data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +0 -427
  37. data/spec/knapsack_pro/adapters/spinach_adapter_spec.rb +0 -61
  38. data/spec/knapsack_pro/adapters/test_unit_adapter_spec.rb +0 -86
  39. data/spec/knapsack_pro/base_allocator_builder_spec.rb +0 -102
  40. data/spec/knapsack_pro/build_distribution_fetcher_spec.rb +0 -89
  41. data/spec/knapsack_pro/client/api/action_spec.rb +0 -17
  42. data/spec/knapsack_pro/client/api/v1/base_spec.rb +0 -2
  43. data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +0 -95
  44. data/spec/knapsack_pro/client/api/v1/build_subsets_spec.rb +0 -35
  45. data/spec/knapsack_pro/client/api/v1/queues_spec.rb +0 -83
  46. data/spec/knapsack_pro/client/connection_spec.rb +0 -581
  47. data/spec/knapsack_pro/config/ci/app_veyor_spec.rb +0 -87
  48. data/spec/knapsack_pro/config/ci/base_spec.rb +0 -10
  49. data/spec/knapsack_pro/config/ci/buildkite_spec.rb +0 -135
  50. data/spec/knapsack_pro/config/ci/circle_spec.rb +0 -122
  51. data/spec/knapsack_pro/config/ci/cirrus_ci_spec.rb +0 -87
  52. data/spec/knapsack_pro/config/ci/codefresh_spec.rb +0 -81
  53. data/spec/knapsack_pro/config/ci/codeship_spec.rb +0 -80
  54. data/spec/knapsack_pro/config/ci/github_actions_spec.rb +0 -140
  55. data/spec/knapsack_pro/config/ci/gitlab_ci_spec.rb +0 -137
  56. data/spec/knapsack_pro/config/ci/heroku_spec.rb +0 -87
  57. data/spec/knapsack_pro/config/ci/semaphore2_spec.rb +0 -133
  58. data/spec/knapsack_pro/config/ci/semaphore_spec.rb +0 -87
  59. data/spec/knapsack_pro/config/ci/travis_spec.rb +0 -73
  60. data/spec/knapsack_pro/config/env_generator_spec.rb +0 -52
  61. data/spec/knapsack_pro/config/env_spec.rb +0 -1291
  62. data/spec/knapsack_pro/config/temp_files_spec.rb +0 -25
  63. data/spec/knapsack_pro/crypto/branch_encryptor_spec.rb +0 -53
  64. data/spec/knapsack_pro/crypto/decryptor_spec.rb +0 -83
  65. data/spec/knapsack_pro/crypto/digestor_spec.rb +0 -13
  66. data/spec/knapsack_pro/crypto/encryptor_spec.rb +0 -58
  67. data/spec/knapsack_pro/formatters/time_tracker_fetcher_spec.rb +0 -27
  68. data/spec/knapsack_pro/formatters/time_tracker_spec.rb +0 -448
  69. data/spec/knapsack_pro/hooks/queue_spec.rb +0 -199
  70. data/spec/knapsack_pro/presenter_spec.rb +0 -57
  71. data/spec/knapsack_pro/pure/queue/rspec_pure_spec.rb +0 -248
  72. data/spec/knapsack_pro/queue_spec.rb +0 -35
  73. data/spec/knapsack_pro/report_spec.rb +0 -232
  74. data/spec/knapsack_pro/repository_adapter_initiator_spec.rb +0 -21
  75. data/spec/knapsack_pro/repository_adapters/base_adapter_spec.rb +0 -13
  76. data/spec/knapsack_pro/repository_adapters/env_adapter_spec.rb +0 -27
  77. data/spec/knapsack_pro/repository_adapters/git_adapter_spec.rb +0 -106
  78. data/spec/knapsack_pro/runners/base_runner_spec.rb +0 -87
  79. data/spec/knapsack_pro/runners/cucumber_runner_spec.rb +0 -92
  80. data/spec/knapsack_pro/runners/minitest_runner_spec.rb +0 -57
  81. data/spec/knapsack_pro/runners/queue/base_runner_spec.rb +0 -73
  82. data/spec/knapsack_pro/runners/queue/cucumber_runner_spec.rb +0 -209
  83. data/spec/knapsack_pro/runners/queue/minitest_runner_spec.rb +0 -203
  84. data/spec/knapsack_pro/runners/rspec_runner_spec.rb +0 -111
  85. data/spec/knapsack_pro/runners/spinach_runner_spec.rb +0 -56
  86. data/spec/knapsack_pro/runners/test_unit_runner_spec.rb +0 -62
  87. data/spec/knapsack_pro/slow_test_file_determiner_spec.rb +0 -119
  88. data/spec/knapsack_pro/slow_test_file_finder_spec.rb +0 -42
  89. data/spec/knapsack_pro/task_loader_spec.rb +0 -14
  90. data/spec/knapsack_pro/test_case_detectors/rspec_test_example_detector_spec.rb +0 -217
  91. data/spec/knapsack_pro/test_case_mergers/base_merger_spec.rb +0 -27
  92. data/spec/knapsack_pro/test_case_mergers/rspec_merger_spec.rb +0 -81
  93. data/spec/knapsack_pro/test_file_cleaner_spec.rb +0 -11
  94. data/spec/knapsack_pro/test_file_finder_spec.rb +0 -176
  95. data/spec/knapsack_pro/test_file_pattern_spec.rb +0 -49
  96. data/spec/knapsack_pro/test_file_presenter_spec.rb +0 -22
  97. data/spec/knapsack_pro/test_files_with_test_cases_composer_spec.rb +0 -41
  98. data/spec/knapsack_pro/test_flat_distributor_spec.rb +0 -60
  99. data/spec/knapsack_pro/tracker_spec.rb +0 -184
  100. data/spec/knapsack_pro/utils_spec.rb +0 -55
  101. data/spec/knapsack_pro_spec.rb +0 -116
  102. data/spec/spec_helper.rb +0 -47
  103. data/spec/support/.gitkeep +0 -0
  104. data/spec/support/fakes/cucumber.rb +0 -25
  105. data/spec/support/fakes/minitest.rb +0 -18
  106. data/spec/support/shared_examples/adapter.rb +0 -17
  107. data/spec_fake/controllers/users_controller_spec.rb +0 -0
  108. data/spec_fake/models/admin_spec.rb +0 -0
  109. data/spec_fake/models/user_spec.rb +0 -0
  110. data/spec_fake/spec_helper.rb +0 -0
  111. data/spec_time_tracker/spec_helper.rb +0 -29
  112. data/test_fake/a_test.rb +0 -0
  113. data/test_fake/b_test.rb +0 -0
@@ -1,73 +0,0 @@
1
- describe KnapsackPro::Runners::Queue::BaseRunner do
2
- describe '.run' do
3
- it do
4
- expect {
5
- described_class.run(nil)
6
- }.to raise_error NotImplementedError
7
- end
8
- end
9
-
10
- describe '.run_tests' do
11
- it do
12
- expect {
13
- described_class.run_tests(nil, nil, nil, nil)
14
- }.to raise_error NotImplementedError
15
- end
16
- end
17
-
18
- describe 'instance methods' do
19
- let(:adapter_class) { double }
20
- let(:runner) do
21
- described_class.new(adapter_class)
22
- end
23
- let(:allocator) { instance_double(KnapsackPro::QueueAllocator) }
24
- let(:allocator_builder) { instance_double(KnapsackPro::QueueAllocatorBuilder) }
25
-
26
- before do
27
- expect(KnapsackPro::QueueAllocatorBuilder).to receive(:new).with(adapter_class).and_return(allocator_builder)
28
- expect(allocator_builder).to receive(:allocator).and_return(allocator)
29
- end
30
-
31
- describe '#test_file_paths' do
32
- subject { runner.test_file_paths(args) }
33
-
34
- context 'when can_initialize_queue flag has value' do
35
- let(:can_initialize_queue) { double }
36
- let(:executed_test_files) { double }
37
- let(:args) do
38
- {
39
- can_initialize_queue: can_initialize_queue,
40
- executed_test_files: executed_test_files,
41
- }
42
- end
43
- let(:test_file_paths) { double }
44
-
45
- before do
46
- expect(allocator).to receive(:test_file_paths).with(can_initialize_queue, executed_test_files).and_return(test_file_paths)
47
- end
48
-
49
- it { should eq test_file_paths }
50
- end
51
-
52
- context 'when can_initialize_queue flag has no value' do
53
- let(:args) { {} }
54
-
55
- it do
56
- expect { subject }.to raise_error(KeyError)
57
- end
58
- end
59
- end
60
-
61
- describe '#test_dir' do
62
- let(:test_dir) { double }
63
-
64
- subject { runner.test_dir }
65
-
66
- before do
67
- expect(allocator_builder).to receive(:test_dir).and_return(test_dir)
68
- end
69
-
70
- it { should eq test_dir }
71
- end
72
- end
73
- end
@@ -1,209 +0,0 @@
1
- describe KnapsackPro::Runners::Queue::CucumberRunner do
2
- describe '.run' do
3
- let(:test_suite_token_cucumber) { 'fake-token' }
4
- let(:queue_id) { 'fake-queue-id' }
5
- let(:test_dir) { 'fake-features-dir' }
6
- let(:runner) do
7
- instance_double(described_class, test_dir: test_dir)
8
- end
9
-
10
- subject { described_class.run(args) }
11
-
12
- before do
13
- expect(described_class).to receive(:require).with('cucumber/rake/task')
14
-
15
- expect(KnapsackPro::Config::Env).to receive(:test_suite_token_cucumber).and_return(test_suite_token_cucumber)
16
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_queue_id).and_return(queue_id)
17
-
18
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_TEST_SUITE_TOKEN', test_suite_token_cucumber)
19
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_MODE_ENABLED', 'true')
20
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_ID', queue_id)
21
-
22
- expect(KnapsackPro::Config::Env).to receive(:set_test_runner_adapter).with(KnapsackPro::Adapters::CucumberAdapter)
23
-
24
- expect(described_class).to receive(:new).with(KnapsackPro::Adapters::CucumberAdapter).and_return(runner)
25
- end
26
-
27
- context 'when args are provided' do
28
- let(:args) { '--retry 5 --no-strict-flaky' }
29
-
30
- it do
31
- expected_exitstatus = 0
32
- expected_accumulator = {
33
- status: :completed,
34
- exitstatus: expected_exitstatus
35
- }
36
- accumulator = {
37
- status: :next,
38
- runner: runner,
39
- can_initialize_queue: true,
40
- args: args,
41
- exitstatus: 0,
42
- node_test_file_paths: [],
43
- }
44
- expect(described_class).to receive(:handle_signal!)
45
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
46
-
47
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
48
-
49
- subject
50
- end
51
- end
52
-
53
- context 'when args are not provided' do
54
- let(:args) { nil }
55
-
56
- it do
57
- expected_exitstatus = 0
58
- expected_accumulator = {
59
- status: :completed,
60
- exitstatus: expected_exitstatus
61
- }
62
- accumulator = {
63
- status: :next,
64
- runner: runner,
65
- can_initialize_queue: true,
66
- args: nil,
67
- exitstatus: 0,
68
- node_test_file_paths: [],
69
- }
70
- expect(described_class).to receive(:handle_signal!)
71
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
72
-
73
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
74
-
75
- subject
76
- end
77
- end
78
- end
79
-
80
- describe '.run_tests' do
81
- let(:test_dir) { 'fake-features-dir' }
82
- let(:runner) do
83
- instance_double(described_class, test_dir: test_dir)
84
- end
85
- let(:can_initialize_queue) { double(:can_initialize_queue) }
86
- let(:args) { '--retry 5 --no-strict-flaky' }
87
- let(:exitstatus) { 0 }
88
- let(:node_test_file_paths) { [] }
89
- let(:accumulator) do
90
- {
91
- runner: runner,
92
- can_initialize_queue: can_initialize_queue,
93
- args: args,
94
- exitstatus: exitstatus,
95
- node_test_file_paths: node_test_file_paths,
96
- }
97
- end
98
-
99
- subject { described_class.run_tests(accumulator) }
100
-
101
- before do
102
- expect(runner).to receive(:test_file_paths).with(can_initialize_queue: can_initialize_queue, executed_test_files: node_test_file_paths).and_return(test_file_paths)
103
- end
104
-
105
- context 'when test files exist' do
106
- let(:test_file_paths) { ['features/a.feature', 'features/b.feature'] }
107
- let(:child_status) { double }
108
-
109
- before do
110
- subset_queue_id = 'fake-subset-queue-id'
111
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_subset_queue_id).and_return(subset_queue_id)
112
-
113
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_SUBSET_QUEUE_ID', subset_queue_id)
114
-
115
- tracker = instance_double(KnapsackPro::Tracker)
116
- expect(KnapsackPro).to receive(:tracker).twice.and_return(tracker)
117
- expect(tracker).to receive(:reset!)
118
- expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
119
-
120
- expect(KnapsackPro::Hooks::Queue).to receive(:call_before_subset_queue)
121
-
122
- # .cucumber_run
123
- expect(Kernel).to receive(:system).with('bundle exec cucumber --retry 5 --no-strict-flaky --require fake-features-dir -- "features/a.feature" "features/b.feature"')
124
-
125
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_BEFORE_QUEUE_HOOK_CALLED', 'true')
126
-
127
- allow(described_class).to receive(:child_status).and_return(child_status)
128
- expect(child_status).to receive(:exited?).and_return(process_exited)
129
- allow(child_status).to receive(:exitstatus).and_return(exitstatus)
130
- end
131
-
132
- context 'when system process finished (exited)' do
133
- let(:process_exited) { true }
134
-
135
- context 'when tests are passing' do
136
- let(:exitstatus) { 0 }
137
-
138
- it 'returns exit code 0' do
139
- expect(subject).to eq({
140
- status: :next,
141
- runner: runner,
142
- can_initialize_queue: false,
143
- args: args,
144
- exitstatus: exitstatus,
145
- node_test_file_paths: test_file_paths,
146
- })
147
- end
148
- end
149
-
150
- context 'when tests are failing' do
151
- let(:exitstatus) { 1 }
152
-
153
- it 'returns exit code 1' do
154
- expect(subject).to eq({
155
- status: :next,
156
- runner: runner,
157
- can_initialize_queue: false,
158
- args: args,
159
- exitstatus: 1, # tests failed
160
- node_test_file_paths: test_file_paths,
161
- })
162
- end
163
- end
164
- end
165
-
166
- context 'when system process did not finish (it has not exited)' do
167
- let(:process_exited) { false }
168
-
169
- it 'raises an error' do
170
- expect { subject }.to raise_error(RuntimeError, /^Cucumber process execution failed/)
171
- end
172
- end
173
- end
174
-
175
- context 'when test files do not exist' do
176
- let(:test_file_paths) { [] }
177
-
178
- context 'when node_test_file_paths exists' do
179
- let(:node_test_file_paths) { ['features/a.feature'] }
180
-
181
- it 'returns exit code 0' do
182
- expect(KnapsackPro::Adapters::CucumberAdapter).to receive(:verify_bind_method_called)
183
-
184
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
185
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
186
-
187
- expect(subject).to eq({
188
- status: :completed,
189
- exitstatus: exitstatus,
190
- })
191
- end
192
- end
193
-
194
- context 'when node_test_file_paths do not exist' do
195
- let(:node_test_file_paths) { [] }
196
-
197
- it 'returns exit code 0' do
198
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
199
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
200
-
201
- expect(subject).to eq({
202
- status: :completed,
203
- exitstatus: exitstatus,
204
- })
205
- end
206
- end
207
- end
208
- end
209
- end
@@ -1,203 +0,0 @@
1
- describe KnapsackPro::Runners::Queue::MinitestRunner do
2
- describe '.run' do
3
- let(:test_suite_token_minitest) { 'fake-token' }
4
- let(:queue_id) { 'fake-queue-id' }
5
- let(:test_dir) { 'fake-test-dir' }
6
- let(:runner) do
7
- instance_double(described_class, test_dir: test_dir)
8
- end
9
-
10
- subject { described_class.run(args) }
11
-
12
- before do
13
- expect(described_class).to receive(:require).with('minitest')
14
-
15
- expect(KnapsackPro::Config::Env).to receive(:test_suite_token_minitest).and_return(test_suite_token_minitest)
16
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_queue_id).and_return(queue_id)
17
-
18
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_TEST_SUITE_TOKEN', test_suite_token_minitest)
19
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_MODE_ENABLED', 'true')
20
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_QUEUE_ID', queue_id)
21
-
22
- expect(KnapsackPro::Config::Env).to receive(:set_test_runner_adapter).with(KnapsackPro::Adapters::MinitestAdapter)
23
-
24
- expect(described_class).to receive(:new).with(KnapsackPro::Adapters::MinitestAdapter).and_return(runner)
25
-
26
- expect($LOAD_PATH).to receive(:unshift).with(test_dir)
27
- end
28
-
29
- context 'when args are provided' do
30
- let(:args) { '--verbose --pride' }
31
-
32
- it do
33
- expected_exitstatus = 0
34
- expected_accumulator = {
35
- status: :completed,
36
- exitstatus: expected_exitstatus
37
- }
38
- accumulator = {
39
- status: :next,
40
- runner: runner,
41
- can_initialize_queue: true,
42
- args: ['--verbose', '--pride'],
43
- exitstatus: 0,
44
- node_test_file_paths: [],
45
- }
46
- expect(described_class).to receive(:handle_signal!)
47
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
48
-
49
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
50
-
51
- subject
52
- end
53
- end
54
-
55
- context 'when args are not provided' do
56
- let(:args) { nil }
57
-
58
- it do
59
- expected_exitstatus = 0
60
- expected_accumulator = {
61
- status: :completed,
62
- exitstatus: expected_exitstatus
63
- }
64
- accumulator = {
65
- status: :next,
66
- runner: runner,
67
- can_initialize_queue: true,
68
- args: [],
69
- exitstatus: 0,
70
- node_test_file_paths: [],
71
- }
72
- expect(described_class).to receive(:handle_signal!)
73
- expect(described_class).to receive(:run_tests).with(accumulator).and_return(expected_accumulator)
74
-
75
- expect(Kernel).to receive(:exit).with(expected_exitstatus)
76
-
77
- subject
78
- end
79
- end
80
- end
81
-
82
- describe '.run_tests' do
83
- let(:runner) { instance_double(described_class) }
84
- let(:can_initialize_queue) { double(:can_initialize_queue) }
85
- let(:args) { ['--verbose', '--pride'] }
86
- let(:exitstatus) { 0 }
87
- let(:node_test_file_paths) { [] }
88
- let(:accumulator) do
89
- {
90
- runner: runner,
91
- can_initialize_queue: can_initialize_queue,
92
- args: args,
93
- exitstatus: exitstatus,
94
- node_test_file_paths: node_test_file_paths,
95
- }
96
- end
97
-
98
- subject { described_class.run_tests(accumulator) }
99
-
100
- before do
101
- expect(runner).to receive(:test_file_paths).with(can_initialize_queue: can_initialize_queue, executed_test_files: node_test_file_paths).and_return(test_file_paths)
102
- end
103
-
104
- context 'when test files exist' do
105
- let(:test_file_paths) { ['a_test.rb', 'b_test.rb', 'fake_path_test.rb'] }
106
-
107
- before do
108
- subset_queue_id = 'fake-subset-queue-id'
109
- expect(KnapsackPro::Config::EnvGenerator).to receive(:set_subset_queue_id).and_return(subset_queue_id)
110
-
111
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_SUBSET_QUEUE_ID', subset_queue_id)
112
-
113
- tracker = instance_double(KnapsackPro::Tracker)
114
- expect(KnapsackPro).to receive(:tracker).twice.and_return(tracker)
115
- expect(tracker).to receive(:reset!)
116
- expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
117
-
118
- # .minitest_run
119
- allow(File).to receive(:exist?)
120
- expect(File).to receive(:exist?).with('./a_test.rb').and_return(true)
121
- expect(File).to receive(:exist?).with('./b_test.rb').and_return(true)
122
- expect(File).to receive(:exist?).with('./fake_path_test.rb').and_return(false)
123
- expect(described_class).to receive(:require).with('./a_test.rb')
124
- expect(described_class).to receive(:require).with('./b_test.rb')
125
- expect(described_class).to_not receive(:require).with('./fake_path_test.rb')
126
-
127
- expect(Minitest).to receive(:run).with(args).and_return(is_tests_green)
128
-
129
- expect(Minitest::Runnable).to receive(:reset)
130
-
131
- expect(KnapsackPro::Hooks::Queue).to receive(:call_before_subset_queue)
132
-
133
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_subset_queue)
134
-
135
- expect(KnapsackPro::Report).to receive(:save_subset_queue_to_file)
136
- end
137
-
138
- context 'when tests are passing' do
139
- let(:is_tests_green) { true }
140
-
141
- it 'returns exit code 0' do
142
- expect(subject).to eq({
143
- status: :next,
144
- runner: runner,
145
- can_initialize_queue: false,
146
- args: args,
147
- exitstatus: exitstatus,
148
- node_test_file_paths: test_file_paths,
149
- })
150
- end
151
- end
152
-
153
- context 'when tests are failing' do
154
- let(:is_tests_green) { false }
155
-
156
- it 'returns exit code 1' do
157
- expect(subject).to eq({
158
- status: :next,
159
- runner: runner,
160
- can_initialize_queue: false,
161
- args: args,
162
- exitstatus: 1, # tests failed
163
- node_test_file_paths: test_file_paths,
164
- })
165
- end
166
- end
167
- end
168
-
169
- context 'when test files do not exist' do
170
- let(:test_file_paths) { [] }
171
-
172
- context 'when node_test_file_paths exists' do
173
- let(:node_test_file_paths) { ['a_test.rb'] }
174
-
175
- it 'returns exit code 0' do
176
- expect(KnapsackPro::Adapters::MinitestAdapter).to receive(:verify_bind_method_called)
177
-
178
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
179
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
180
-
181
- expect(subject).to eq({
182
- status: :completed,
183
- exitstatus: exitstatus,
184
- })
185
- end
186
- end
187
-
188
- context 'when node_test_file_paths do not exist' do
189
- let(:node_test_file_paths) { [] }
190
-
191
- it 'returns exit code 0' do
192
- expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
193
- expect(KnapsackPro::Report).to receive(:save_node_queue_to_api)
194
-
195
- expect(subject).to eq({
196
- status: :completed,
197
- exitstatus: exitstatus,
198
- })
199
- end
200
- end
201
- end
202
- end
203
- end
@@ -1,111 +0,0 @@
1
- require 'rspec/core/rake_task'
2
-
3
- describe KnapsackPro::Runners::RSpecRunner do
4
- subject { described_class.new(KnapsackPro::Adapters::RSpecAdapter) }
5
-
6
- it { should be_kind_of KnapsackPro::Runners::BaseRunner }
7
-
8
- describe '.run' do
9
- let(:args) { '--profile --color' }
10
-
11
- let(:test_suite_token_rspec) { 'fake-token' }
12
-
13
- subject { described_class.run(args) }
14
-
15
- before do
16
- expect(KnapsackPro::Config::Env).to receive(:test_suite_token_rspec).and_return(test_suite_token_rspec)
17
-
18
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_TEST_SUITE_TOKEN', test_suite_token_rspec)
19
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_REGULAR_MODE_ENABLED', 'true')
20
- expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_RSPEC_OPTIONS', args)
21
-
22
- expect(KnapsackPro::Config::Env).to receive(:set_test_runner_adapter).with(KnapsackPro::Adapters::RSpecAdapter)
23
-
24
- expect(described_class).to receive(:new)
25
- .with(KnapsackPro::Adapters::RSpecAdapter).and_return(runner)
26
- end
27
-
28
- context 'when test files were returned by Knapsack Pro API' do
29
- let(:test_dir) { 'fake-test-dir' }
30
- let(:test_file_paths) { ['spec/a_spec.rb', 'spec/b_spec.rb[1:1]'] }
31
- let(:stringify_test_file_paths) { test_file_paths.join(' ') }
32
- let(:runner) do
33
- instance_double(described_class,
34
- test_dir: test_dir,
35
- test_file_paths: test_file_paths,
36
- stringify_test_file_paths: stringify_test_file_paths,
37
- test_files_to_execute_exist?: true)
38
- end
39
- let(:task) { double }
40
- let(:task_config) { double }
41
-
42
- before do
43
- expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:verify_bind_method_called).ordered
44
-
45
- expect(Rake::Task).to receive(:[]).with('knapsack_pro:rspec_run').at_least(1).and_return(task)
46
-
47
- expect(RSpec::Core::RakeTask).to receive(:new).with('knapsack_pro:rspec_run').and_yield(task_config)
48
- expect(RSpec::Core::ConfigurationOptions).to receive_message_chain(:new, :options).and_return({})
49
- expect(task_config).to receive(:rspec_opts=).with('--profile --color --format progress --format KnapsackPro::Formatters::TimeTracker --default-path fake-test-dir spec/a_spec.rb spec/b_spec.rb[1:1]')
50
- expect(task_config).to receive(:pattern=).with([])
51
- end
52
-
53
- shared_examples 'invokes RSpec rake task' do
54
- context 'when rake task already exists' do
55
- before do
56
- expect(Rake::Task).to receive(:task_defined?).with('knapsack_pro:rspec_run').and_return(true)
57
- expect(task).to receive(:clear)
58
- end
59
-
60
- it do
61
- result = double(:result)
62
- expect(task).to receive(:invoke).and_return(result)
63
- expect(subject).to eq result
64
- end
65
- end
66
-
67
- context "when rake task doesn't exist" do
68
- before do
69
- expect(Rake::Task).to receive(:task_defined?).with('knapsack_pro:rspec_run').and_return(false)
70
- expect(task).not_to receive(:clear)
71
- end
72
-
73
- it do
74
- result = double(:result)
75
- expect(task).to receive(:invoke).and_return(result)
76
- expect(subject).to eq result
77
- end
78
- end
79
- end
80
-
81
- context 'when the default log level' do
82
- before do
83
- expect(task_config).to receive(:verbose=).with(true)
84
- end
85
-
86
- it_behaves_like 'invokes RSpec rake task'
87
- end
88
-
89
- context 'when the warning log level' do
90
- before do
91
- expect(KnapsackPro::Config::Env).to receive(:log_level).and_return(::Logger::WARN)
92
-
93
- expect(task_config).to receive(:verbose=).with(false)
94
- end
95
-
96
- it_behaves_like 'invokes RSpec rake task'
97
- end
98
- end
99
-
100
- context 'when test files were not returned by Knapsack Pro API' do
101
- let(:runner) do
102
- instance_double(described_class,
103
- test_files_to_execute_exist?: false)
104
- end
105
-
106
- it "doesn't run tests" do
107
- subject
108
- end
109
- end
110
- end
111
- end
@@ -1,56 +0,0 @@
1
- describe KnapsackPro::Runners::SpinachRunner do
2
- subject { described_class.new(KnapsackPro::Adapters::SpinachAdapter) }
3
-
4
- it { should be_kind_of KnapsackPro::Runners::BaseRunner }
5
-
6
- describe '.run' do
7
- let(:args) { '--custom-arg' }
8
-
9
- subject { described_class.run(args) }
10
-
11
- before do
12
- stub_const("ENV", { 'KNAPSACK_PRO_TEST_SUITE_TOKEN_SPINACH' => 'spinach-token' })
13
-
14
- expect(KnapsackPro::Config::Env).to receive(:set_test_runner_adapter).with(KnapsackPro::Adapters::SpinachAdapter)
15
-
16
- expect(described_class).to receive(:new)
17
- .with(KnapsackPro::Adapters::SpinachAdapter).and_return(runner)
18
- end
19
-
20
- context 'when test files were returned by Knapsack Pro API' do
21
- let(:test_file_paths) { ['features/a.feature', 'features/b.feature'] }
22
- let(:stringify_test_file_paths) { test_file_paths.join(' ') }
23
- let(:test_dir) { 'fake-test-dir' }
24
- let(:runner) do
25
- instance_double(described_class,
26
- test_dir: test_dir,
27
- test_file_paths: test_file_paths,
28
- stringify_test_file_paths: stringify_test_file_paths,
29
- test_files_to_execute_exist?: true)
30
- end
31
-
32
- it do
33
- expect(KnapsackPro::Adapters::SpinachAdapter).to receive(:verify_bind_method_called)
34
-
35
- tracker = instance_double(KnapsackPro::Tracker)
36
- expect(KnapsackPro).to receive(:tracker).and_return(tracker)
37
- expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
38
-
39
- expect(Kernel).to receive(:exec).with('KNAPSACK_PRO_REGULAR_MODE_ENABLED=true KNAPSACK_PRO_TEST_SUITE_TOKEN=spinach-token bundle exec spinach --custom-arg --features_path fake-test-dir -- features/a.feature features/b.feature')
40
-
41
- subject
42
- end
43
- end
44
-
45
- context 'when test files were not returned by Knapsack Pro API' do
46
- let(:runner) do
47
- instance_double(described_class,
48
- test_files_to_execute_exist?: false)
49
- end
50
-
51
- it "doesn't run tests" do
52
- subject
53
- end
54
- end
55
- end
56
- end