knapsack_pro 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +368 -4
  5. data/bin/knapsack_pro +20 -0
  6. data/circle.yml +2 -0
  7. data/knapsack_pro.gemspec +6 -1
  8. data/lib/knapsack_pro.rb +74 -0
  9. data/lib/knapsack_pro/adapters/base_adapter.rb +30 -0
  10. data/lib/knapsack_pro/adapters/cucumber_adapter.rb +40 -0
  11. data/lib/knapsack_pro/adapters/minitest_adapter.rb +52 -0
  12. data/lib/knapsack_pro/adapters/rspec_adapter.rb +48 -0
  13. data/lib/knapsack_pro/allocator.rb +40 -0
  14. data/lib/knapsack_pro/allocator_builder.rb +40 -0
  15. data/lib/knapsack_pro/client/api/action.rb +17 -0
  16. data/lib/knapsack_pro/client/api/v1/base.rb +15 -0
  17. data/lib/knapsack_pro/client/api/v1/build_distributions.rb +29 -0
  18. data/lib/knapsack_pro/client/api/v1/build_subsets.rb +29 -0
  19. data/lib/knapsack_pro/client/connection.rb +94 -0
  20. data/lib/knapsack_pro/config/ci/base.rb +22 -0
  21. data/lib/knapsack_pro/config/ci/buildkite.rb +27 -0
  22. data/lib/knapsack_pro/config/ci/circle.rb +29 -0
  23. data/lib/knapsack_pro/config/ci/semaphore.rb +28 -0
  24. data/lib/knapsack_pro/config/env.rb +111 -0
  25. data/lib/knapsack_pro/logger_wrapper.rb +15 -0
  26. data/lib/knapsack_pro/presenter.rb +25 -0
  27. data/lib/knapsack_pro/report.rb +20 -0
  28. data/lib/knapsack_pro/repository_adapter_initiator.rb +12 -0
  29. data/lib/knapsack_pro/repository_adapters/base_adapter.rb +14 -0
  30. data/lib/knapsack_pro/repository_adapters/env_adapter.rb +13 -0
  31. data/lib/knapsack_pro/repository_adapters/git_adapter.rb +19 -0
  32. data/lib/knapsack_pro/runners/base_runner.rb +31 -0
  33. data/lib/knapsack_pro/runners/cucumber_runner.rb +16 -0
  34. data/lib/knapsack_pro/runners/minitest_runner.rb +26 -0
  35. data/lib/knapsack_pro/runners/rspec_runner.rb +16 -0
  36. data/lib/knapsack_pro/task_loader.rb +11 -0
  37. data/lib/knapsack_pro/test_file_cleaner.rb +7 -0
  38. data/lib/knapsack_pro/test_file_finder.rb +33 -0
  39. data/lib/knapsack_pro/test_file_pattern.rb +7 -0
  40. data/lib/knapsack_pro/test_file_presenter.rb +11 -0
  41. data/lib/knapsack_pro/test_flat_distributor.rb +84 -0
  42. data/lib/knapsack_pro/tracker.rb +64 -0
  43. data/lib/knapsack_pro/version.rb +1 -1
  44. data/lib/tasks/cucumber.rake +7 -0
  45. data/lib/tasks/minitest.rake +7 -0
  46. data/lib/tasks/rspec.rake +7 -0
  47. data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/invalid_test_suite_token.yml +50 -0
  48. data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/success.yml +52 -0
  49. data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/invalid_test_suite_token.yml +50 -0
  50. data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/success.yml +50 -0
  51. data/spec/integration/api/build_distributions_subset_spec.rb +74 -0
  52. data/spec/integration/api/build_subsets_create_spec.rb +76 -0
  53. data/spec/knapsack_pro/adapters/base_adapter_spec.rb +63 -0
  54. data/spec/knapsack_pro/adapters/cucumber_adapter_spec.rb +71 -0
  55. data/spec/knapsack_pro/adapters/minitest_adapter_spec.rb +107 -0
  56. data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +94 -0
  57. data/spec/knapsack_pro/allocator_builder_spec.rb +45 -0
  58. data/spec/knapsack_pro/allocator_spec.rb +80 -0
  59. data/spec/knapsack_pro/client/api/action_spec.rb +17 -0
  60. data/spec/knapsack_pro/client/api/v1/base_spec.rb +2 -0
  61. data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +35 -0
  62. data/spec/knapsack_pro/client/api/v1/build_subsets_spec.rb +35 -0
  63. data/spec/knapsack_pro/client/connection_spec.rb +138 -0
  64. data/spec/knapsack_pro/config/ci/base_spec.rb +7 -0
  65. data/spec/knapsack_pro/config/ci/buildkite_spec.rb +74 -0
  66. data/spec/knapsack_pro/config/ci/circle_spec.rb +74 -0
  67. data/spec/knapsack_pro/config/ci/semaphore_spec.rb +74 -0
  68. data/spec/knapsack_pro/config/env_spec.rb +368 -0
  69. data/spec/knapsack_pro/logger_wrapper_spec.rb +15 -0
  70. data/spec/knapsack_pro/presenter_spec.rb +57 -0
  71. data/spec/knapsack_pro/report_spec.rb +68 -0
  72. data/spec/knapsack_pro/repository_adapter_initiator_spec.rb +21 -0
  73. data/spec/knapsack_pro/repository_adapters/base_adapter_spec.rb +13 -0
  74. data/spec/knapsack_pro/repository_adapters/env_adapter_spec.rb +27 -0
  75. data/spec/knapsack_pro/repository_adapters/git_adapter_spec.rb +27 -0
  76. data/spec/knapsack_pro/runners/base_runner_spec.rb +61 -0
  77. data/spec/knapsack_pro/runners/cucumber_runner_spec.rb +47 -0
  78. data/spec/knapsack_pro/runners/minitest_runner_spec.rb +34 -0
  79. data/spec/knapsack_pro/runners/rspec_runner_spec.rb +49 -0
  80. data/spec/knapsack_pro/task_loader_spec.rb +14 -0
  81. data/spec/knapsack_pro/test_file_cleaner_spec.rb +11 -0
  82. data/spec/knapsack_pro/test_file_finder_spec.rb +35 -0
  83. data/spec/knapsack_pro/test_file_pattern_spec.rb +23 -0
  84. data/spec/knapsack_pro/test_file_presenter_spec.rb +22 -0
  85. data/spec/knapsack_pro/test_flat_distributor_spec.rb +60 -0
  86. data/spec/knapsack_pro/tracker_spec.rb +102 -0
  87. data/spec/knapsack_pro_spec.rb +56 -0
  88. data/spec/spec_helper.rb +11 -1
  89. data/spec/support/fakes/cucumber.rb +12 -0
  90. data/spec/support/fakes/minitest.rb +12 -0
  91. data/spec/support/shared_examples/adapter.rb +17 -0
  92. data/spec_fake/controllers/users_controller_spec.rb +0 -0
  93. data/spec_fake/models/admin_spec.rb +0 -0
  94. data/spec_fake/models/user_spec.rb +0 -0
  95. data/spec_fake/spec_helper.rb +0 -0
  96. data/test_fake/a_test.rb +0 -0
  97. data/test_fake/b_test.rb +0 -0
  98. metadata +212 -12
  99. data/Gemfile.lock +0 -69
  100. data/spec/knapsack_spec.rb +0 -3
