knapsack_pro 0.0.1 → 0.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -3
- data/CHANGELOG.md +4 -0
- data/README.md +368 -4
- data/bin/knapsack_pro +20 -0
- data/circle.yml +2 -0
- data/knapsack_pro.gemspec +6 -1
- data/lib/knapsack_pro.rb +74 -0
- data/lib/knapsack_pro/adapters/base_adapter.rb +30 -0
- data/lib/knapsack_pro/adapters/cucumber_adapter.rb +40 -0
- data/lib/knapsack_pro/adapters/minitest_adapter.rb +52 -0
- data/lib/knapsack_pro/adapters/rspec_adapter.rb +48 -0
- data/lib/knapsack_pro/allocator.rb +40 -0
- data/lib/knapsack_pro/allocator_builder.rb +40 -0
- data/lib/knapsack_pro/client/api/action.rb +17 -0
- data/lib/knapsack_pro/client/api/v1/base.rb +15 -0
- data/lib/knapsack_pro/client/api/v1/build_distributions.rb +29 -0
- data/lib/knapsack_pro/client/api/v1/build_subsets.rb +29 -0
- data/lib/knapsack_pro/client/connection.rb +94 -0
- data/lib/knapsack_pro/config/ci/base.rb +22 -0
- data/lib/knapsack_pro/config/ci/buildkite.rb +27 -0
- data/lib/knapsack_pro/config/ci/circle.rb +29 -0
- data/lib/knapsack_pro/config/ci/semaphore.rb +28 -0
- data/lib/knapsack_pro/config/env.rb +111 -0
- data/lib/knapsack_pro/logger_wrapper.rb +15 -0
- data/lib/knapsack_pro/presenter.rb +25 -0
- data/lib/knapsack_pro/report.rb +20 -0
- data/lib/knapsack_pro/repository_adapter_initiator.rb +12 -0
- data/lib/knapsack_pro/repository_adapters/base_adapter.rb +14 -0
- data/lib/knapsack_pro/repository_adapters/env_adapter.rb +13 -0
- data/lib/knapsack_pro/repository_adapters/git_adapter.rb +19 -0
- data/lib/knapsack_pro/runners/base_runner.rb +31 -0
- data/lib/knapsack_pro/runners/cucumber_runner.rb +16 -0
- data/lib/knapsack_pro/runners/minitest_runner.rb +26 -0
- data/lib/knapsack_pro/runners/rspec_runner.rb +16 -0
- data/lib/knapsack_pro/task_loader.rb +11 -0
- data/lib/knapsack_pro/test_file_cleaner.rb +7 -0
- data/lib/knapsack_pro/test_file_finder.rb +33 -0
- data/lib/knapsack_pro/test_file_pattern.rb +7 -0
- data/lib/knapsack_pro/test_file_presenter.rb +11 -0
- data/lib/knapsack_pro/test_flat_distributor.rb +84 -0
- data/lib/knapsack_pro/tracker.rb +64 -0
- data/lib/knapsack_pro/version.rb +1 -1
- data/lib/tasks/cucumber.rake +7 -0
- data/lib/tasks/minitest.rake +7 -0
- data/lib/tasks/rspec.rake +7 -0
- data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/invalid_test_suite_token.yml +50 -0
- data/spec/fixtures/vcr_cassettes/api/v1/build_distributions/subset/success.yml +52 -0
- data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/invalid_test_suite_token.yml +50 -0
- data/spec/fixtures/vcr_cassettes/api/v1/build_subsets/create/success.yml +50 -0
- data/spec/integration/api/build_distributions_subset_spec.rb +74 -0
- data/spec/integration/api/build_subsets_create_spec.rb +76 -0
- data/spec/knapsack_pro/adapters/base_adapter_spec.rb +63 -0
- data/spec/knapsack_pro/adapters/cucumber_adapter_spec.rb +71 -0
- data/spec/knapsack_pro/adapters/minitest_adapter_spec.rb +107 -0
- data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +94 -0
- data/spec/knapsack_pro/allocator_builder_spec.rb +45 -0
- data/spec/knapsack_pro/allocator_spec.rb +80 -0
- data/spec/knapsack_pro/client/api/action_spec.rb +17 -0
- data/spec/knapsack_pro/client/api/v1/base_spec.rb +2 -0
- data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +35 -0
- data/spec/knapsack_pro/client/api/v1/build_subsets_spec.rb +35 -0
- data/spec/knapsack_pro/client/connection_spec.rb +138 -0
- data/spec/knapsack_pro/config/ci/base_spec.rb +7 -0
- data/spec/knapsack_pro/config/ci/buildkite_spec.rb +74 -0
- data/spec/knapsack_pro/config/ci/circle_spec.rb +74 -0
- data/spec/knapsack_pro/config/ci/semaphore_spec.rb +74 -0
- data/spec/knapsack_pro/config/env_spec.rb +368 -0
- data/spec/knapsack_pro/logger_wrapper_spec.rb +15 -0
- data/spec/knapsack_pro/presenter_spec.rb +57 -0
- data/spec/knapsack_pro/report_spec.rb +68 -0
- data/spec/knapsack_pro/repository_adapter_initiator_spec.rb +21 -0
- data/spec/knapsack_pro/repository_adapters/base_adapter_spec.rb +13 -0
- data/spec/knapsack_pro/repository_adapters/env_adapter_spec.rb +27 -0
- data/spec/knapsack_pro/repository_adapters/git_adapter_spec.rb +27 -0
- data/spec/knapsack_pro/runners/base_runner_spec.rb +61 -0
- data/spec/knapsack_pro/runners/cucumber_runner_spec.rb +47 -0
- data/spec/knapsack_pro/runners/minitest_runner_spec.rb +34 -0
- data/spec/knapsack_pro/runners/rspec_runner_spec.rb +49 -0
- data/spec/knapsack_pro/task_loader_spec.rb +14 -0
- data/spec/knapsack_pro/test_file_cleaner_spec.rb +11 -0
- data/spec/knapsack_pro/test_file_finder_spec.rb +35 -0
- data/spec/knapsack_pro/test_file_pattern_spec.rb +23 -0
- data/spec/knapsack_pro/test_file_presenter_spec.rb +22 -0
- data/spec/knapsack_pro/test_flat_distributor_spec.rb +60 -0
- data/spec/knapsack_pro/tracker_spec.rb +102 -0
- data/spec/knapsack_pro_spec.rb +56 -0
- data/spec/spec_helper.rb +11 -1
- data/spec/support/fakes/cucumber.rb +12 -0
- data/spec/support/fakes/minitest.rb +12 -0
- data/spec/support/shared_examples/adapter.rb +17 -0
- data/spec_fake/controllers/users_controller_spec.rb +0 -0
- data/spec_fake/models/admin_spec.rb +0 -0
- data/spec_fake/models/user_spec.rb +0 -0
- data/spec_fake/spec_helper.rb +0 -0
- data/test_fake/a_test.rb +0 -0
- data/test_fake/b_test.rb +0 -0
- metadata +212 -12
- data/Gemfile.lock +0 -69
- data/spec/knapsack_spec.rb +0 -3
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
describe KnapsackPro::Config::CI::Buildkite do
|
|
2
|
+
let(:env) { {} }
|
|
3
|
+
|
|
4
|
+
before do
|
|
5
|
+
stub_const('ENV', env)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it { should be_kind_of KnapsackPro::Config::CI::Base }
|
|
9
|
+
|
|
10
|
+
describe '#node_total' do
|
|
11
|
+
subject { described_class.new.node_total }
|
|
12
|
+
|
|
13
|
+
context 'when environment exists' do
|
|
14
|
+
let(:env) { { 'BUILDKITE_PARALLEL_JOB_COUNT' => 4 } }
|
|
15
|
+
it { should eql 4 }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when environment doesn't exist" do
|
|
19
|
+
it { should be nil }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#node_index' do
|
|
24
|
+
subject { described_class.new.node_index }
|
|
25
|
+
|
|
26
|
+
context 'when environment exists' do
|
|
27
|
+
let(:env) { { 'BUILDKITE_PARALLEL_JOB' => 3 } }
|
|
28
|
+
it { should eql 3 }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when environment doesn't exist" do
|
|
32
|
+
it { should be nil }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '#commit_hash' do
|
|
37
|
+
subject { described_class.new.commit_hash }
|
|
38
|
+
|
|
39
|
+
context 'when environment exists' do
|
|
40
|
+
let(:env) { { 'BUILDKITE_COMMIT' => '3fa64859337f6e56409d49f865d13fd7' } }
|
|
41
|
+
it { should eql '3fa64859337f6e56409d49f865d13fd7' }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "when environment doesn't exist" do
|
|
45
|
+
it { should be nil }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#branch' do
|
|
50
|
+
subject { described_class.new.branch }
|
|
51
|
+
|
|
52
|
+
context 'when environment exists' do
|
|
53
|
+
let(:env) { { 'BUILDKITE_BRANCH' => 'master' } }
|
|
54
|
+
it { should eql 'master' }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when environment doesn't exist" do
|
|
58
|
+
it { should be nil }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe '#project_dir' do
|
|
63
|
+
subject { described_class.new.project_dir }
|
|
64
|
+
|
|
65
|
+
context 'when environment exists' do
|
|
66
|
+
let(:env) { { 'BUILDKITE_BUILD_CHECKOUT_PATH' => '/home/user/knapsack_pro-ruby' } }
|
|
67
|
+
it { should eql '/home/user/knapsack_pro-ruby' }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when environment doesn't exist" do
|
|
71
|
+
it { should be nil }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
describe KnapsackPro::Config::CI::Circle do
|
|
2
|
+
let(:env) { {} }
|
|
3
|
+
|
|
4
|
+
before do
|
|
5
|
+
stub_const('ENV', env)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it { should be_kind_of KnapsackPro::Config::CI::Base }
|
|
9
|
+
|
|
10
|
+
describe '#node_total' do
|
|
11
|
+
subject { described_class.new.node_total }
|
|
12
|
+
|
|
13
|
+
context 'when environment exists' do
|
|
14
|
+
let(:env) { { 'CIRCLE_NODE_TOTAL' => 4 } }
|
|
15
|
+
it { should eql 4 }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when environment doesn't exist" do
|
|
19
|
+
it { should be nil }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#node_index' do
|
|
24
|
+
subject { described_class.new.node_index }
|
|
25
|
+
|
|
26
|
+
context 'when environment exists' do
|
|
27
|
+
let(:env) { { 'CIRCLE_NODE_INDEX' => 3 } }
|
|
28
|
+
it { should eql 3 }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when environment doesn't exist" do
|
|
32
|
+
it { should be nil }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '#commit_hash' do
|
|
37
|
+
subject { described_class.new.commit_hash }
|
|
38
|
+
|
|
39
|
+
context 'when environment exists' do
|
|
40
|
+
let(:env) { { 'CIRCLE_SHA1' => '3fa64859337f6e56409d49f865d13fd7' } }
|
|
41
|
+
it { should eql '3fa64859337f6e56409d49f865d13fd7' }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "when environment doesn't exist" do
|
|
45
|
+
it { should be nil }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#branch' do
|
|
50
|
+
subject { described_class.new.branch }
|
|
51
|
+
|
|
52
|
+
context 'when environment exists' do
|
|
53
|
+
let(:env) { { 'CIRCLE_BRANCH' => 'master' } }
|
|
54
|
+
it { should eql 'master' }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when environment doesn't exist" do
|
|
58
|
+
it { should be nil }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe '#project_dir' do
|
|
63
|
+
subject { described_class.new.project_dir }
|
|
64
|
+
|
|
65
|
+
context 'when environment exists' do
|
|
66
|
+
let(:env) { { 'CIRCLE_PROJECT_REPONAME' => 'knapsack_pro-ruby' } }
|
|
67
|
+
it { should eql '/home/ubuntu/knapsack_pro-ruby' }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when environment doesn't exist" do
|
|
71
|
+
it { should be nil }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
describe KnapsackPro::Config::CI::Semaphore do
|
|
2
|
+
let(:env) { {} }
|
|
3
|
+
|
|
4
|
+
before do
|
|
5
|
+
stub_const('ENV', env)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it { should be_kind_of KnapsackPro::Config::CI::Base }
|
|
9
|
+
|
|
10
|
+
describe '#node_total' do
|
|
11
|
+
subject { described_class.new.node_total }
|
|
12
|
+
|
|
13
|
+
context 'when environment exists' do
|
|
14
|
+
let(:env) { { 'SEMAPHORE_THREAD_COUNT' => 4 } }
|
|
15
|
+
it { should eql 4 }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when environment doesn't exist" do
|
|
19
|
+
it { should be nil }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#node_index' do
|
|
24
|
+
subject { described_class.new.node_index }
|
|
25
|
+
|
|
26
|
+
context 'when environment exists' do
|
|
27
|
+
let(:env) { { 'SEMAPHORE_CURRENT_THREAD' => 4 } }
|
|
28
|
+
it { should eql 3 }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when environment doesn't exist" do
|
|
32
|
+
it { should be nil }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe '#commit_hash' do
|
|
37
|
+
subject { described_class.new.commit_hash }
|
|
38
|
+
|
|
39
|
+
context 'when environment exists' do
|
|
40
|
+
let(:env) { { 'REVISION' => '3fa64859337f6e56409d49f865d13fd7' } }
|
|
41
|
+
it { should eql '3fa64859337f6e56409d49f865d13fd7' }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "when environment doesn't exist" do
|
|
45
|
+
it { should be nil }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#branch' do
|
|
50
|
+
subject { described_class.new.branch }
|
|
51
|
+
|
|
52
|
+
context 'when environment exists' do
|
|
53
|
+
let(:env) { { 'BRANCH_NAME' => 'master' } }
|
|
54
|
+
it { should eql 'master' }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when environment doesn't exist" do
|
|
58
|
+
it { should be nil }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe '#project_dir' do
|
|
63
|
+
subject { described_class.new.project_dir }
|
|
64
|
+
|
|
65
|
+
context 'when environment exists' do
|
|
66
|
+
let(:env) { { 'SEMAPHORE_PROJECT_DIR' => '/home/runner/knapsack_pro-ruby' } }
|
|
67
|
+
it { should eql '/home/runner/knapsack_pro-ruby' }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when environment doesn't exist" do
|
|
71
|
+
it { should be nil }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
describe KnapsackPro::Config::Env do
|
|
2
|
+
before { stub_const("ENV", {}) }
|
|
3
|
+
|
|
4
|
+
describe '.ci_node_total' do
|
|
5
|
+
subject { described_class.ci_node_total }
|
|
6
|
+
|
|
7
|
+
context 'when ENV exists' do
|
|
8
|
+
context 'when KNAPSACK_PRO_CI_NODE_TOTAL has value' do
|
|
9
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_TOTAL' => '5' }) }
|
|
10
|
+
it { should eq 5 }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context 'when CI environment has value' do
|
|
14
|
+
before do
|
|
15
|
+
expect(described_class).to receive(:ci_env_for).with(:node_total).and_return(4)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it { should eq 4 }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "when ENV doesn't exist" do
|
|
23
|
+
it { should eq 1 }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.ci_node_index' do
|
|
28
|
+
subject { described_class.ci_node_index }
|
|
29
|
+
|
|
30
|
+
context 'when ENV exists' do
|
|
31
|
+
context 'when KNAPSACK_PRO_CI_NODE_INDEX has value' do
|
|
32
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_CI_NODE_INDEX' => '3' }) }
|
|
33
|
+
it { should eq 3 }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context 'when CI environment has value' do
|
|
37
|
+
before do
|
|
38
|
+
expect(described_class).to receive(:ci_env_for).with(:node_index).and_return(2)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it { should eq 2 }
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when ENV doesn't exist" do
|
|
46
|
+
it { should eq 0 }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '.commit_hash' do
|
|
51
|
+
subject { described_class.commit_hash }
|
|
52
|
+
|
|
53
|
+
context 'when ENV exists' do
|
|
54
|
+
context 'when KNAPSACK_PRO_COMMIT_HASH has value' do
|
|
55
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_COMMIT_HASH' => '3fa64859337f6e56409d49f865d13fd7' }) }
|
|
56
|
+
it { should eq '3fa64859337f6e56409d49f865d13fd7' }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context 'when CI environment has value' do
|
|
60
|
+
before do
|
|
61
|
+
expect(described_class).to receive(:ci_env_for).with(:commit_hash).and_return('fe61a08118d0d52e97c38666eba1eaf3')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it { should eq 'fe61a08118d0d52e97c38666eba1eaf3' }
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "when ENV doesn't exist" do
|
|
69
|
+
it { should be nil }
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe '.branch' do
|
|
74
|
+
subject { described_class.branch }
|
|
75
|
+
|
|
76
|
+
context 'when ENV exists' do
|
|
77
|
+
context 'when KNAPSACK_PRO_BRANCH has value' do
|
|
78
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_BRANCH' => 'master' }) }
|
|
79
|
+
it { should eq 'master' }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when CI environment has value' do
|
|
83
|
+
before do
|
|
84
|
+
expect(described_class).to receive(:ci_env_for).with(:branch).and_return('feature-branch')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it { should eq 'feature-branch' }
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context "when ENV doesn't exist" do
|
|
92
|
+
it { should be nil }
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe '.project_dir' do
|
|
97
|
+
subject { described_class.project_dir }
|
|
98
|
+
|
|
99
|
+
context 'when ENV exists' do
|
|
100
|
+
context 'when KNAPSACK_PRO_PROJECT_DIR has value' do
|
|
101
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_PROJECT_DIR' => '/home/user/myapp' }) }
|
|
102
|
+
it { should eq '/home/user/myapp' }
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context 'when CI environment has value' do
|
|
106
|
+
before do
|
|
107
|
+
expect(described_class).to receive(:ci_env_for).with(:project_dir).and_return('/home/runner/myapp')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it { should eq '/home/runner/myapp' }
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "when ENV doesn't exist" do
|
|
115
|
+
it { should be nil }
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe '.test_file_pattern' do
|
|
120
|
+
subject { described_class.test_file_pattern }
|
|
121
|
+
|
|
122
|
+
context 'when ENV exists' do
|
|
123
|
+
let(:test_file_pattern) { 'custom_spec/**/*_spec.rb' }
|
|
124
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_TEST_FILE_PATTERN' => test_file_pattern }) }
|
|
125
|
+
it { should eq test_file_pattern }
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
context "when ENV doesn't exist" do
|
|
129
|
+
it { should be_nil }
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe '.repository_adapter' do
|
|
134
|
+
subject { described_class.repository_adapter }
|
|
135
|
+
|
|
136
|
+
context 'when ENV exists' do
|
|
137
|
+
let(:repository_adapter) { 'git' }
|
|
138
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_REPOSITORY_ADAPTER' => repository_adapter }) }
|
|
139
|
+
it { should eq repository_adapter }
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context "when ENV doesn't exist" do
|
|
143
|
+
it { should be_nil }
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe '.recording_enabled' do
|
|
148
|
+
subject { described_class.recording_enabled }
|
|
149
|
+
|
|
150
|
+
context 'when ENV exists' do
|
|
151
|
+
let(:recording_enabled) { 'true' }
|
|
152
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_RECORDING_ENABLED' => recording_enabled }) }
|
|
153
|
+
it { should eq recording_enabled }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "when ENV doesn't exist" do
|
|
157
|
+
it { should be_nil }
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
describe '.recording_enabled?' do
|
|
162
|
+
subject { described_class.recording_enabled? }
|
|
163
|
+
|
|
164
|
+
before do
|
|
165
|
+
expect(described_class).to receive(:recording_enabled).and_return(recording_enabled)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context 'when enabled' do
|
|
169
|
+
let(:recording_enabled) { 'true' }
|
|
170
|
+
|
|
171
|
+
it { should be true }
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
context 'when disabled' do
|
|
175
|
+
let(:recording_enabled) { nil }
|
|
176
|
+
|
|
177
|
+
it { should be false }
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
describe '.endpoint' do
|
|
182
|
+
subject { described_class.endpoint }
|
|
183
|
+
|
|
184
|
+
context 'when ENV exists' do
|
|
185
|
+
let(:endpoint) { 'http://api-custom-url.knapsackpro.com' }
|
|
186
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_ENDPOINT' => endpoint }) }
|
|
187
|
+
it { should eq endpoint }
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
context "when ENV doesn't exist" do
|
|
191
|
+
context 'when default mode' do
|
|
192
|
+
it { should eq 'http://api.knapsackpro.com' }
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
context 'when development mode' do
|
|
196
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'development' }) }
|
|
197
|
+
it { should eq 'http://api.knapsackpro.dev:3000' }
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context 'when test mode' do
|
|
201
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'test' }) }
|
|
202
|
+
it { should eq 'http://api-staging.knapsackpro.com' }
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
context 'when production mode' do
|
|
206
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'production' }) }
|
|
207
|
+
it { should eq 'http://api.knapsackpro.com' }
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
context 'when unknown mode' do
|
|
211
|
+
before do
|
|
212
|
+
expect(described_class).to receive(:mode).and_return(:fake)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it do
|
|
216
|
+
expect { subject }.to raise_error('Missing environment variable KNAPSACK_PRO_ENDPOINT')
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe '.test_suite_token' do
|
|
223
|
+
subject { described_class.test_suite_token }
|
|
224
|
+
|
|
225
|
+
context 'when ENV exists' do
|
|
226
|
+
let(:token) { 'xyz' }
|
|
227
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_TEST_SUITE_TOKEN' => 'xyz' }) }
|
|
228
|
+
it { should eq token }
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
context "when ENV doesn't exist" do
|
|
232
|
+
it do
|
|
233
|
+
expect { subject }.to raise_error('Missing environment variable KNAPSACK_PRO_TEST_SUITE_TOKEN')
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
describe '.test_suite_token_rspec' do
|
|
239
|
+
subject { described_class.test_suite_token_rspec }
|
|
240
|
+
|
|
241
|
+
context 'when ENV exists' do
|
|
242
|
+
let(:test_suite_token_rspec) { 'rspec-token' }
|
|
243
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC' => test_suite_token_rspec }) }
|
|
244
|
+
it { should eq test_suite_token_rspec }
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
context "when ENV doesn't exist" do
|
|
248
|
+
it { should be_nil }
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
describe '.test_suite_token_minitest' do
|
|
253
|
+
subject { described_class.test_suite_token_minitest }
|
|
254
|
+
|
|
255
|
+
context 'when ENV exists' do
|
|
256
|
+
let(:test_suite_token_minitest) { 'minitest-token' }
|
|
257
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_TEST_SUITE_TOKEN_MINITEST' => test_suite_token_minitest }) }
|
|
258
|
+
it { should eq test_suite_token_minitest }
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
context "when ENV doesn't exist" do
|
|
262
|
+
it { should be_nil }
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
describe '.test_suite_token_cucumber' do
|
|
267
|
+
subject { described_class.test_suite_token_cucumber }
|
|
268
|
+
|
|
269
|
+
context 'when ENV exists' do
|
|
270
|
+
let(:test_suite_token_cucumber) { 'cucumber-token' }
|
|
271
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_TEST_SUITE_TOKEN_CUCUMBER' => test_suite_token_cucumber }) }
|
|
272
|
+
it { should eq test_suite_token_cucumber }
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
context "when ENV doesn't exist" do
|
|
276
|
+
it { should be_nil }
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
describe '.mode' do
|
|
281
|
+
subject { described_class.mode }
|
|
282
|
+
|
|
283
|
+
context 'when ENV exists' do
|
|
284
|
+
context 'when development mode' do
|
|
285
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'development' }) }
|
|
286
|
+
|
|
287
|
+
it { should eq :development }
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
context 'when test mode' do
|
|
291
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'test' }) }
|
|
292
|
+
|
|
293
|
+
it { should eq :test }
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
context 'when production mode' do
|
|
297
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'production' }) }
|
|
298
|
+
|
|
299
|
+
it { should eq :production }
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
context 'when fake mode' do
|
|
303
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => 'fake' }) }
|
|
304
|
+
|
|
305
|
+
it do
|
|
306
|
+
expect { subject }.to raise_error(ArgumentError)
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
context 'when blank mode' do
|
|
311
|
+
before { stub_const("ENV", { 'KNAPSACK_PRO_MODE' => '' }) }
|
|
312
|
+
|
|
313
|
+
it do
|
|
314
|
+
expect { subject }.to raise_error(ArgumentError)
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context "when ENV doesn't exist" do
|
|
320
|
+
it { should eq :production }
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
describe '.ci_env_for' do
|
|
325
|
+
let(:env_name) { :node_total }
|
|
326
|
+
|
|
327
|
+
subject { described_class.ci_env_for(env_name) }
|
|
328
|
+
|
|
329
|
+
context 'when CI has no value for env_name method' do
|
|
330
|
+
before do
|
|
331
|
+
expect(KnapsackPro::Config::CI::Circle).to receive_message_chain(:new, env_name).and_return(nil)
|
|
332
|
+
expect(KnapsackPro::Config::CI::Semaphore).to receive_message_chain(:new, env_name).and_return(nil)
|
|
333
|
+
expect(KnapsackPro::Config::CI::Buildkite).to receive_message_chain(:new, env_name).and_return(nil)
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
it do
|
|
337
|
+
expect(subject).to be_nil
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
context 'when CI has value for env_name method' do
|
|
342
|
+
let(:circle_env) { double(:circle) }
|
|
343
|
+
let(:semaphore_env) { double(:semaphore) }
|
|
344
|
+
let(:buildkite_env) { double(:buildkite) }
|
|
345
|
+
|
|
346
|
+
before do
|
|
347
|
+
allow(KnapsackPro::Config::CI::Circle).to receive_message_chain(:new, env_name).and_return(circle_env)
|
|
348
|
+
allow(KnapsackPro::Config::CI::Semaphore).to receive_message_chain(:new, env_name).and_return(semaphore_env)
|
|
349
|
+
allow(KnapsackPro::Config::CI::Buildkite).to receive_message_chain(:new, env_name).and_return(buildkite_env)
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
it { should eq circle_env }
|
|
353
|
+
|
|
354
|
+
context do
|
|
355
|
+
let(:circle_env) { nil }
|
|
356
|
+
|
|
357
|
+
it { should eq semaphore_env }
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
context do
|
|
361
|
+
let(:circle_env) { nil }
|
|
362
|
+
let(:semaphore_env) { nil }
|
|
363
|
+
|
|
364
|
+
it { should eq buildkite_env }
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
end
|