stack_master 0.17.0 → 0.18.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/.travis.yml +7 -5
- data/README.md +15 -0
- data/features/apply.feature +0 -1
- data/features/apply_with_compile_time_parameters.feature +93 -0
- data/lib/stack_master/parameter_loader.rb +41 -12
- data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +35 -0
- data/lib/stack_master/sparkle_formation/compile_time/allowed_values_validator.rb +37 -0
- data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +33 -0
- data/lib/stack_master/sparkle_formation/compile_time/empty_validator.rb +32 -0
- data/lib/stack_master/sparkle_formation/compile_time/max_length_validator.rb +36 -0
- data/lib/stack_master/sparkle_formation/compile_time/max_size_validator.rb +36 -0
- data/lib/stack_master/sparkle_formation/compile_time/min_length_validator.rb +36 -0
- data/lib/stack_master/sparkle_formation/compile_time/min_size_validator.rb +36 -0
- data/lib/stack_master/sparkle_formation/compile_time/number_validator.rb +35 -0
- data/lib/stack_master/sparkle_formation/compile_time/parameters_validator.rb +27 -0
- data/lib/stack_master/sparkle_formation/compile_time/state_builder.rb +32 -0
- data/lib/stack_master/sparkle_formation/compile_time/string_validator.rb +33 -0
- data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +40 -0
- data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +40 -0
- data/lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb +41 -0
- data/lib/stack_master/stack.rb +4 -3
- data/lib/stack_master/template_compiler.rb +2 -2
- data/lib/stack_master/template_compilers/cfndsl.rb +1 -1
- data/lib/stack_master/template_compilers/json.rb +1 -1
- data/lib/stack_master/template_compilers/sparkle_formation.rb +33 -4
- data/lib/stack_master/template_compilers/yaml.rb +1 -1
- data/lib/stack_master/validator.rb +4 -1
- data/lib/stack_master/version.rb +1 -1
- data/spec/spec_helper.rb +3 -0
- data/spec/stack_master/parameter_loader_spec.rb +65 -53
- data/spec/stack_master/sparkle_formation/compile_time/allowed_pattern_validator_spec.rb +47 -0
- data/spec/stack_master/sparkle_formation/compile_time/allowed_values_validator_spec.rb +47 -0
- data/spec/stack_master/sparkle_formation/compile_time/definitions_validator_spec.rb +36 -0
- data/spec/stack_master/sparkle_formation/compile_time/empty_validator_spec.rb +47 -0
- data/spec/stack_master/sparkle_formation/compile_time/max_length_validator_spec.rb +37 -0
- data/spec/stack_master/sparkle_formation/compile_time/max_size_validator_spec.rb +27 -0
- data/spec/stack_master/sparkle_formation/compile_time/min_length_validator_spec.rb +36 -0
- data/spec/stack_master/sparkle_formation/compile_time/min_size_validator_spec.rb +28 -0
- data/spec/stack_master/sparkle_formation/compile_time/number_validator_spec.rb +41 -0
- data/spec/stack_master/sparkle_formation/compile_time/parameters_validator_spec.rb +65 -0
- data/spec/stack_master/sparkle_formation/compile_time/state_builder_spec.rb +28 -0
- data/spec/stack_master/sparkle_formation/compile_time/string_validator_spec.rb +35 -0
- data/spec/stack_master/sparkle_formation/compile_time/value_build_spec.rb +52 -0
- data/spec/stack_master/sparkle_formation/compile_time/value_validator_factory_spec.rb +40 -0
- data/spec/stack_master/stack_spec.rb +15 -13
- data/spec/stack_master/template_compiler_spec.rb +7 -6
- data/spec/stack_master/template_compilers/cfndsl_spec.rb +4 -1
- data/spec/stack_master/template_compilers/json_spec.rb +4 -1
- data/spec/stack_master/template_compilers/sparkle_formation_spec.rb +53 -9
- data/spec/stack_master/template_compilers/yaml_spec.rb +4 -1
- data/spec/stack_master/validator_spec.rb +10 -6
- data/spec/support/gemfiles/Gemfile.activesupport-4.0.0 +5 -0
- data/spec/support/validator_spec.rb +23 -0
- data/stack_master.gemspec +1 -1
- metadata +55 -6
@@ -1,81 +1,93 @@
|
|
1
1
|
RSpec.describe StackMaster::ParameterLoader do
|
2
|
-
|
3
|
-
let(:
|
4
|
-
'/base_dir/parameters/stack_name.yml',
|
5
|
-
'/base_dir/parameters/us-east-1/stack_name.yml'
|
6
|
-
] }
|
7
|
-
|
8
|
-
context "no parameter file" do
|
9
|
-
before do
|
10
|
-
allow(File).to receive(:exists?).and_return(false)
|
11
|
-
end
|
2
|
+
let(:stack_file_name) { '/base_dir/parameters/stack_name.yml' }
|
3
|
+
let(:region_file_name) { '/base_dir/parameters/us-east-1/stack_name.yml' }
|
12
4
|
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
subject(:parameters) { StackMaster::ParameterLoader.load([stack_file_name, region_file_name]) }
|
6
|
+
|
7
|
+
before do
|
8
|
+
file_mock(stack_file_name, stack_file_returns)
|
9
|
+
file_mock(region_file_name, region_file_returns)
|
16
10
|
end
|
17
11
|
|
18
|
-
context
|
19
|
-
|
20
|
-
|
21
|
-
allow(File).to receive(:exists?).with('/base_dir/parameters/us-east-1/stack_name.yml').and_return(false)
|
22
|
-
allow(File).to receive(:read).with('/base_dir/parameters/stack_name.yml').and_return("")
|
23
|
-
end
|
12
|
+
context 'no parameter file' do
|
13
|
+
let(:stack_file_returns) { {exists: false} }
|
14
|
+
let(:region_file_returns) { {exists: false} }
|
24
15
|
|
25
|
-
it
|
26
|
-
expect(parameters).to eq({})
|
16
|
+
it 'returns empty parameters' do
|
17
|
+
expect(parameters).to eq(template_parameters: {}, compile_time_parameters: {})
|
27
18
|
end
|
28
19
|
end
|
29
20
|
|
30
|
-
context
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
21
|
+
context 'an empty stack parameter file' do
|
22
|
+
let(:stack_file_returns) { {exists: true, read: ''} }
|
23
|
+
let(:region_file_returns) { {exists: false} }
|
24
|
+
|
25
|
+
it 'returns an empty hash' do
|
26
|
+
expect(parameters).to eq({template_parameters: {}, compile_time_parameters: {}})
|
35
27
|
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'stack parameter file' do
|
31
|
+
let(:stack_file_returns) { {exists: true, read: 'Param1: value1'} }
|
32
|
+
let(:region_file_returns) { {exists: false} }
|
36
33
|
|
37
|
-
it
|
38
|
-
expect(parameters).to eq({
|
34
|
+
it 'returns params from stack_name.yml' do
|
35
|
+
expect(parameters).to eq(template_parameters: {'Param1' => 'value1'}, compile_time_parameters: {})
|
39
36
|
end
|
40
37
|
end
|
41
38
|
|
42
|
-
context
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
context 'region parameter file' do
|
40
|
+
let(:stack_file_returns) { {exists: false } }
|
41
|
+
let(:region_file_returns) { {exists: true, read: 'Param2: value2'} }
|
42
|
+
|
43
|
+
it 'returns params from the region base stack_name.yml' do
|
44
|
+
expect(parameters).to eq(template_parameters: {'Param2' => 'value2'}, compile_time_parameters: {})
|
47
45
|
end
|
46
|
+
end
|
48
47
|
|
49
|
-
|
50
|
-
|
48
|
+
context 'stack and region parameter file' do
|
49
|
+
let(:stack_file_returns) { {exists: true, read: "Param1: value1\nParam2: valueX" } }
|
50
|
+
let(:region_file_returns) { {exists: true, read: 'Param2: value2'} }
|
51
|
+
|
52
|
+
it 'returns params from the region base stack_name.yml' do
|
53
|
+
expect(parameters).to eq(template_parameters: {'Param1' => 'value1', 'Param2' => 'value2'}, compile_time_parameters: {})
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
54
|
-
context
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
context 'compile time parameters' do
|
58
|
+
|
59
|
+
context 'stack parameter file' do
|
60
|
+
let(:stack_file_returns) { {exists: true, read: "Param1: value1\nCompileTimeParameters:\n Param2: value2" } }
|
61
|
+
let(:region_file_returns) { {exists: false} }
|
62
|
+
|
63
|
+
it 'returns params from stack_name.yml' do
|
64
|
+
expect(parameters).to eq(template_parameters: {'Param1' => 'value1'}, compile_time_parameters: {'Param2' => 'value2'})
|
65
|
+
end
|
60
66
|
end
|
61
67
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
68
|
+
context 'stack and region parameter file' do
|
69
|
+
let(:stack_file_returns) { {exists: true, read: "Param1: value1\nCompileTimeParameters:\n Param2: valueX" } }
|
70
|
+
let(:region_file_returns) { {exists: true, read: "CompileTimeParameters:\n Param2: value2"} }
|
71
|
+
|
72
|
+
it 'returns params from the region base stack_name.yml' do
|
73
|
+
expect(parameters).to eq(template_parameters: {'Param1' => 'value1'}, compile_time_parameters: {'Param2' => 'value2'})
|
74
|
+
end
|
67
75
|
end
|
76
|
+
|
68
77
|
end
|
69
78
|
|
70
79
|
context 'underscored parameter names' do
|
71
|
-
|
72
|
-
|
73
|
-
allow(File).to receive(:exists?).with('/base_dir/parameters/us-east-1/stack_name.yml').and_return(false)
|
74
|
-
allow(File).to receive(:read).with('/base_dir/parameters/stack_name.yml').and_return("vpc_id: vpc-xxxxxx")
|
75
|
-
end
|
80
|
+
let(:stack_file_returns) { {exists: true, read: 'vpc_id: vpc-xxxxxx' } }
|
81
|
+
let(:region_file_returns) { {exists: false} }
|
76
82
|
|
77
|
-
it
|
78
|
-
expect(parameters).to eq({'VpcId' => 'vpc-xxxxxx'})
|
83
|
+
it 'camelcases them' do
|
84
|
+
expect(parameters).to eq(template_parameters: {'VpcId' => 'vpc-xxxxxx'}, compile_time_parameters: {})
|
79
85
|
end
|
80
86
|
end
|
87
|
+
|
88
|
+
def file_mock(file_name, exists: false, read: nil)
|
89
|
+
allow(File).to receive(:exists?).with(file_name).and_return(exists)
|
90
|
+
allow(File).to receive(:read).with(file_name).and_return(read) if read
|
91
|
+
end
|
92
|
+
|
81
93
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::AllowedPatternValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} does not match allowed_pattern:#{definition[:allowed_pattern]}" } }
|
6
|
+
|
7
|
+
context 'string validation' do
|
8
|
+
let(:definition) { {type: :string, allowed_pattern: '^a'} }
|
9
|
+
validate_valid_parameter('a')
|
10
|
+
validate_valid_parameter(['a'])
|
11
|
+
validate_invalid_parameter('b', ['b'])
|
12
|
+
validate_invalid_parameter(['b'], ['b'])
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'string validation with default' do
|
16
|
+
let(:definition) { {type: :string, allowed_pattern: '^a', default: 'a'} }
|
17
|
+
validate_valid_parameter(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'string validation with multiple' do
|
21
|
+
let(:definition) { {type: :string, allowed_pattern: '^a', multiple: true} }
|
22
|
+
validate_valid_parameter('a,ab')
|
23
|
+
validate_invalid_parameter('a,,ab', [''])
|
24
|
+
validate_invalid_parameter('a, ,ab', [''])
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'string validation with multiple default values' do
|
28
|
+
let(:definition) { {type: :string, allowed_pattern: '^a', multiple: true, default:'a,a'} }
|
29
|
+
validate_valid_parameter(nil)
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'numerical validation' do
|
33
|
+
let(:definition) { {type: :number, allowed_pattern: '^1'} }
|
34
|
+
validate_valid_parameter(1)
|
35
|
+
validate_valid_parameter('1')
|
36
|
+
validate_valid_parameter([1])
|
37
|
+
validate_valid_parameter(['1'])
|
38
|
+
validate_invalid_parameter(2, [2])
|
39
|
+
validate_invalid_parameter('2', ['2'])
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'validation with default value' do
|
43
|
+
let(:definition) { {type: :number, allowed_pattern: '^1', default: '1'} }
|
44
|
+
validate_valid_parameter(nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::AllowedValuesValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} is not in allowed_values:#{definition[:allowed_values]}" } }
|
6
|
+
|
7
|
+
context 'string validation' do
|
8
|
+
let(:definition) { {type: :string, allowed_values: ['a']} }
|
9
|
+
validate_valid_parameter('a')
|
10
|
+
validate_valid_parameter(['a'])
|
11
|
+
validate_invalid_parameter('b', ['b'])
|
12
|
+
validate_invalid_parameter(['b'], ['b'])
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'string validation with default' do
|
16
|
+
let(:definition) { {type: :string, allowed_values: ['a'], default:'a'} }
|
17
|
+
validate_valid_parameter(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'string validation with multiple' do
|
21
|
+
let(:definition) { {type: :string, allowed_values: ['a'], multiple: true} }
|
22
|
+
validate_valid_parameter('a,a')
|
23
|
+
validate_invalid_parameter( 'a,, a', [''])
|
24
|
+
validate_invalid_parameter( 'a,,b', ['', 'b'])
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'string validation with multiple default values' do
|
28
|
+
let(:definition) { {type: :string, allowed_values: ['a'], multiple: true, default: 'a,a'} }
|
29
|
+
validate_valid_parameter(nil)
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'numerical validation' do
|
33
|
+
let(:definition) { {type: :number, allowed_values: [1]} }
|
34
|
+
validate_valid_parameter(1)
|
35
|
+
validate_valid_parameter('1')
|
36
|
+
validate_valid_parameter([1])
|
37
|
+
validate_valid_parameter(['1'])
|
38
|
+
validate_invalid_parameter(2, [2])
|
39
|
+
validate_invalid_parameter('2', ['2'])
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'numerical validation with default value' do
|
43
|
+
let(:definition) { {type: :number, allowed_values: [1], default: 1} }
|
44
|
+
validate_valid_parameter(nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::DefinitionsValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
|
5
|
+
let(:key) {:key}
|
6
|
+
let(:definition){ {key: {type: type}} }
|
7
|
+
|
8
|
+
subject {described_class.new(definition)}
|
9
|
+
|
10
|
+
[:string, :number].each do |type|
|
11
|
+
|
12
|
+
context "with :#{type} type definition" do
|
13
|
+
|
14
|
+
let(:type) {type}
|
15
|
+
|
16
|
+
it 'should not raise an exception' do
|
17
|
+
expect {subject.validate}.to_not raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with other type definition' do
|
25
|
+
|
26
|
+
let(:type) {:other}
|
27
|
+
|
28
|
+
it 'should not raise an exception' do
|
29
|
+
expect {subject.validate}.to raise_error(ArgumentError, "Unknown compile time parameter type: #{key}:#{type} valid types are #{[:string, :number]}")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::EmptyValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, _definition) { "#{name} cannot contain empty parameters:#{error.inspect}" } }
|
6
|
+
|
7
|
+
context 'string validation' do
|
8
|
+
let(:definition) { {type: :string} }
|
9
|
+
validate_valid_parameter('a')
|
10
|
+
validate_valid_parameter(['a'])
|
11
|
+
validate_invalid_parameter(nil, nil)
|
12
|
+
validate_invalid_parameter(['a', nil], ['a', nil])
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'string validation with default' do
|
16
|
+
let(:definition) { {type: :string, default: 'a'} }
|
17
|
+
validate_valid_parameter(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'string validation with multiples' do
|
21
|
+
let(:definition) { {type: :string, multiple: true} }
|
22
|
+
validate_valid_parameter('a,b')
|
23
|
+
validate_invalid_parameter('a,,b', 'a,,b')
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'string validation with multiples and defaults' do
|
27
|
+
let(:definition) { {type: :string, multiple: true, default: 'a,b'} }
|
28
|
+
validate_valid_parameter(nil)
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'numerical validation' do
|
32
|
+
let(:definition) { {type: :number} }
|
33
|
+
validate_valid_parameter(1)
|
34
|
+
validate_valid_parameter('1')
|
35
|
+
validate_valid_parameter([1])
|
36
|
+
validate_valid_parameter(['1'])
|
37
|
+
validate_invalid_parameter(nil, nil)
|
38
|
+
validate_invalid_parameter([1, nil], [1, nil])
|
39
|
+
validate_invalid_parameter(['1', nil], ['1', nil])
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'numerical validation with default' do
|
43
|
+
let(:definition) { {type: :number, default: '1'} }
|
44
|
+
validate_valid_parameter(nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::MaxLengthValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} must not exceed max_length:#{definition[:max_length]} characters" } }
|
6
|
+
|
7
|
+
context 'string validation' do
|
8
|
+
let(:definition) { {type: :string, max_length: 1} }
|
9
|
+
validate_valid_parameter('a')
|
10
|
+
validate_valid_parameter(['a'])
|
11
|
+
validate_invalid_parameter('ab', ['ab'])
|
12
|
+
validate_invalid_parameter(['ab'], ['ab'])
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'string validation with default value' do
|
16
|
+
let(:definition) { {type: :string, max_length: 1, default: 'a'} }
|
17
|
+
validate_valid_parameter(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'string validation with multiples' do
|
21
|
+
let(:definition) { {type: :string, max_length: 1, multiple: true} }
|
22
|
+
validate_valid_parameter('a,a')
|
23
|
+
validate_valid_parameter('a,,a')
|
24
|
+
validate_invalid_parameter('a,, ab', ['ab'])
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'string validation wtih multiples and default' do
|
28
|
+
let(:definition) { {type: :string, max_length: 1, multiple: true, default: 'a,a'} }
|
29
|
+
validate_valid_parameter(nil)
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'numerical validation' do
|
33
|
+
let(:definition) { {type: :number, max_length: 1} }
|
34
|
+
validate_valid_parameter('ab')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::MaxSizeValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} must not be greater than max_size:#{definition[:max_size]}" } }
|
6
|
+
|
7
|
+
context 'numerical validation' do
|
8
|
+
let(:definition) { {type: :number, max_size: 1} }
|
9
|
+
validate_valid_parameter(1)
|
10
|
+
validate_valid_parameter('1')
|
11
|
+
validate_valid_parameter([1])
|
12
|
+
validate_valid_parameter(['1'])
|
13
|
+
validate_invalid_parameter(2, [2])
|
14
|
+
validate_invalid_parameter('2', ['2'])
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'numerical validation with default' do
|
18
|
+
let(:definition) { {type: :number, max_size: 1, default: 1} }
|
19
|
+
validate_valid_parameter(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'string validation' do
|
23
|
+
let(:definition) { {type: :string, max_size: 1} }
|
24
|
+
validate_valid_parameter(2)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::MinLengthValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} must be at least min_length:#{definition[:min_length]} characters" } }
|
6
|
+
|
7
|
+
context 'string validation' do
|
8
|
+
let(:definition) { {type: :string, min_length: 2} }
|
9
|
+
validate_valid_parameter('ab')
|
10
|
+
validate_valid_parameter(['ab'])
|
11
|
+
validate_invalid_parameter('a', ['a'])
|
12
|
+
validate_invalid_parameter(['a'], ['a'])
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'string validation with default value' do
|
16
|
+
let(:definition) { {type: :string, min_length: 2, default: 'ab'} }
|
17
|
+
validate_valid_parameter(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'string validation with multiples' do
|
21
|
+
let(:definition) { {type: :string, min_length: 2, multiple: true} }
|
22
|
+
validate_valid_parameter('ab,cd')
|
23
|
+
validate_invalid_parameter('a,, cd', ['a', ''])
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'string validation with multiples and default' do
|
27
|
+
let(:definition) { {type: :string, min_length: 2, multiple: true, default: 'ab,cd'} }
|
28
|
+
validate_valid_parameter(nil)
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'numerical validation' do
|
32
|
+
let(:definition) { {type: :number, min_length: 2} }
|
33
|
+
validate_valid_parameter('a')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
RSpec.describe StackMaster::SparkleFormation::CompileTime::MinSizeValidator do
|
2
|
+
|
3
|
+
describe '#validate' do
|
4
|
+
let(:name) { 'name' }
|
5
|
+
let(:error_message) { -> (error, definition) { "#{name}:#{error} must not be lesser than min_size:#{definition[:min_size]}" } }
|
6
|
+
|
7
|
+
context 'numerical validation' do
|
8
|
+
let(:definition) { {type: :number, min_size: 1} }
|
9
|
+
validate_valid_parameter(1)
|
10
|
+
validate_valid_parameter('1')
|
11
|
+
validate_valid_parameter([1])
|
12
|
+
validate_valid_parameter(['1'])
|
13
|
+
validate_invalid_parameter(0, [0])
|
14
|
+
validate_invalid_parameter('0', ['0'])
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'numerical validation with default value' do
|
18
|
+
let(:definition) { {type: :number, min_size: 1, default: 1} }
|
19
|
+
validate_valid_parameter(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'string validation' do
|
23
|
+
let(:definition) { {type: :string, min_size: 1} }
|
24
|
+
validate_valid_parameter(0)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|