@@ -0,0 +1,11 @@
1
+ describe KnapsackPro::TestFileCleaner do
2
+ describe '.clean' do
3
+ let(:test_file_path) { './models/user_spec.rb' }
4
+
5
+ subject { described_class.clean(test_file_path) }
6
+
7
+ it 'removes ./ from the begining of the test file path' do
8
+ expect(subject).to eq 'models/user_spec.rb'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ describe KnapsackPro::TestFileFinder do
2
+ describe '.call' do
3
+ let(:test_file_pattern) { double }
4
+ let(:test_files) { double }
5
+
6
+ subject { described_class.call(test_file_pattern) }
7
+
8
+ before do
9
+ test_file_finder = instance_double(described_class, call: test_files)
10
+ expect(described_class).to receive(:new).with(test_file_pattern).and_return(test_file_finder)
11
+ end
12
+
13
+ it { should eq test_files }
14
+ end
15
+
16
+ describe '#call' do
17
+ let(:test_file_pattern) { 'spec_fake/**/*_spec.rb' }
18
+
19
+ subject { described_class.new(test_file_pattern).call }
20
+
21
+ it do
22
+ should eq([
23
+ {
24
+ 'path' => 'spec_fake/controllers/users_controller_spec.rb',
25
+ },
26
+ {
27
+ 'path' => 'spec_fake/models/admin_spec.rb',
28
+ },
29
+ {
30
+ 'path' => 'spec_fake/models/user_spec.rb',
31
+ },
32
+ ])
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ describe KnapsackPro::TestFilePattern do
2
+ describe '.call' do
3
+ let(:adapter_class) { KnapsackPro::Adapters::BaseAdapter }
4
+
5
+ subject { described_class.call(adapter_class) }
6
+
7
+ before do
8
+ expect(KnapsackPro::Config::Env).to receive(:test_file_pattern).and_return(env_test_file_pattern)
9
+ end
10
+
11
+ context 'when ENV defined' do
12
+ let(:env_test_file_pattern) { 'spec/**/*_spec.rb' }
13
+
14
+ it { should eq env_test_file_pattern }
15
+ end
16
+
17
+ context 'when ENV not defined' do
18
+ let(:env_test_file_pattern) { nil }
19
+
20
+ it { should eq 'test/**/*_test.rb' }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ describe KnapsackPro::TestFilePresenter do
2
+ describe '.stringify_paths' do
3
+ let(:test_file_paths) { ['a_spec.rb', 'b_spec.rb'] }
4
+
5
+ subject { described_class.stringify_paths(test_file_paths) }
6
+
7
+ it { should eq 'a_spec.rb b_spec.rb' }
8
+ end
9
+
10
+ describe '.paths' do
11
+ let(:test_files) do
12
+ [
13
+ { 'path' => 'a_spec.rb' },
14
+ { 'path' => 'b_spec.rb' },
15
+ ]
16
+ end
17
+
18
+ subject { described_class.paths(test_files) }
19
+
20
+ it { should eq ['a_spec.rb', 'b_spec.rb'] }
21
+ end
22
+ end
@@ -0,0 +1,60 @@
1
+ describe KnapsackPro::TestFlatDistributor do
2
+ let(:test_flat_distributor) { described_class.new(test_files, node_total) }
3
+ let(:node_total) { 2 }
4
+ let(:test_files) do
5
+ [
6
+ { 'path' => 'spec/dir1/a_spec.rb' },
7
+ { 'path' => 'spec/dir2/a_spec.rb' },
8
+ { 'path' => 'spec/dir3/a_spec.rb' },
9
+ { 'path' => 'spec/feature/e_spec.rb' },
10
+ { 'path' => 'spec/models/b_spec.rb' },
11
+ { 'path' => 'spec/feature/c_spec.rb' },
12
+ { 'path' => 'spec/models/d_spec.rb' },
13
+ { 'path' => 'spec/feature/a_spec.rb' },
14
+ { 'path' => 'spec/models/f_spec.rb' },
15
+ { 'path' => 'spec/models/g_spec.rb' },
16
+ { 'path' => 'spec/dir4/h_spec.rb' },
17
+ { 'path' => 'spec/models/i_spec.rb' },
18
+ ]
19
+ end
20
+
21
+ describe '#nodes' do
22
+ subject { test_flat_distributor.nodes }
23
+
24
+ it do
25
+ should eq({
26
+ 0 => [
27
+ { 'path' => 'spec/feature/a_spec.rb' },
28
+ { 'path' => 'spec/feature/e_spec.rb' },
29
+ { 'path' => 'spec/models/d_spec.rb' },
30
+ { 'path' => 'spec/models/g_spec.rb' },
31
+ { 'path' => 'spec/dir1/a_spec.rb' },
32
+ { 'path' => 'spec/dir3/a_spec.rb' },
33
+ ],
34
+ 1 => [
35
+ { 'path' => 'spec/feature/c_spec.rb' },
36
+ { 'path' => 'spec/models/b_spec.rb' },
37
+ { 'path' => 'spec/models/f_spec.rb' },
38
+ { 'path' => 'spec/models/i_spec.rb' },
39
+ { 'path' => 'spec/dir2/a_spec.rb' },
40
+ { 'path' => 'spec/dir4/h_spec.rb' },
41
+ ],
42
+ })
43
+ end
44
+ end
45
+
46
+ describe '#test_files_for_node' do
47
+ subject { test_flat_distributor.test_files_for_node(1) }
48
+
49
+ it do
50
+ should eq([
51
+ { 'path' => 'spec/feature/c_spec.rb' },
52
+ { 'path' => 'spec/models/b_spec.rb' },
53
+ { 'path' => 'spec/models/f_spec.rb' },
54
+ { 'path' => 'spec/models/i_spec.rb' },
55
+ { 'path' => 'spec/dir2/a_spec.rb' },
56
+ { 'path' => 'spec/dir4/h_spec.rb' },
57
+ ])
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,102 @@
1
+ shared_examples 'default trakcer attributes' do
2
+ it { expect(tracker.global_time).to eql 0 }
3
+ it { expect(tracker.test_files_with_time).to eql({}) }
4
+ end
5
+
6
+ describe KnapsackPro::Tracker do
7
+ let(:tracker) { described_class.send(:new) }
8
+
9
+ it_behaves_like 'default trakcer attributes'
10
+
11
+ describe '#current_test_path' do
12
+ subject { tracker.current_test_path }
13
+
14
+ context 'when current_test_path not set' do
15
+ it do
16
+ expect { subject }.to raise_error("current_test_path needs to be set by Knapsack Pro Adapter's bind method")
17
+ end
18
+ end
19
+
20
+ context 'when current_test_path set' do
21
+ context 'when current_test_path has prefix ./' do
22
+ before { tracker.current_test_path = './spec/models/user_spec.rb' }
23
+ it { should eql 'spec/models/user_spec.rb' }
24
+ end
25
+
26
+ context 'when current_test_path has no prefix ./' do
27
+ before { tracker.current_test_path = 'spec/models/user_spec.rb' }
28
+ it { should eql 'spec/models/user_spec.rb' }
29
+ end
30
+ end
31
+ end
32
+
33
+ describe 'track time execution' do
34
+ let(:test_paths) { ['a_spec.rb', 'b_spec.rb'] }
35
+ let(:delta) { 0.02 }
36
+
37
+ shared_examples '#to_a' do
38
+ subject { tracker.to_a }
39
+
40
+ its(:size) { should eq 2 }
41
+ it { expect(subject[0][:path]).to eq 'a_spec.rb' }
42
+ it { expect(subject[0][:time_execution]).to be >= 0 }
43
+ it { expect(subject[1][:path]).to eq 'b_spec.rb' }
44
+ it { expect(subject[1][:time_execution]).to be >= 0 }
45
+ end
46
+
47
+ context 'without Timecop' do
48
+ before do
49
+ test_paths.each_with_index do |test_path, index|
50
+ tracker.current_test_path = test_path
51
+ tracker.start_timer
52
+ sleep index.to_f / 10 + 0.1
53
+ tracker.stop_timer
54
+ end
55
+ end
56
+
57
+ it { expect(tracker.global_time).to be_within(delta).of(0.3) }
58
+ it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
59
+ it { expect(tracker.test_files_with_time['a_spec.rb']).to be_within(delta).of(0.1) }
60
+ it { expect(tracker.test_files_with_time['b_spec.rb']).to be_within(delta).of(0.2) }
61
+ it_behaves_like '#to_a'
62
+ end
63
+
64
+ context "with Timecop - Timecop shouldn't have impact on measured test time" do
65
+ let(:now) { Time.now }
66
+
67
+ before do
68
+ test_paths.each_with_index do |test_path, index|
69
+ Timecop.freeze(now) do
70
+ tracker.current_test_path = test_path
71
+ tracker.start_timer
72
+ end
73
+
74
+ delay = index + 1
75
+ Timecop.freeze(now+delay) do
76
+ tracker.stop_timer
77
+ end
78
+ end
79
+ end
80
+
81
+ it { expect(tracker.global_time).to be > 0 }
82
+ it { expect(tracker.global_time).to be_within(delta).of(0) }
83
+ it { expect(tracker.test_files_with_time.keys.size).to eql 2 }
84
+ it { expect(tracker.test_files_with_time['a_spec.rb']).to be_within(delta).of(0) }
85
+ it { expect(tracker.test_files_with_time['b_spec.rb']).to be_within(delta).of(0) }
86
+ it_behaves_like '#to_a'
87
+ end
88
+ end
89
+
90
+ describe '#reset!' do
91
+ before do
92
+ tracker.current_test_path = 'a_spec.rb'
93
+ tracker.start_timer
94
+ sleep 0.1
95
+ tracker.stop_timer
96
+ expect(tracker.global_time).not_to eql 0
97
+ tracker.reset!
98
+ end
99
+
100
+ it_behaves_like 'default trakcer attributes'
101
+ end
102
+ end
@@ -0,0 +1,56 @@
1
+ describe KnapsackPro do
2
+ describe '.root' do
3
+ subject { described_class.root }
4
+
5
+ it { expect(subject).to match 'knapsack' }
6
+ end
7
+
8
+ describe '.logger' do
9
+ let(:logger_wrapper) { double }
10
+
11
+ subject { described_class.logger }
12
+
13
+ before { described_class.reset_logger! }
14
+ after { described_class.reset_logger! }
15
+
16
+ context 'when default logger' do
17
+ let(:logger) { instance_double(Logger) }
18
+
19
+ before do
20
+ expect(Logger).to receive(:new).with(STDOUT).and_return(logger)
21
+ expect(logger).to receive(:level=).with(Logger::INFO)
22
+ expect(KnapsackPro::LoggerWrapper).to receive(:new).with(logger).and_return(logger_wrapper)
23
+ end
24
+
25
+ it { should eql logger_wrapper }
26
+ end
27
+
28
+ context 'when custom logger' do
29
+ let(:logger) { double('custom logger') }
30
+
31
+ before do
32
+ expect(KnapsackPro::LoggerWrapper).to receive(:new).with(logger).and_return(logger_wrapper)
33
+ described_class.logger = logger
34
+ end
35
+
36
+ it { should eql logger_wrapper }
37
+ end
38
+ end
39
+
40
+ describe '.tracker' do
41
+ subject { described_class.tracker }
42
+
43
+ it { should be_a KnapsackPro::Tracker }
44
+ it { expect(subject.object_id).to eql described_class.tracker.object_id }
45
+ end
46
+
47
+ describe '.load_tasks' do
48
+ let(:task_loader) { instance_double(KnapsackPro::TaskLoader) }
49
+
50
+ it do
51
+ expect(KnapsackPro::TaskLoader).to receive(:new).and_return(task_loader)
52
+ expect(task_loader).to receive(:load_tasks)
53
+ described_class.load_tasks
54
+ end
55
+ end
56
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,22 @@
1
+ require 'rspec/its'
2
+
1
3
  require 'timecop'
