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.
- 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
|