letitcrash 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 +7 -0
- data/lib/letitcrash/builders/file_builder.rb +75 -0
- data/lib/letitcrash/builders/report_builder.rb +52 -0
- data/lib/letitcrash/formatter.rb +29 -0
- data/lib/letitcrash/matcher.rb +46 -0
- data/lib/letitcrash/matchers/app_veyor.rb +19 -0
- data/lib/letitcrash/matchers/base.rb +31 -0
- data/lib/letitcrash/matchers/buildkite.rb +19 -0
- data/lib/letitcrash/matchers/circle_ci.rb +19 -0
- data/lib/letitcrash/matchers/codefresh.rb +20 -0
- data/lib/letitcrash/matchers/codeship.rb +19 -0
- data/lib/letitcrash/matchers/drone.rb +19 -0
- data/lib/letitcrash/matchers/git.rb +27 -0
- data/lib/letitcrash/matchers/gitlab_ci.rb +20 -0
- data/lib/letitcrash/matchers/jenkins.rb +20 -0
- data/lib/letitcrash/matchers/semaphore.rb +19 -0
- data/lib/letitcrash/matchers/shippable.rb +19 -0
- data/lib/letitcrash/matchers/snap_ci.rb +19 -0
- data/lib/letitcrash/matchers/solano_ci.rb +19 -0
- data/lib/letitcrash/matchers/team_city.rb +19 -0
- data/lib/letitcrash/matchers/travis_ci.rb +19 -0
- data/lib/letitcrash/matchers/wercker.rb +20 -0
- data/lib/letitcrash/proto/structs.rb +34 -0
- data/lib/letitcrash/reporters/stream.rb +19 -0
- data/lib/letitcrash/reporters/upload.rb +40 -0
- data/lib/letitcrash/sanitizer.rb +37 -0
- data/lib/letitcrash/version.rb +5 -0
- data/lib/letitcrash.rb +36 -0
- data/spec/builders/file_builder_spec.rb +68 -0
- data/spec/builders/report_builder_spec.rb +62 -0
- data/spec/formatter_spec.rb +57 -0
- data/spec/matcher_spec.rb +31 -0
- data/spec/matchers/app_veyor_spec.rb +44 -0
- data/spec/matchers/base_spec.rb +15 -0
- data/spec/matchers/buildkite_spec.rb +44 -0
- data/spec/matchers/circle_ci_spec.rb +44 -0
- data/spec/matchers/codefresh_spec.rb +34 -0
- data/spec/matchers/codeship_spec.rb +44 -0
- data/spec/matchers/drone_spec.rb +44 -0
- data/spec/matchers/git_spec.rb +60 -0
- data/spec/matchers/gitlab_ci_spec.rb +36 -0
- data/spec/matchers/jenkins_ci_spec.rb +36 -0
- data/spec/matchers/semaphore_spec.rb +44 -0
- data/spec/matchers/shared_helpers.rb +17 -0
- data/spec/matchers/shippable_spec.rb +44 -0
- data/spec/matchers/snap_ci_spec.rb +44 -0
- data/spec/matchers/solano_ci_spec.rb +36 -0
- data/spec/matchers/team_city_spec.rb +36 -0
- data/spec/matchers/travis_ci_spec.rb +44 -0
- data/spec/matchers/wercker_spec.rb +42 -0
- data/spec/reporters/stream_spec.rb +26 -0
- data/spec/reporters/upload_spec.rb +45 -0
- data/spec/sanitizer_spec.rb +23 -0
- data/spec/spec_helper.rb +19 -0
- metadata +374 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require 'set'
|
5
|
+
|
6
|
+
require 'parser/current'
|
7
|
+
|
8
|
+
module LetItCrash
|
9
|
+
class Sanitizer
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
def_delegators :@relevant, :include?
|
13
|
+
|
14
|
+
def self.from_path(path:)
|
15
|
+
from_source(source: File.read(path))
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.from_source(source:)
|
19
|
+
new(root: Parser::CurrentRuby.parse(source))
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(root:)
|
23
|
+
@relevant = Set.new
|
24
|
+
visit(root)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# This method reeks of :reek:FeatureEnvy.
|
30
|
+
def visit(node)
|
31
|
+
return unless node.is_a?(Parser::AST::Node)
|
32
|
+
loc = node.loc
|
33
|
+
@relevant.add(loc.first_line) if loc.expression
|
34
|
+
node.children.each(&method(:visit))
|
35
|
+
end
|
36
|
+
end # class Sanitizer
|
37
|
+
end # module LetItCrash
|
data/lib/letitcrash.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Ministry of Matching.
|
4
|
+
require 'letitcrash/matchers/base'
|
5
|
+
require 'letitcrash/matchers/app_veyor'
|
6
|
+
require 'letitcrash/matchers/buildkite'
|
7
|
+
require 'letitcrash/matchers/circle_ci'
|
8
|
+
require 'letitcrash/matchers/codefresh'
|
9
|
+
require 'letitcrash/matchers/codeship'
|
10
|
+
require 'letitcrash/matchers/drone'
|
11
|
+
require 'letitcrash/matchers/git'
|
12
|
+
require 'letitcrash/matchers/gitlab_ci'
|
13
|
+
require 'letitcrash/matchers/jenkins'
|
14
|
+
require 'letitcrash/matchers/semaphore'
|
15
|
+
require 'letitcrash/matchers/shippable'
|
16
|
+
require 'letitcrash/matchers/snap_ci'
|
17
|
+
require 'letitcrash/matchers/solano_ci'
|
18
|
+
require 'letitcrash/matchers/team_city'
|
19
|
+
require 'letitcrash/matchers/travis_ci'
|
20
|
+
require 'letitcrash/matchers/wercker'
|
21
|
+
require 'letitcrash/matcher'
|
22
|
+
|
23
|
+
# Ministry of Sanitation.
|
24
|
+
require 'letitcrash/sanitizer'
|
25
|
+
|
26
|
+
# Ministry of Construction.
|
27
|
+
require 'letitcrash/proto/structs'
|
28
|
+
require 'letitcrash/builders/file_builder'
|
29
|
+
require 'letitcrash/builders/report_builder'
|
30
|
+
|
31
|
+
# Ministry of Reporting.
|
32
|
+
require 'letitcrash/reporters/stream'
|
33
|
+
require 'letitcrash/reporters/upload'
|
34
|
+
|
35
|
+
require 'letitcrash/formatter'
|
36
|
+
require 'letitcrash/version'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module LetItCrash
|
6
|
+
module Builders
|
7
|
+
RSpec.describe FileBuilder do
|
8
|
+
describe '.build' do
|
9
|
+
let(:filename) { 'spec/fixtures/source.file' }
|
10
|
+
let(:file) do
|
11
|
+
instance_double(
|
12
|
+
SimpleCov::SourceFile,
|
13
|
+
filename: filename,
|
14
|
+
lines: [
|
15
|
+
instance_double(
|
16
|
+
SimpleCov::SourceFile::Line,
|
17
|
+
line_number: 1,
|
18
|
+
skipped?: false,
|
19
|
+
coverage: 0,
|
20
|
+
),
|
21
|
+
instance_double(
|
22
|
+
SimpleCov::SourceFile::Line,
|
23
|
+
line_number: 2,
|
24
|
+
skipped?: false,
|
25
|
+
coverage: 0,
|
26
|
+
),
|
27
|
+
instance_double(
|
28
|
+
SimpleCov::SourceFile::Line,
|
29
|
+
line_number: 3,
|
30
|
+
skipped?: false,
|
31
|
+
coverage: 1,
|
32
|
+
)
|
33
|
+
],
|
34
|
+
)
|
35
|
+
end
|
36
|
+
let(:result) { described_class.build(file: file, rewriter: rewriter) }
|
37
|
+
|
38
|
+
context 'without rewriter' do
|
39
|
+
let(:rewriter) { nil }
|
40
|
+
|
41
|
+
it { expect(result).to be_a Proto::File }
|
42
|
+
it { expect(result.coverage).to eq 1.0 }
|
43
|
+
it { expect(result.digest).to start_with '73054' }
|
44
|
+
|
45
|
+
context 'with lines' do
|
46
|
+
let(:lines) { result.lines }
|
47
|
+
|
48
|
+
it { expect(lines.count).to eq 1 }
|
49
|
+
it { expect(lines[3]).to eq 1 }
|
50
|
+
end # context 'with lines'
|
51
|
+
|
52
|
+
context 'with path' do
|
53
|
+
let(:path) { result.path }
|
54
|
+
|
55
|
+
it { expect(path.relative).to eq filename }
|
56
|
+
it { expect(path.rewritten).to be_empty }
|
57
|
+
end # context 'with path'
|
58
|
+
end # context 'without rewriter'
|
59
|
+
|
60
|
+
context 'with rewriter' do
|
61
|
+
let(:rewriter) { ->(name) { "bacon/#{name}" } }
|
62
|
+
|
63
|
+
it { expect(result.path.rewritten).to start_with 'bacon/spec' }
|
64
|
+
end # context 'with rewriter'
|
65
|
+
end # describe '.build'
|
66
|
+
end # RSpec.describe FileBuilder
|
67
|
+
end # module Builders
|
68
|
+
end # module LetItCrash
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# rubocop:disable RSpec/MessageSpies
|
6
|
+
module LetItCrash
|
7
|
+
module Builders
|
8
|
+
describe ReportBuilder do
|
9
|
+
describe '.build' do
|
10
|
+
let(:branch) { 'branch' }
|
11
|
+
let(:sha) { 'sha' }
|
12
|
+
let(:environment) { nil }
|
13
|
+
let(:rewriter) { nil }
|
14
|
+
let(:report) do
|
15
|
+
described_class.build(
|
16
|
+
environment: environment,
|
17
|
+
result: result,
|
18
|
+
rewriter: rewriter,
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
expect(Matcher)
|
24
|
+
.to receive(:new)
|
25
|
+
.with(environment: environment)
|
26
|
+
.and_return(
|
27
|
+
instance_double(
|
28
|
+
Matcher,
|
29
|
+
matches?: matches,
|
30
|
+
branch: branch,
|
31
|
+
sha: sha,
|
32
|
+
),
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with match' do
|
37
|
+
let(:matches) { true }
|
38
|
+
let(:file) { instance_double(SimpleCov::SourceFile) }
|
39
|
+
let(:result) { instance_double(SimpleCov::Result, files: [file]) }
|
40
|
+
|
41
|
+
before do
|
42
|
+
expect(FileBuilder)
|
43
|
+
.to receive(:build)
|
44
|
+
.with(file: file, rewriter: rewriter)
|
45
|
+
.and_return(Proto::File.new)
|
46
|
+
end
|
47
|
+
|
48
|
+
it { expect(report.commit.branch).to eq branch }
|
49
|
+
it { expect(report.commit.sha).to eq sha }
|
50
|
+
it { expect(report.files.count).to eq 1 }
|
51
|
+
end # context 'with match'
|
52
|
+
|
53
|
+
context 'with no match' do
|
54
|
+
let(:matches) { false }
|
55
|
+
let(:result) { nil }
|
56
|
+
|
57
|
+
it { expect { report }.to raise_error ReportBuilder::MatcherMissing }
|
58
|
+
end # context 'with no match'
|
59
|
+
end # describe '.build'
|
60
|
+
end # describe ReportBuilder
|
61
|
+
end # module Builders
|
62
|
+
end # module LetItCrash
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# rubocop:disable RSpec/MessageSpies
|
6
|
+
module LetItCrash
|
7
|
+
RSpec.describe Formatter do
|
8
|
+
let(:mock_reporter) { instance_double(Reporters::Upload) }
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
let(:default_call) do
|
12
|
+
expect(Reporters::Upload)
|
13
|
+
.to receive(:from_env)
|
14
|
+
.and_return(mock_reporter)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'without reporters' do
|
18
|
+
let(:formatter) { described_class.new }
|
19
|
+
|
20
|
+
before { default_call.once }
|
21
|
+
|
22
|
+
it { expect(formatter).to be_a described_class }
|
23
|
+
end # context 'without reporters'
|
24
|
+
|
25
|
+
context 'with reporters' do
|
26
|
+
let(:formatter) { described_class.new(reporters: [mock_reporter]) }
|
27
|
+
|
28
|
+
before { default_call.never }
|
29
|
+
|
30
|
+
it { expect(formatter).to be_a described_class }
|
31
|
+
end # context 'with reporters'
|
32
|
+
end # describe '#initialize'
|
33
|
+
|
34
|
+
describe '#format' do
|
35
|
+
let(:formatter) { described_class.new(reporters: [mock_reporter]) }
|
36
|
+
let(:mock_result) { instance_double(SimpleCov::Result) }
|
37
|
+
let(:mock_report) { instance_double(Proto::Report) }
|
38
|
+
|
39
|
+
before do
|
40
|
+
expect(Builders::ReportBuilder)
|
41
|
+
.to receive(:build)
|
42
|
+
.with(environment: ENV, result: mock_result, rewriter: nil)
|
43
|
+
.and_return(mock_report)
|
44
|
+
|
45
|
+
expect(mock_reporter).to receive(:report).with(mock_report)
|
46
|
+
end
|
47
|
+
|
48
|
+
it { expect { formatter.format(mock_result) }.not_to raise_error }
|
49
|
+
end # describe '#format'
|
50
|
+
|
51
|
+
describe '#new' do
|
52
|
+
let(:formatter) { described_class.new(reporters: [mock_reporter]) }
|
53
|
+
|
54
|
+
it { expect(formatter.new).to eq formatter }
|
55
|
+
end # describe '#new'
|
56
|
+
end # RSpec.describe Formatter
|
57
|
+
end # module LetItCrash
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
# rubocop:disable RSpec/MessageSpies
|
7
|
+
module LetItCrash
|
8
|
+
RSpec.describe Matcher do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:environment) { { 'CF_BRANCH' => branch, 'CF_REVISION' => sha } }
|
11
|
+
|
12
|
+
context 'when Codefresh matches' do
|
13
|
+
it { expect(matcher.matches?).to be_truthy }
|
14
|
+
it { expect(matcher.branch).to eq branch }
|
15
|
+
it { expect(matcher.sha).to eq sha }
|
16
|
+
end # context 'when Codefresh matches'
|
17
|
+
|
18
|
+
context 'when nothing matches' do
|
19
|
+
let(:branch) { nil }
|
20
|
+
|
21
|
+
before do
|
22
|
+
expect(IO)
|
23
|
+
.to receive(:popen)
|
24
|
+
.with(Matchers::Git::STATUS_CMD)
|
25
|
+
.and_return(instance_double(IO, read: 'fatal'))
|
26
|
+
end
|
27
|
+
|
28
|
+
it { expect(matcher.matches?).to be_falsey }
|
29
|
+
end # context 'when nothing matches'
|
30
|
+
end # RSpec.describe Matcher
|
31
|
+
end # module LetItCrash
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe AppVeyor do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:ci) { 'true' }
|
11
|
+
let(:appveyor) { 'true' }
|
12
|
+
let(:environment) do
|
13
|
+
{
|
14
|
+
'CI' => ci,
|
15
|
+
'APPVEYOR' => appveyor,
|
16
|
+
'APPVEYOR_REPO_BRANCH' => branch,
|
17
|
+
'APPVEYOR_REPO_COMMIT' => sha
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like 'reports_branch_and_sha'
|
22
|
+
|
23
|
+
describe '#matches?' do
|
24
|
+
let(:result) { matcher.matches? }
|
25
|
+
|
26
|
+
context 'with CI and APPVEYOR set to `true` (default)' do
|
27
|
+
it { expect(result).to be_truthy }
|
28
|
+
end # context 'with CI and APPVEYOR set to `true` (default)'
|
29
|
+
|
30
|
+
context 'with CI set to nil' do
|
31
|
+
let(:ci) { nil }
|
32
|
+
|
33
|
+
it { expect(result).to be_falsey }
|
34
|
+
end # context 'with CI set to nil'
|
35
|
+
|
36
|
+
context 'with APPVEYOR set to nil' do
|
37
|
+
let(:appveyor) { nil }
|
38
|
+
|
39
|
+
it { expect(result).to be_falsey }
|
40
|
+
end # context 'with APPVEYOR set to nil'
|
41
|
+
end # describe '#matches?'
|
42
|
+
end # RSpec.describe AppVeyor
|
43
|
+
end # module Matchers
|
44
|
+
end # module LetItCrash
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module LetItCrash
|
6
|
+
module Matchers
|
7
|
+
RSpec.describe Base do
|
8
|
+
let(:matcher) { described_class.new(environment: nil) }
|
9
|
+
|
10
|
+
it { expect { matcher.matches? }.to raise_error NotImplementedError }
|
11
|
+
it { expect { matcher.branch }.to raise_error NotImplementedError }
|
12
|
+
it { expect { matcher.sha }.to raise_error NotImplementedError }
|
13
|
+
end # RSpec.describe Base
|
14
|
+
end # module Matchers
|
15
|
+
end # module LetItCrash
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe Buildkite do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:ci) { 'true' }
|
11
|
+
let(:buildkite) { 'true' }
|
12
|
+
let(:environment) do
|
13
|
+
{
|
14
|
+
'CI' => ci,
|
15
|
+
'BUILDKITE' => buildkite,
|
16
|
+
'BUILDKITE_BRANCH' => branch,
|
17
|
+
'BUILDKITE_COMMIT' => sha
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like 'reports_branch_and_sha'
|
22
|
+
|
23
|
+
describe '#matches?' do
|
24
|
+
let(:result) { matcher.matches? }
|
25
|
+
|
26
|
+
context 'with CI and BUILDKITE set to `true` (default)' do
|
27
|
+
it { expect(result).to be_truthy }
|
28
|
+
end # context 'with CI and BUILDKITE set to `true` (default)'
|
29
|
+
|
30
|
+
context 'with CI set to nil' do
|
31
|
+
let(:ci) { nil }
|
32
|
+
|
33
|
+
it { expect(result).to be_falsey }
|
34
|
+
end # context 'with CI set to nil'
|
35
|
+
|
36
|
+
context 'with BUILDKITE set to nil' do
|
37
|
+
let(:buildkite) { nil }
|
38
|
+
|
39
|
+
it { expect(result).to be_falsey }
|
40
|
+
end # context 'with BUILDKITE set to nil'
|
41
|
+
end # describe '#matches?'
|
42
|
+
end # RSpec.describe Buildkite
|
43
|
+
end # module Matchers
|
44
|
+
end # module LetItCrash
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe CircleCI do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:ci) { 'true' }
|
11
|
+
let(:circle_ci) { 'true' }
|
12
|
+
let(:environment) do
|
13
|
+
{
|
14
|
+
'CI' => ci,
|
15
|
+
'CIRCLECI' => circle_ci,
|
16
|
+
'CIRCLE_BRANCH' => branch,
|
17
|
+
'CIRCLE_SHA1' => sha
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like 'reports_branch_and_sha'
|
22
|
+
|
23
|
+
describe '#matches?' do
|
24
|
+
let(:result) { matcher.matches? }
|
25
|
+
|
26
|
+
context 'with CI and CIRCLECI set to `true` (default)' do
|
27
|
+
it { expect(result).to be_truthy }
|
28
|
+
end # context 'with CI and CIRCLECI set to `true` (default)'
|
29
|
+
|
30
|
+
context 'with CI set to nil' do
|
31
|
+
let(:ci) { nil }
|
32
|
+
|
33
|
+
it { expect(result).to be_falsey }
|
34
|
+
end # context 'with CI set to nil'
|
35
|
+
|
36
|
+
context 'with CIRCLECI set to nil' do
|
37
|
+
let(:circle_ci) { nil }
|
38
|
+
|
39
|
+
it { expect(result).to be_falsey }
|
40
|
+
end # context 'with CIRCLECI set to nil'
|
41
|
+
end # describe '#matches?'
|
42
|
+
end # RSpec.describe CircleCI
|
43
|
+
end # module Matchers
|
44
|
+
end # module LetItCrash
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe Codefresh do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:environment) do
|
11
|
+
{
|
12
|
+
'CF_BRANCH' => branch,
|
13
|
+
'CF_REVISION' => sha
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
it_behaves_like 'reports_branch_and_sha'
|
18
|
+
|
19
|
+
describe '#matches?' do
|
20
|
+
let(:result) { matcher.matches? }
|
21
|
+
|
22
|
+
context 'when CF_BRANCH set (default)' do
|
23
|
+
it { expect(result).to be_truthy }
|
24
|
+
end # context 'when CF_BRANCH set (default)'
|
25
|
+
|
26
|
+
context 'when CF_BRANCH not set' do
|
27
|
+
let(:branch) { nil }
|
28
|
+
|
29
|
+
it { expect(result).to be_falsey }
|
30
|
+
end # context 'when CF_BRANCH not set'
|
31
|
+
end # describe '#matches?'
|
32
|
+
end # RSpec.describe Codefresh
|
33
|
+
end # module Matchers
|
34
|
+
end # module LetItCrash
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe Codeship do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:ci) { 'true' }
|
11
|
+
let(:ci_name) { 'codeship' }
|
12
|
+
let(:environment) do
|
13
|
+
{
|
14
|
+
'CI' => ci,
|
15
|
+
'CI_NAME' => ci_name,
|
16
|
+
'CI_BRANCH' => branch,
|
17
|
+
'CI_COMMIT_ID' => sha
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like 'reports_branch_and_sha'
|
22
|
+
|
23
|
+
describe '#matches?' do
|
24
|
+
let(:result) { matcher.matches? }
|
25
|
+
|
26
|
+
context 'with CI and CI_NAME set to `codeship` (default)' do
|
27
|
+
it { expect(result).to be_truthy }
|
28
|
+
end # context 'with CI and CI_NAME set to `codeship` (default)'
|
29
|
+
|
30
|
+
context 'with CI set to nil' do
|
31
|
+
let(:ci) { nil }
|
32
|
+
|
33
|
+
it { expect(result).to be_falsey }
|
34
|
+
end # context 'with CI set to nil'
|
35
|
+
|
36
|
+
context 'with CI_NAME set to nil' do
|
37
|
+
let(:ci_name) { nil }
|
38
|
+
|
39
|
+
it { expect(result).to be_falsey }
|
40
|
+
end # context 'with CI_NAME set to nil'
|
41
|
+
end # describe '#matches?'
|
42
|
+
end # RSpec.describe Codeship
|
43
|
+
end # module Matchers
|
44
|
+
end # module LetItCrash
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe Drone do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:ci) { 'true' }
|
11
|
+
let(:drone) { 'true' }
|
12
|
+
let(:environment) do
|
13
|
+
{
|
14
|
+
'CI' => ci,
|
15
|
+
'DRONE' => drone,
|
16
|
+
'DRONE_BRANCH' => branch,
|
17
|
+
'DRONE_COMMIT' => sha
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it_behaves_like 'reports_branch_and_sha'
|
22
|
+
|
23
|
+
describe '#matches?' do
|
24
|
+
let(:result) { matcher.matches? }
|
25
|
+
|
26
|
+
context 'with CI and DRONE set to `true` (default)' do
|
27
|
+
it { expect(result).to be_truthy }
|
28
|
+
end # context 'with CI and DRONE set to `true` (default)'
|
29
|
+
|
30
|
+
context 'with CI set to nil' do
|
31
|
+
let(:ci) { nil }
|
32
|
+
|
33
|
+
it { expect(result).to be_falsey }
|
34
|
+
end # context 'with CI set to nil'
|
35
|
+
|
36
|
+
context 'with DRONE set to nil' do
|
37
|
+
let(:drone) { nil }
|
38
|
+
|
39
|
+
it { expect(result).to be_falsey }
|
40
|
+
end # context 'with DRONE set to nil'
|
41
|
+
end # describe '#matches?'
|
42
|
+
end # RSpec.describe Drone
|
43
|
+
end # module Matchers
|
44
|
+
end # module LetItCrash
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# rubocop:disable RSpec/MessageSpies
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe Git do
|
9
|
+
let(:matcher) { described_class.new(environment: nil) }
|
10
|
+
|
11
|
+
shared_context 'with_command' do |cmd, result|
|
12
|
+
let(:output) { instance_double(IO, read: result) }
|
13
|
+
|
14
|
+
before { expect(IO).to receive(:popen).with(cmd).and_return(output) }
|
15
|
+
end # shared_context 'with_command'
|
16
|
+
|
17
|
+
describe '#matches?' do
|
18
|
+
let(:result) { matcher.matches? }
|
19
|
+
|
20
|
+
context 'when on a Git branch' do
|
21
|
+
include_context 'with_command',
|
22
|
+
described_class::STATUS_CMD,
|
23
|
+
'On branch master'
|
24
|
+
|
25
|
+
it { expect(result).to be_truthy }
|
26
|
+
end # context 'when on a Git branch'
|
27
|
+
|
28
|
+
context 'when not on a Git branch' do
|
29
|
+
include_context 'with_command', 'git status', 'fatal: Not a git...'
|
30
|
+
|
31
|
+
it { expect(result).to be_falsey }
|
32
|
+
end # context 'when not on a Git branch'
|
33
|
+
end # describe '#matches?'
|
34
|
+
|
35
|
+
describe '#branch' do
|
36
|
+
context 'when HEAD' do
|
37
|
+
include_context 'with_command',
|
38
|
+
described_class::BRANCH_CMD,
|
39
|
+
'HEAD'
|
40
|
+
|
41
|
+
it { expect(matcher.branch).to eq 'master' }
|
42
|
+
end # context 'when HEAD'
|
43
|
+
|
44
|
+
context 'with normal branch' do
|
45
|
+
include_context 'with_command',
|
46
|
+
described_class::BRANCH_CMD,
|
47
|
+
'branch'
|
48
|
+
|
49
|
+
it { expect(matcher.branch).to eq 'branch' }
|
50
|
+
end # context 'with normal branch'
|
51
|
+
end # describe '#branch'
|
52
|
+
|
53
|
+
describe '#sha' do
|
54
|
+
include_context 'with_command', described_class::SHA_CMD, 'sha'
|
55
|
+
|
56
|
+
it { expect(matcher.sha).to eq 'sha' }
|
57
|
+
end # describe '#sha'
|
58
|
+
end # RSpec.describe Git
|
59
|
+
end # module Matchers
|
60
|
+
end # module LetItCrash
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'matchers/shared_helpers'
|
5
|
+
|
6
|
+
module LetItCrash
|
7
|
+
module Matchers
|
8
|
+
RSpec.describe GitLabCI do
|
9
|
+
include_context 'with_branch_and_sha'
|
10
|
+
let(:gitlab_ci) { 'true' }
|
11
|
+
let(:environment) do
|
12
|
+
{
|
13
|
+
'GITLAB_CI' => gitlab_ci,
|
14
|
+
'CI_BUILD_REF_NAME' => branch,
|
15
|
+
'CI_BUILD_REF' => sha
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
it_behaves_like 'reports_branch_and_sha'
|
20
|
+
|
21
|
+
describe '#matches?' do
|
22
|
+
let(:result) { matcher.matches? }
|
23
|
+
|
24
|
+
context 'with GITLAB_CI set to `true` (default)' do
|
25
|
+
it { expect(result).to be_truthy }
|
26
|
+
end # context 'with GITLAB_CI set to `true` (default)'
|
27
|
+
|
28
|
+
context 'with GITLAB_CI set to nil' do
|
29
|
+
let(:gitlab_ci) { nil }
|
30
|
+
|
31
|
+
it { expect(result).to be_falsey }
|
32
|
+
end # context 'with GITLAB_CI set to nil'
|
33
|
+
end # describe '#matches?'
|
34
|
+
end # RSpec.describe GitLabCI
|
35
|
+
end # module Matchers
|
36
|
+
end # module LetItCrash
|