2
4
  Timecop.safe_mode = true
3
5
 
4
6
  require 'codeclimate-test-reporter'
5
7
  CodeClimate::TestReporter.start
6
8
 
9
+ require 'vcr'
10
+ require 'webmock/rspec'
11
+ VCR.configure do |config|
12
+ config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
13
+ config.hook_into :webmock # or :fakeweb
14
+ config.ignore_hosts 'codeclimate.com'
15
+ end
16
+
7
17
  require 'knapsack_pro'
8
18
 
9
- Dir["#{KnapsackPro.root}/spec/support/**/*.rb"].each { |f| require f }
19
+ Dir["#{KnapsackPro.root}/spec/{support,fixtures}/**/*.rb"].each { |f| require f }
10
20
 
11
21
  RSpec.configure do |config|
12
22
  config.order = :random
@@ -0,0 +1,12 @@
1
+ # https://github.com/cucumber/cucumber/blob/master/lib/cucumber/rb_support/rb_dsl.rb
2
+ module Cucumber
3
+ module RbSupport
4
+ class RbDsl
5
+ class << self
6
+ def register_rb_hook(phase, tag_names, proc)
7
+ proc.call
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # https://github.com/seattlerb/minitest/blob/master/lib/minitest/test.rb
2
+ module Minitest
3
+ class Test
4
+ def before_setup; end
5
+ def after_teardown; end
6
+ end
7
+
8
+ # https://github.com/seattlerb/minitest/blob/master/lib/minitest.rb
9
+ def self.after_run(&block)
10
+ block.call
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples 'adapter' do
2
+ describe '#bind_time_tracker' do
3
+ it do
4
+ expect {
5
+ subject.bind_time_tracker
6
+ }.not_to raise_error
7
+ end
8
+ end
9
+
10
+ describe '#bind_save_report' do
11
+ it do
12
+ expect {
13
+ subject.bind_save_report
14
+ }.not_to raise_error
15
+ end
16
+ end
17
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knapsack_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ArturT
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-21 00:00:00.000000000 Z
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.8
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.8
41
+ - !ruby/object:Gem::Dependency
42
+ name: timecop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +86,20 @@ dependencies:
58
86
  - - ">="
