summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb')
-rw-r--r--spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb91
1 files changed, 68 insertions, 23 deletions
diff --git a/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb b/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb
index 472a58599d8..6685bf5385b 100644
--- a/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/expression/statement_spec.rb
@@ -1,14 +1,23 @@
require 'spec_helper'
describe Gitlab::Ci::Pipeline::Expression::Statement do
- let(:pipeline) { build(:ci_pipeline) }
-
subject do
- described_class.new(text, pipeline)
+ described_class.new(text, variables)
+ end
+
+ let(:variables) do
+ { 'PRESENT_VARIABLE' => 'my variable',
+ EMPTY_VARIABLE: '' }
end
- before do
- pipeline.variables.build([key: 'VARIABLE', value: 'my variable'])
+ describe '.new' do
+ context 'when variables are not provided' do
+ it 'allows to properly initializes the statement' do
+ statement = described_class.new('$PRESENT_VARIABLE')
+
+ expect(statement.evaluate).to be_nil
+ end
+ end
end
describe '#parse_tree' do
@@ -23,18 +32,26 @@ describe Gitlab::Ci::Pipeline::Expression::Statement do
context 'when expression grammar is incorrect' do
table = [
- '$VAR "text"', # missing operator
- '== "123"', # invalid right side
- "'single quotes'", # single quotes string
- '$VAR ==', # invalid right side
- '12345', # unknown syntax
- '' # empty statement
+ '$VAR "text"', # missing operator
+ '== "123"', # invalid left side
+ '"some string"', # only string provided
+ '$VAR ==', # invalid right side
+ '12345', # unknown syntax
+ '' # empty statement
]
table.each do |syntax|
- it "raises an error when syntax is `#{syntax}`" do
- expect { described_class.new(syntax, pipeline).parse_tree }
- .to raise_error described_class::StatementError
+ context "when expression grammar is #{syntax.inspect}" do
+ let(:text) { syntax }
+
+ it 'aises a statement error exception' do
+ expect { subject.parse_tree }
+ .to raise_error described_class::StatementError
+ end
+
+ it 'is an invalid statement' do
+ expect(subject).not_to be_valid
+ end
end
end
end
@@ -47,10 +64,14 @@ describe Gitlab::Ci::Pipeline::Expression::Statement do
expect(subject.parse_tree)
.to be_a Gitlab::Ci::Pipeline::Expression::Lexeme::Equals
end
+
+ it 'is a valid statement' do
+ expect(subject).to be_valid
+ end
end
context 'when using a single token' do
- let(:text) { '$VARIABLE' }
+ let(:text) { '$PRESENT_VARIABLE' }
it 'returns a single token instance' do
expect(subject.parse_tree)
@@ -62,14 +83,17 @@ describe Gitlab::Ci::Pipeline::Expression::Statement do
describe '#evaluate' do
statements = [
- ['$VARIABLE == "my variable"', true],
- ["$VARIABLE == 'my variable'", true],
- ['"my variable" == $VARIABLE', true],
- ['$VARIABLE == null', false],
- ['$VAR == null', true],
- ['null == $VAR', true],
- ['$VARIABLE', 'my variable'],
- ['$VAR', nil]
+ ['$PRESENT_VARIABLE == "my variable"', true],
+ ["$PRESENT_VARIABLE == 'my variable'", true],
+ ['"my variable" == $PRESENT_VARIABLE', true],
+ ['$PRESENT_VARIABLE == null', false],
+ ['$EMPTY_VARIABLE == null', false],
+ ['"" == $EMPTY_VARIABLE', true],
+ ['$EMPTY_VARIABLE', ''],
+ ['$UNDEFINED_VARIABLE == null', true],
+ ['null == $UNDEFINED_VARIABLE', true],
+ ['$PRESENT_VARIABLE', 'my variable'],
+ ['$UNDEFINED_VARIABLE', nil]
]
statements.each do |expression, value|
@@ -82,4 +106,25 @@ describe Gitlab::Ci::Pipeline::Expression::Statement do
end
end
end
+
+ describe '#truthful?' do
+ statements = [
+ ['$PRESENT_VARIABLE == "my variable"', true],
+ ["$PRESENT_VARIABLE == 'no match'", false],
+ ['$UNDEFINED_VARIABLE == null', true],
+ ['$PRESENT_VARIABLE', true],
+ ['$UNDEFINED_VARIABLE', false],
+ ['$EMPTY_VARIABLE', false]
+ ]
+
+ statements.each do |expression, value|
+ context "when using expression `#{expression}`" do
+ let(:text) { expression }
+
+ it "returns `#{value.inspect}`" do
+ expect(subject.truthful?).to eq value
+ end
+ end
+ end
+ end
end