59
87
  - !ruby/object:Gem::Version
60
88
  version: 2.0.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec-its
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.2'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.2'
61
103
  - !ruby/object:Gem::Dependency
62
104
  name: cucumber
63
105
  requirement: !ruby/object:Gem::Requirement
@@ -73,19 +115,19 @@ dependencies:
73
115
  - !ruby/object:Gem::Version
74
116
  version: '1.3'
75
117
  - !ruby/object:Gem::Dependency
76
- name: timecop
118
+ name: minitest
77
119
  requirement: !ruby/object:Gem::Requirement
78
120
  requirements:
79
- - - "~>"
121
+ - - ">="
80
122
  - !ruby/object:Gem::Version
81
- version: '0'
123
+ version: 5.0.0
82
124
  type: :development
83
125
  prerelease: false
84
126
  version_requirements: !ruby/object:Gem::Requirement
85
127
  requirements:
86
- - - "~>"
128
+ - - ">="
87
129
  - !ruby/object:Gem::Version
88
- version: '0'
130
+ version: 5.0.0
89
131
  - !ruby/object:Gem::Dependency
90
132
  name: codeclimate-test-reporter
91
133
  requirement: !ruby/object:Gem::Requirement
@@ -114,11 +156,40 @@ dependencies:
114
156
  - - "~>"
115
157
  - !ruby/object:Gem::Version
116
158
  version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: vcr
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '2.9'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '2.9'
173
+ - !ruby/object:Gem::Dependency
174
+ name: webmock
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '1.21'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '1.21'
117
187
  description: Parallel tests across CI server nodes based on each test file's time
118
188
  execution. It uses KnapsackPro.com API.
119
189
  email:
120
190
  - arturtrzop@gmail.com
121
- executables: []
191
+ executables:
192
+ - knapsack_pro
122
193
  extensions: []
123
194
  extra_rdoc_files: []
124
195
  files:
@@ -126,17 +197,103 @@ files:
126
197
  - ".rspec"
127
198
  - CHANGELOG.md
128
199
  - Gemfile
129
- - Gemfile.lock
130
200
  - LICENSE
131
201
  - README.md
132
202
  - Rakefile
203
+ - bin/knapsack_pro
133
204
  - circle.yml
134
205
  - knapsack_pro.gemspec
135
206
  - lib/knapsack_pro.rb
207
+ - lib/knapsack_pro/adapters/base_adapter.rb
208
+ - lib/knapsack_pro/adapters/cucumber_adapter.rb
209
+ - lib/knapsack_pro/adapters/minitest_adapter.rb
210
+ - lib/knapsack_pro/adapters/rspec_adapter.rb
211
+ - lib/knapsack_pro/allocator.rb
212
+ - lib/knapsack_pro/allocator_builder.rb
213
+ - lib/knapsack_pro/client/api/action.rb
214
+ - lib/knapsack_pro/client/api/v1/base.rb
215
+ - lib/knapsack_pro/client/api/v1/build_distributions.rb
216
+ - lib/knapsack_pro/client/api/v1/build_subsets.rb
217
+ - lib/knapsack_pro/client/connection.rb
218
+ - lib/knapsack_pro/config/ci/base.rb
219
+ - lib/knapsack_pro/config/ci/buildkite.rb
220
+ - lib/knapsack_pro/config/ci/circle.rb
221
+ - lib/knapsack_pro/config/ci/semaphore.rb
222
+ - lib/knapsack_pro/config/env.rb
223
+ - lib/knapsack_pro/logger_wrapper.rb
224
+ - lib/knapsack_pro/presenter.rb
225
+ - lib/knapsack_pro/report.rb
226
+ - lib/knapsack_pro/repository_adapter_initiator.rb
227
+ - lib/knapsack_pro/repository_adapters/base_adapter.rb
228
+ - lib/knapsack_pro/repository_adapters/env_adapter.rb
229
+ - lib/knapsack_pro/repository_adapters/git_adapter.rb
230
+ - lib/knapsack_pro/runners/base_runner.rb
231
+ - lib/knapsack_pro/runners/cucumber_runner.rb
232
+ - lib/knapsack_pro/runners/minitest_runner.rb
233
+ - lib/knapsack_pro/runners/rspec_runner.rb
234
+ - lib/knapsack_pro/task_loader.rb
235
+ - lib/knapsack_pro/test_file_cleaner.rb
236
+ - lib/knapsack_pro/test_file_finder.rb
237
+ - lib/knapsack_pro/test_file_pattern.rb
238
+ - lib/knapsack_pro/test_file_presenter.rb
239
+ - lib/knapsack_pro/test_flat_distributor.rb
240
+ - lib/knapsack_pro/tracker.rb
136
241
  - lib/knapsack_pro/version.rb
137
- - spec/knapsack_spec.rb
242
+ - lib/tasks/cucumber.rake
243
+ - lib/tasks/minitest.rake
244
+ - lib/tasks/rspec.rake
245
+ - spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/invalid_test_suite_token.yml
246
+ - spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/success.yml
247
+ - spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/invalid_test_suite_token.yml
248
+ - spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/success.yml
249
+ - spec/integration/api/build_distributions_subset_spec.rb
250
+ - spec/integration/api/build_subsets_create_spec.rb
251
+ - spec/knapsack_pro/adapters/base_adapter_spec.rb
252
+ - spec/knapsack_pro/adapters/cucumber_adapter_spec.rb
253
+ - spec/knapsack_pro/adapters/minitest_adapter_spec.rb
254
+ - spec/knapsack_pro/adapters/rspec_adapter_spec.rb
255
+ - spec/knapsack_pro/allocator_builder_spec.rb
256
+ - spec/knapsack_pro/allocator_spec.rb
257
+ - spec/knapsack_pro/client/api/action_spec.rb
258
+ - spec/knapsack_pro/client/api/v1/base_spec.rb
259
+ - spec/knapsack_pro/client/api/v1/build_distributions_spec.rb
260
+ - spec/knapsack_pro/client/api/v1/build_subsets_spec.rb
261
+ - spec/knapsack_pro/client/connection_spec.rb
262
+ - spec/knapsack_pro/config/ci/base_spec.rb
263
+ - spec/knapsack_pro/config/ci/buildkite_spec.rb
264
+ - spec/knapsack_pro/config/ci/circle_spec.rb
265
+ - spec/knapsack_pro/config/ci/semaphore_spec.rb
266
+ - spec/knapsack_pro/config/env_spec.rb
267
+ - spec/knapsack_pro/logger_wrapper_spec.rb
268
+ - spec/knapsack_pro/presenter_spec.rb
269
+ - spec/knapsack_pro/report_spec.rb
270
+ - spec/knapsack_pro/repository_adapter_initiator_spec.rb
271
+ - spec/knapsack_pro/repository_adapters/base_adapter_spec.rb
272
+ - spec/knapsack_pro/repository_adapters/env_adapter_spec.rb
273
+ - spec/knapsack_pro/repository_adapters/git_adapter_spec.rb
274
+ - spec/knapsack_pro/runners/base_runner_spec.rb
275
+ - spec/knapsack_pro/runners/cucumber_runner_spec.rb
276
+ - spec/knapsack_pro/runners/minitest_runner_spec.rb
277
+ - spec/knapsack_pro/runners/rspec_runner_spec.rb
278
+ - spec/knapsack_pro/task_loader_spec.rb
279
+ - spec/knapsack_pro/test_file_cleaner_spec.rb
280
+ - spec/knapsack_pro/test_file_finder_spec.rb
281
+ - spec/knapsack_pro/test_file_pattern_spec.rb
282
+ - spec/knapsack_pro/test_file_presenter_spec.rb
283
+ - spec/knapsack_pro/test_flat_distributor_spec.rb
284
+ - spec/knapsack_pro/tracker_spec.rb
285
+ - spec/knapsack_pro_spec.rb
138
286
  - spec/spec_helper.rb
139
287
  - spec/support/.gitkeep
288
+ - spec/support/fakes/cucumber.rb
289
+ - spec/support/fakes/minitest.rb
290
+ - spec/support/shared_examples/adapter.rb
291
+ - spec_fake/controllers/users_controller_spec.rb
292
+ - spec_fake/models/admin_spec.rb
293
+ - spec_fake/models/user_spec.rb
294
+ - spec_fake/spec_helper.rb
295
+ - test_fake/a_test.rb
296
+ - test_fake/b_test.rb
140
297
  homepage: https://github.com/KnapsackPro/knapsack_pro-ruby
141
298
  licenses:
142
299
  - LGPLv3
@@ -157,12 +314,55 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
314
  version: '0'
158
315
  requirements: []
159
316
  rubyforge_project:
160
- rubygems_version: 2.4.6
317
+ rubygems_version: 2.4.5.1
161
318
  signing_key:
162
319
  specification_version: 4
163
320
  summary: Knapsack Pro splits tests across CI nodes and makes sure that tests will
164
321
  run comparable time on each node.
165
322
  test_files:
166
- - spec/knapsack_spec.rb
323
+ - spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/invalid_test_suite_token.yml
324
+ - spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/success.yml
325
+ - spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/invalid_test_suite_token.yml
326
+ - spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/success.yml
327
+ - spec/integration/api/build_distributions_subset_spec.rb
328
+ - spec/integration/api/build_subsets_create_spec.rb
329
+ - spec/knapsack_pro/adapters/base_adapter_spec.rb
330
+ - spec/knapsack_pro/adapters/cucumber_adapter_spec.rb
331
+ - spec/knapsack_pro/adapters/minitest_adapter_spec.rb
332
+ - spec/knapsack_pro/adapters/rspec_adapter_spec.rb
333
+ - spec/knapsack_pro/allocator_builder_spec.rb
334
+ - spec/knapsack_pro/allocator_spec.rb
335
+ - spec/knapsack_pro/client/api/action_spec.rb
336
+ - spec/knapsack_pro/client/api/v1/base_spec.rb
337
+ - spec/knapsack_pro/client/api/v1/build_distributions_spec.rb
338
+ - spec/knapsack_pro/client/api/v1/build_subsets_spec.rb
339
+ - spec/knapsack_pro/client/connection_spec.rb
340
+ - spec/knapsack_pro/config/ci/base_spec.rb
341
+ - spec/knapsack_pro/config/ci/buildkite_spec.rb
342
+ - spec/knapsack_pro/config/ci/circle_spec.rb
343
+ - spec/knapsack_pro/config/ci/semaphore_spec.rb
344
+ - spec/knapsack_pro/config/env_spec.rb
345
+ - spec/knapsack_pro/logger_wrapper_spec.rb
346
+ - spec/knapsack_pro/presenter_spec.rb
347
+ - spec/knapsack_pro/report_spec.rb
348
+ - spec/knapsack_pro/repository_adapter_initiator_spec.rb
349
+ - spec/knapsack_pro/repository_adapters/base_adapter_spec.rb
350
+ - spec/knapsack_pro/repository_adapters/env_adapter_spec.rb
351
+ - spec/knapsack_pro/repository_adapters/git_adapter_spec.rb
352
+ - spec/knapsack_pro/runners/base_runner_spec.rb
353
+ - spec/knapsack_pro/runners/cucumber_runner_spec.rb
354
+ - spec/knapsack_pro/runners/minitest_runner_spec.rb
355
+ - spec/knapsack_pro/runners/rspec_runner_spec.rb
356
+ - spec/knapsack_pro/task_loader_spec.rb
357
+ - spec/knapsack_pro/test_file_cleaner_spec.rb
358
+ - spec/knapsack_pro/test_file_finder_spec.rb
359
+ - spec/knapsack_pro/test_file_pattern_spec.rb
360
+ - spec/knapsack_pro/test_file_presenter_spec.rb
361
+ - spec/knapsack_pro/test_flat_distributor_spec.rb
362
+ - spec/knapsack_pro/tracker_spec.rb
363
+ - spec/knapsack_pro_spec.rb
167
364
  - spec/spec_helper.rb
168
365
  - spec/support/.gitkeep
366
+ - spec/support/fakes/cucumber.rb
367
+ - spec/support/fakes/minitest.rb
368
+ - spec/support/shared_examples/adapter.rb